29 #ifndef JUCE_REFERENCECOUNTEDOBJECT_H_INCLUDED 30 #define JUCE_REFERENCECOUNTEDOBJECT_H_INCLUDED 84 jassert (getReferenceCount() > 0);
96 jassert (getReferenceCount() > 0);
97 return --refCount == 0;
113 jassert (getReferenceCount() == 0);
163 jassert (getReferenceCount() > 0);
175 jassert (getReferenceCount() > 0);
176 return --refCount == 0;
192 jassert (getReferenceCount() == 0);
226 template <
class ReferenceCountedObjectClass>
236 : referencedObject (
nullptr)
244 : referencedObject (refCountedObject)
246 incIfNotNull (refCountedObject);
253 : referencedObject (other.referencedObject)
255 incIfNotNull (referencedObject);
261 template <
class Convertible>
263 : referencedObject (static_cast <ReferencedType*> (other.get()))
265 incIfNotNull (referencedObject);
274 return operator= (other.referencedObject);
281 template <
class Convertible>
284 return operator= (static_cast<ReferencedType*> (other.
get()));
294 if (referencedObject != newObject)
296 incIfNotNull (newObject);
297 ReferencedType*
const oldObject = referencedObject;
298 referencedObject = newObject;
299 decIfNotNull (oldObject);
305 #if JUCE_COMPILER_SUPPORTS_MOVE_SEMANTICS 308 : referencedObject (other.referencedObject)
310 other.referencedObject =
nullptr;
316 std::swap (referencedObject, other.referencedObject);
327 decIfNotNull (referencedObject);
334 operator ReferencedType*()
const noexcept {
return referencedObject; }
339 ReferencedType*
get()
const noexcept {
return referencedObject; }
349 jassert (referencedObject !=
nullptr);
350 return referencedObject;
355 ReferencedType* referencedObject;
357 static void incIfNotNull (ReferencedType* o)
noexcept 360 o->incReferenceCount();
363 static void decIfNotNull (ReferencedType* o)
noexcept 365 if (o !=
nullptr && o->decReferenceCountWithoutDeleting())
373 template <
class ReferenceCountedObjectClass>
376 return object1.get() == object2;
380 template <
class ReferenceCountedObjectClass>
383 return object1.get() == object2.get();
387 template <
class ReferenceCountedObjectClass>
390 return object1 == object2.get();
394 template <
class ReferenceCountedObjectClass>
397 return object1.get() != object2;
401 template <
class ReferenceCountedObjectClass>
404 return object1.get() != object2.get();
408 template <
class ReferenceCountedObjectClass>
411 return object1 != object2.get();
415 #endif // JUCE_REFERENCECOUNTEDOBJECT_H_INCLUDED ~ReferenceCountedObjectPtr()
Definition: juce_ReferenceCountedObject.h:325
void decReferenceCount() noexcept
Definition: juce_ReferenceCountedObject.h:161
#define noexcept
Definition: juce_CompilerSupport.h:141
Definition: juce_Atomic.h:41
void incReferenceCount() noexcept
Definition: juce_ReferenceCountedObject.h:74
ReferenceCountedObjectClass ReferencedType
Definition: juce_ReferenceCountedObject.h:231
ReferencedType * getObject() const noexcept
Definition: juce_ReferenceCountedObject.h:344
ReferenceCountedObjectPtr(const ReferenceCountedObjectPtr &other) noexcept
Definition: juce_ReferenceCountedObject.h:252
ReferenceCountedObjectPtr(const ReferenceCountedObjectPtr< Convertible > &other) noexcept
Definition: juce_ReferenceCountedObject.h:262
ReferenceCountedObjectPtr() noexcept
Definition: juce_ReferenceCountedObject.h:235
virtual ~ReferenceCountedObject()
Definition: juce_ReferenceCountedObject.h:110
#define JUCE_API
Definition: juce_StandardHeader.h:139
ReferencedType * operator->() const noexcept
Definition: juce_ReferenceCountedObject.h:347
bool decReferenceCountWithoutDeleting() noexcept
Definition: juce_ReferenceCountedObject.h:173
Definition: juce_ReferenceCountedObject.h:65
void resetReferenceCount() noexcept
Definition: juce_ReferenceCountedObject.h:119
void incReferenceCount() noexcept
Definition: juce_ReferenceCountedObject.h:153
ReferencedType * get() const noexcept
Definition: juce_ReferenceCountedObject.h:339
Definition: juce_ReferenceCountedObject.h:227
virtual ~SingleThreadedReferenceCountedObject()
Definition: juce_ReferenceCountedObject.h:189
void decReferenceCount() noexcept
Definition: juce_ReferenceCountedObject.h:82
Definition: juce_ContainerDeletePolicy.h:44
SingleThreadedReferenceCountedObject()
Definition: juce_ReferenceCountedObject.h:186
bool decReferenceCountWithoutDeleting() noexcept
Definition: juce_ReferenceCountedObject.h:94
ReferenceCountedObjectPtr(ReferencedType *refCountedObject) noexcept
Definition: juce_ReferenceCountedObject.h:243
ReferenceCountedObject()
Definition: juce_ReferenceCountedObject.h:107
bool operator!=(const ReferenceCountedObjectPtr< ReferenceCountedObjectClass > &object1, const ReferenceCountedObjectClass *object2) noexcept
Definition: juce_ReferenceCountedObject.h:395
bool operator==(const ReferenceCountedObjectPtr< ReferenceCountedObjectClass > &object1, ReferenceCountedObjectClass *const object2) noexcept
Definition: juce_ReferenceCountedObject.h:374
int getReferenceCount() const noexcept
Definition: juce_ReferenceCountedObject.h:101
int getReferenceCount() const noexcept
Definition: juce_ReferenceCountedObject.h:180
Definition: juce_ReferenceCountedObject.h:144