Go to the documentation of this file. 1 #ifndef _OME_REFCOUNT_H
2 #define _OME_REFCOUNT_H "$Id: OMErefCount.h 406 2020-07-12 05:07:33Z geoff $"
16 # ifdef OME_USE_NAMESPACES
23 #pragma GCC diagnostic push
24 #pragma GCC diagnostic ignored "-Wsuggest-final-types"
45 #pragma GCC diagnostic push
46 #pragma GCC diagnostic ignored "-Wsuggest-final-methods"
48 #pragma GCC diagnostic pop
50 void addReadOnlyReference();
52 int_fast32_t dropReference();
54 #pragma GCC diagnostic push
55 #pragma GCC diagnostic ignored "-Wsuggest-final-methods"
57 #pragma GCC diagnostic pop
67 #pragma GCC diagnostic pop
87 data->addReadOnlyReference();
94 data->dropReference();
107 existingData->addReadOnlyReference();
114 org.
data->addReadOnlyReference();
129 if (data !=
nullptr) {
130 C *newData =
reinterpret_cast<C *
>(data->getUniqueReference());
131 if (newData != data) {
143 # ifndef DONT_INCLUDE_VALIDITY_CHECKS
148 return (data->totalReferences());
153 # ifdef OME_USE_NAMESPACES
OME reference count implementation.
#define OME_ATOMIC_INCREMENT(var)
Definition: OMErefCount.cpp:47
OMEreferenceToData(C *existingData) NONNULL_CLASS_PARAMETERS(2)
Definition: OMErefCount.h:105
void OMEstartCriticalSection(eOMEcriticalSectionLabel regionID)
Definition: OMEmutex.cpp:217
void addReadOnlyReference() OME_ALWAYS_INLINE
Definition: OMErefCount.h:84
#define _OME_REFCOUNT_H
Definition: tmp.o.cpp:974
C * data
Definition: OMErefCount.h:82
OMEreferenceCount * getUniqueReference()
Definition: OMErefCount.cpp:155
void unlockMe()
Definition: OMErefCount.cpp:132
uint32_t OMEgetMiscellaneousMutex()
Definition: OMEmutex.cpp:69
#define NONNULL_CLASS_PARAMETERS(...)
Mark a function as never returning a null pointer.
Definition: compiler_hints.h:337
#define OME_NAMESPACE
Definition: OMEmanifests.h:75
Templated type-specific reference to a reference-counted object.
Definition: OMErefCount.h:79
Base class for reference-counted data.
Definition: OMErefCount.h:31
OMEreferenceCount()
Definition: OMErefCount.cpp:116
#define OME_ATOMIC_DECREMENT(result, var)
Definition: OMErefCount.cpp:53
int_fast32_t totalReferences() const OME_ALWAYS_INLINE
Get current reference total.
Definition: OMErefCount.h:141
virtual ~OMEreferenceCount()
Definition: OMErefCount.h:47
const char srcID[]
Definition: catSym.c:17
int32_t references
Definition: OMErefCount.h:34
#define OME_EXPECT_TRUE(expr)
Annotation macro for conditional expression expected to be true.
Definition: compiler_hints.h:541
#define __inline
Definition: tmp.o.cpp:3029
int32_t mutexID
Definition: OMErefCount.h:35
OMEreferenceToData(const OMEreferenceToData< C > &org)
Definition: OMErefCount.h:112
const char srcID[] OME_USED
Definition: tick_time.cpp:24
virtual OMEreferenceCount * deepCopy() const
Definition: OMErefCount.h:56
void addReadOnlyReference()
Definition: OMErefCount.cpp:139
int_fast32_t totalReferences() const OME_ALWAYS_INLINE
Definition: OMErefCount.h:61
OME constants and typedefs.
void OMEendCriticalSection(eOMEcriticalSectionLabel regionID)
Definition: OMEmutex.cpp:236
#define OME_EXPECT_FALSE(expr)
Annotation macro for conditional expression expected to be false.
Definition: compiler_hints.h:540
#define OME_ALWAYS_INLINE
Tell the compiler to alway inline a function, regardless of optimization level.
Definition: compiler_hints.h:364
void dropReference(C *newData=nullptr) OME_ALWAYS_INLINE
Definition: OMErefCount.h:91
void lockMe()
Definition: OMErefCount.cpp:125
OME mutex and condition variable implementation.
void getUniqueReference()
Force unique reference to the data, which will trigger duplication if necessary (copy-on-write).
Definition: OMErefCount.h:127
#define OME_DLL_EXPORT
Definition: compiler_hints.h:464
int_fast32_t dropReference()
Definition: OMErefCount.cpp:144
OMEreferenceToData()
Definition: OMErefCount.h:100
virtual ~OMEreferenceToData()
Definition: OMErefCount.h:118