12 #ifndef __LIDAR_OBJECT_H__
13 #define __LIDAR_OBJECT_H__
17 LT_BEGIN_LIDAR_NAMESPACE
45 #define ABSTRACT_OBJECT(classname) \
46 DISABLE_COPY(classname); \
49 virtual ~classname(void)
55 #define CONCRETE_OBJECT(classname) \
56 ABSTRACT_OBJECT(classname); \
58 static classname *create(void)
60 #define IMPLEMENT_OBJECT_CREATE(classname) \
61 classname * classname::create(void) { return new classname; }
78 static void *
operator new(
size_t size);
80 static void operator delete(
void *ptr);
83 mutable AtomicInt m_refCount;
90 template<
typename OBJECT>
static inline OBJECT *
RETAIN(OBJECT *obj)
101 template<
typename OBJECT>
static inline void RELEASE(OBJECT *&obj)
157 template<
typename TYPE>
165 Scoped(
void) : m_object(TYPE::create()) {}
175 Scoped(TYPE *
object) : m_object(object) {}
184 if(
object != m_object)
187 m_object =
RETAIN(
object);
206 if(m_object !=
object.m_object)
209 m_object =
RETAIN(
object.m_object);
220 operator TYPE *&(void) {
return m_object; }
227 LT_END_LIDAR_NAMESPACE
228 #endif // __LIDAR_OBJECT_H__
~Scoped(void)
Releases the object when Scoped<> goes out of scope.
void retain(void) const
Increment the reference count by one.
TYPE * operator->(void)
Make Scoped behave like a pointer to TYPE.
Scoped(const Scoped &object)
Copy constructor.
Scoped(TYPE *object)
Manage an existing object.
Object is the base class for implementing reference counting.
static OBJECT * RETAIN(OBJECT *obj)
Helper function for calling Object::retain().
Scoped is a wrapper class around Object that gives it block scoping.
static void RELEASE(OBJECT *&obj)
Helper function for calling Object::release().
TYPE & operator*(void)
Make Scoped behave like a pointer to TYPE.
Scoped(void)
Create an object on the heap.
Scoped & operator=(TYPE *object)
Assignment operator.
Scoped & operator=(const Scoped &object)
Assignment operator.
void release(void) const
Decrement the reference count by one.
#define ABSTRACT_OBJECT(classname)
Macros for defining boilerplate parts of derived Object classes.