Backed out 15 changesets (bug 1852806) for causing mda failures on test_video_low_pow...
[gecko.git] / dom / media / SelfRef.h
blob40410abb8f077bc945779cb5af0b0d62bdb5842a
1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
7 #ifndef SELF_REF_H
8 #define SELF_REF_H
10 #include "mozilla/Attributes.h"
12 namespace mozilla {
14 template <class T>
15 class SelfReference {
16 public:
17 SelfReference() : mHeld(false) {}
18 ~SelfReference() {
19 NS_ASSERTION(!mHeld, "Forgot to drop the self reference?");
22 void Take(T* t) {
23 if (!mHeld) {
24 mHeld = true;
25 t->AddRef();
28 void Drop(T* t) {
29 if (mHeld) {
30 mHeld = false;
31 t->Release();
35 MOZ_IMPLICIT operator bool() const { return mHeld; }
37 SelfReference(const SelfReference& aOther) = delete;
38 void operator=(const SelfReference& aOther) = delete;
40 private:
41 bool mHeld;
44 } // namespace mozilla
46 #endif // SELF_REF_H