15#define OSG_REFERENCED 1
19#include <OpenThreads/ScopedLock>
20#include <OpenThreads/Mutex>
21#include <OpenThreads/Atomic>
23#if !defined(_OPENTHREADS_ATOMIC_USE_MUTEX)
24# define _OSG_REFERENCED_USE_ATOMIC_OPERATIONS
36template <
typename T, T M()>
62#if defined(_OSG_REFERENCED_USE_ATOMIC_OPERATIONS)
65 bool getThreadSafeRefUnref()
const {
return _refMutex!=0; }
69#if defined(_OSG_REFERENCED_USE_ATOMIC_OPERATIONS)
72 OpenThreads::Mutex* getRefMutex()
const {
return _refMutex; }
80 inline int ref()
const;
86 inline int unref()
const;
103 #if defined(_OSG_REFERENCED_USE_ATOMIC_OPERATIONS)
147#if defined(_OSG_REFERENCED_USE_ATOMIC_OPERATIONS)
153 mutable OpenThreads::Mutex* _refMutex;
163#if defined(_OSG_REFERENCED_USE_ATOMIC_OPERATIONS)
168 OpenThreads::ScopedLock<OpenThreads::Mutex> lock(*_refMutex);
181#if defined(_OSG_REFERENCED_USE_ATOMIC_OPERATIONS)
183 bool needDelete = (newRef == 0);
185 bool needDelete =
false;
188 OpenThreads::ScopedLock<OpenThreads::Mutex> lock(*_refMutex);
190 needDelete = newRef==0;
195 needDelete = newRef==0;
The core osg library provides the basic scene graph classes such as Nodes, State and Drawables,...
Definition AlphaFunc:19
void resizeGLObjectBuffers(osg::Object *object, unsigned int maxSize)
Definition Object:396
void intrusive_ptr_add_ref(Referenced *p)
Definition Referenced:208
void releaseGLObjects(osg::Object *object, osg::State *state=0)
Definition Object:400
void intrusive_ptr_release(Referenced *p)
Definition Referenced:209
Observer base class for tracking when objects are unreferenced (their reference count goes to 0) and ...
Definition Observer:25
Class used by osg::Referenced to track the observers associated with it.
Definition Observer:39
depends_on()
Definition Referenced:39
Base class for providing reference counted objects.
Definition Referenced:44
Referenced(bool threadSafeRefUnref)
Deprecated, Referenced is now always uses thread safe ref/unref, use default Referenced() constructor...
int unref_nodelete() const
Decrement the reference count by one, indicating that a pointer to this object is no longer referenci...
void addObserver(Observer *observer) const
Add a Observer that is observing this object, notify the Observer when this object gets deleted.
void signalObserversAndDelete(bool signalDelete, bool doDelete) const
OpenThreads::AtomicPtr _observerSet
Definition Referenced:148
Referenced(const Referenced &)
int unref() const
Decrement the reference count by one, indicating that a pointer to this object is no longer referenci...
Definition Referenced:178
static DeleteHandler * getDeleteHandler()
Get a DeleteHandler.
void deleteUsingDeleteHandler() const
ObserverSet * getObserverSet() const
Get the ObserverSet if one is attached, otherwise return NULL.
Definition Referenced:101
bool getThreadSafeRefUnref() const
Get whether a mutex is used to ensure ref() and unref() are thread safe.
Definition Referenced:63
virtual void setThreadSafeRefUnref(bool)
Deprecated, Referenced is always theadsafe so there method now has no effect and does not need to be ...
Definition Referenced:59
int referenceCount() const
Return the number of pointers currently referencing this object.
Definition Referenced:97
OpenThreads::Atomic _refCount
Definition Referenced:150
OpenThreads::Mutex * getRefMutex() const
Get the mutex used to ensure thread safety of ref()/unref().
Definition Referenced:70
void removeObserver(Observer *observer) const
Remove Observer that is observing this object.
static OpenThreads::Mutex * getGlobalReferencedMutex()
Get the optional global Referenced mutex, this can be shared between all osg::Referenced.
int ref() const
Increment the reference count by one, indicating that this object has another pointer which is refere...
Definition Referenced:161
friend class DeleteHandler
Definition Referenced:129
static void setDeleteHandler(DeleteHandler *handler)
Set a DeleteHandler to which deletion of all referenced counted objects will be delegated.
ObserverSet * getOrCreateObserverSet() const
Get the ObserverSet if one is attached, otherwise create an ObserverSet, attach it,...
Encapsulates the current applied OpenGL modes, attributes and vertex arrays settings,...
Definition State:80
#define OSG_EXPORT
Definition Export:39