Main MRPT website > C++ reference
MRPT logo

CObject.h File Reference

#include <mrpt/utils/utils_defs.h>
#include <mrpt/utils/safe_pointers.h>
Include dependency graph for CObject.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  mrpt::utils::CObjectPtr
 A smart pointer to a CObject object. More...
struct  mrpt::utils::TRuntimeClassId
 A structure that holds runtime class type information. More...
struct  mrpt::utils::CLASSINIT
 Auxiliary structure used for CObject-based RTTI. More...
class  mrpt::utils::CObject
 The virtual base class of all MRPT classes with a unified RTTI system. More...

Namespaces

namespace  mrpt
 

This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.


namespace  mrpt::utils
 

Classes for serialization, sockets, ini-file manipulation, streams, list of properties-values, timewatch, extensions to STL.


namespace  std
 

STL namespace.


Defines

#define CLASS_ID(class_name)   static_cast<const mrpt::utils::TRuntimeClassId*>(&class_name::class##class_name)
 Access to runtime class ID for a defined class name.
#define CLASS_ID_NAMESPACE(class_name, namespaceName)   static_cast<const mrpt::utils::TRuntimeClassId*>(&namespaceName::class_name::class##class_name)
 Access to runtime class ID for a defined class name.
#define CLASS_ID_TEMPLATE(class_name, T)   static_cast<const mrpt::utils::TRuntimeClassId*>(& template <class T> class_name<T>::class##class_name)
 Access to runtime class ID for a defined template class name.
#define IS_CLASS(ptrObj, class_name)   ((ptrObj)->GetRuntimeClass()==CLASS_ID(class_name))
 Evaluates to true if the given pointer to an object (derived from mrpt::utils::CSerializable) is of the given class.
#define IS_DERIVED(ptrObj, class_name)   ((ptrObj)->GetRuntimeClass()->derivedFrom(CLASS_ID(class_name)))
 Evaluates to true if the given pointer to an object (derived from mrpt::utils::CSerializable) is an instance of the given class or any of its derived classes.
#define DEFINE_MRPT_OBJECT(class_name)
 This declaration must be inserted in all CObject classes definition, within the class declaration.
#define DEFINE_MRPT_OBJECT_PRE_CUSTOM_BASE_LINKAGE(class_name, base_name, _LINKAGE_)   DEFINE_MRPT_OBJECT_PRE_CUSTOM_BASE_LINKAGE2(class_name, base_name, _LINKAGE_ class_name)
#define DEFINE_MRPT_OBJECT_PRE_CUSTOM_BASE_NO_LINKAGE(class_name, base_name)   DEFINE_MRPT_OBJECT_PRE_CUSTOM_BASE_LINKAGE2(class_name, base_name, class_name)
#define DEFINE_MRPT_OBJECT_PRE_CUSTOM_BASE_LINKAGE2(class_name, base_name, class_name_LINKAGE_)
 This declaration must be inserted in all CObject classes definition, before the class declaration.
#define DEFINE_MRPT_OBJECT_PRE_CUSTOM_LINKAGE(class_name, _LINKAGE_)   DEFINE_MRPT_OBJECT_PRE_CUSTOM_LINKAGE2(class_name, _LINKAGE_ class_name)
#define DEFINE_MRPT_OBJECT_PRE_NO_LINKAGE(class_name)   DEFINE_MRPT_OBJECT_PRE_CUSTOM_LINKAGE2(class_name, class_name)
#define DEFINE_MRPT_OBJECT_PRE_CUSTOM_LINKAGE2(class_name, class_name_LINKAGE_)
 This declaration must be inserted in all CObject classes definition, before the class declaration.
#define DEFINE_MRPT_OBJECT_PRE_CUSTOM_BASE(class_name, base_name)   DEFINE_MRPT_OBJECT_PRE_CUSTOM_BASE_LINKAGE(class_name, base_name, BASE_IMPEXP )
 This declaration must be inserted in all CObject classes definition, before the class declaration.
#define DEFINE_MRPT_OBJECT_PRE(class_name)   DEFINE_MRPT_OBJECT_PRE_CUSTOM_LINKAGE(class_name, BASE_IMPEXP )
 This declaration must be inserted in all CObject classes definition, before the class declaration.
#define IMPLEMENTS_MRPT_OBJECT(class_name, base, NameSpace)
 This must be inserted in all CObject classes implementation files.
#define DEFINE_VIRTUAL_MRPT_OBJECT(class_name)
 This declaration must be inserted in virtual CSerializable classes definition:.
#define IMPLEMENTS_VIRTUAL_MRPT_OBJECT(class_name, base_class_name, NameSpace)
 This must be inserted as implementation of some required members for virtual CSerializable classes:.

Typedefs

typedef safe_ptr< TRuntimeClassId > mrpt::utils::TRuntimeClassIdPtr
 A wrapper class for a "TRuntimeClassId *", well-defined with respect to copy operators and constructors.

Functions

void BASE_IMPEXP mrpt::utils::registerClass (const mrpt::utils::TRuntimeClassId *pNewClass)
 Register a class into the MRPT internal list of "CSerializable" descendents.
void BASE_IMPEXP mrpt::utils::registerClassCustomName (const char *customName, const TRuntimeClassId *pNewClass)
 Mostly for internal use within mrpt sources, to handle exceptional cases with multiple serialization names for backward compatibility (CMultiMetricMaps, CImage,.
std::vector< const
mrpt::utils::TRuntimeClassId * >
BASE_IMPEXP 
mrpt::utils::getAllRegisteredClasses ()
 Returns a list with all the classes registered in the system through mrpt::utils::registerClass.
const TRuntimeClassId BASE_IMPEXP * mrpt::utils::findRegisteredClass (const std::string &className)
 Return info about a given class by its name, or NULL if the class is not registered.
template<typename T , typename C >
bool std::operator== (const stlplus::smart_ptr_base< T, C > &a, const stlplus::smart_ptr_base< T, C > &b)
 This operator enables comparing two smart pointers with "==" to test whether they point to the same object.
template<typename T , typename C >
bool std::operator!= (const stlplus::smart_ptr_base< T, C > &a, const stlplus::smart_ptr_base< T, C > &b)
 This operator enables comparing two smart pointers with "!=" to test whether they don't point to the same object.

Variables

class BASE_IMPEXP mrpt::utils::CObject

Define Documentation

#define CLASS_ID ( class_name   )     static_cast<const mrpt::utils::TRuntimeClassId*>(&class_name::class##class_name)

Access to runtime class ID for a defined class name.

Definition at line 98 of file CObject.h.

Referenced by mrpt::utils::CObject::GetRuntimeClass(), mrpt::slam::CRawlog::const_iterator::getType(), and mrpt::slam::CRawlog::iterator::getType().

#define CLASS_ID_NAMESPACE ( class_name,
namespaceName   )     static_cast<const mrpt::utils::TRuntimeClassId*>(&namespaceName::class_name::class##class_name)

Access to runtime class ID for a defined class name.

Definition at line 102 of file CObject.h.

Referenced by mrpt::opengl::CSetOfObjects::getByClass(), and mrpt::opengl::COpenGLViewport::getByClass().

#define CLASS_ID_TEMPLATE ( class_name,
 )     static_cast<const mrpt::utils::TRuntimeClassId*>(& template <class T> class_name<T>::class##class_name)

Access to runtime class ID for a defined template class name.

Definition at line 106 of file CObject.h.

#define DEFINE_MRPT_OBJECT ( class_name   ) 
Value:
protected: \
                        static  const mrpt::utils::TRuntimeClassId* _GetBaseClass(); \
                        static mrpt::utils::CLASSINIT _init_##class_name;\
                public: \
                        typedef class_name##Ptr SmartPtr; \
                        static  mrpt::utils::TRuntimeClassId  class##class_name; \
                        static  const mrpt::utils::TRuntimeClassId *classinfo; \
                        virtual const mrpt::utils::TRuntimeClassId* GetRuntimeClass() const; \
                        static  mrpt::utils::CObject* CreateObject(); \
                        static class_name##Ptr Create(); \
                        virtual mrpt::utils::CObject *duplicate() const;

This declaration must be inserted in all CObject classes definition, within the class declaration.

Definition at line 157 of file CObject.h.

#define DEFINE_MRPT_OBJECT_PRE ( class_name   )     DEFINE_MRPT_OBJECT_PRE_CUSTOM_LINKAGE(class_name, BASE_IMPEXP )

This declaration must be inserted in all CObject classes definition, before the class declaration.

Definition at line 231 of file CObject.h.

#define DEFINE_MRPT_OBJECT_PRE_CUSTOM_BASE ( class_name,
base_name   )     DEFINE_MRPT_OBJECT_PRE_CUSTOM_BASE_LINKAGE(class_name, base_name, BASE_IMPEXP )

This declaration must be inserted in all CObject classes definition, before the class declaration.

Definition at line 226 of file CObject.h.

#define DEFINE_MRPT_OBJECT_PRE_CUSTOM_BASE_LINKAGE ( class_name,
base_name,
_LINKAGE_   )     DEFINE_MRPT_OBJECT_PRE_CUSTOM_BASE_LINKAGE2(class_name, base_name, _LINKAGE_ class_name)

Definition at line 171 of file CObject.h.

#define DEFINE_MRPT_OBJECT_PRE_CUSTOM_BASE_LINKAGE2 ( class_name,
base_name,
class_name_LINKAGE_   ) 
Value:
class class_name_LINKAGE_; \
                        struct class_name_LINKAGE_##Ptr : public base_name##Ptr \
                        { \
                                inline class_name##Ptr() : base_name##Ptr(static_cast<base_name*>(NULL)) { } \
                                inline explicit class_name##Ptr(class_name* p) : base_name##Ptr( reinterpret_cast<base_name*>(p) ) { } \
                                inline explicit class_name##Ptr(const base_name##Ptr & p) : base_name##Ptr(p) { ASSERTMSG_( p->GetRuntimeClass()->derivedFrom(#class_name),::mrpt::format("Wrong typecasting of smart pointers: %s -> %s",p->GetRuntimeClass()->className, #class_name) )  } \
                                inline explicit class_name##Ptr(const mrpt::utils::CObjectPtr & p) : base_name##Ptr(p) { ASSERTMSG_( p->GetRuntimeClass()->derivedFrom(#class_name),::mrpt::format("Wrong typecasting of smart pointers: %s -> %s",p->GetRuntimeClass()->className, #class_name) )  } \
                                inline void setFromPointerDoNotFreeAtDtor(const class_name* p) { this->set(const_cast<mrpt::utils::CObject*>(reinterpret_cast<const mrpt::utils::CObject*>(p))); m_holder->increment(); } \
                                inline class_name * pointer() { return reinterpret_cast<class_name*>(base_name##Ptr::pointer()); } \
                                inline const class_name * pointer() const { return reinterpret_cast<const class_name*>(base_name##Ptr::pointer()); } \
                                inline class_name* operator ->(void) { return reinterpret_cast<class_name*>( base_name##Ptr::operator ->() ); } \
                                inline const class_name* operator ->(void) const { return reinterpret_cast<const class_name*>( base_name##Ptr::operator ->() ); } \
                                inline class_name& operator *(void) { return *reinterpret_cast<class_name*>( base_name##Ptr::operator ->() ); } \
                                inline const class_name& operator *(void) const { return *reinterpret_cast<const class_name*>( base_name##Ptr::operator ->() ); } \
                        };

This declaration must be inserted in all CObject classes definition, before the class declaration.

Definition at line 180 of file CObject.h.

#define DEFINE_MRPT_OBJECT_PRE_CUSTOM_BASE_NO_LINKAGE ( class_name,
base_name   )     DEFINE_MRPT_OBJECT_PRE_CUSTOM_BASE_LINKAGE2(class_name, base_name, class_name)

Definition at line 175 of file CObject.h.

#define DEFINE_MRPT_OBJECT_PRE_CUSTOM_LINKAGE ( class_name,
_LINKAGE_   )     DEFINE_MRPT_OBJECT_PRE_CUSTOM_LINKAGE2(class_name, _LINKAGE_ class_name)

Definition at line 199 of file CObject.h.

#define DEFINE_MRPT_OBJECT_PRE_CUSTOM_LINKAGE2 ( class_name,
class_name_LINKAGE_   ) 
Value:
class class_name_LINKAGE_; \
                        struct class_name_LINKAGE_##Ptr : public mrpt::utils::CObjectPtr \
                        { \
                                inline class_name##Ptr() : mrpt::utils::CObjectPtr(static_cast<mrpt::utils::CObject*>(NULL)) { } \
                                inline explicit class_name##Ptr(class_name* p) : mrpt::utils::CObjectPtr( reinterpret_cast<mrpt::utils::CObject*>(p) ) { } \
                                inline explicit class_name##Ptr(const mrpt::utils::CObjectPtr & p) : mrpt::utils::CObjectPtr(p) { ASSERTMSG_( p->GetRuntimeClass()->derivedFrom(#class_name),::mrpt::format("Wrong typecasting of smart pointers: %s -> %s",p->GetRuntimeClass()->className, #class_name) )  } \
                                inline void setFromPointerDoNotFreeAtDtor(const class_name* p) { this->set(const_cast<mrpt::utils::CObject*>(reinterpret_cast<const mrpt::utils::CObject*>(p))); m_holder->increment(); } \
                                inline class_name * pointer() { return reinterpret_cast<class_name*>(mrpt::utils::CObjectPtr::pointer()); } \
                                inline const class_name * pointer() const { return reinterpret_cast<const class_name*>(mrpt::utils::CObjectPtr::pointer()); } \
                                inline class_name* operator ->(void) { return reinterpret_cast<class_name*>( mrpt::utils::CObjectPtr::operator ->() ); } \
                                inline const class_name* operator ->(void) const { return reinterpret_cast<const class_name*>( mrpt::utils::CObjectPtr::operator ->() ); } \
                                inline class_name& operator *(void) { return *reinterpret_cast<class_name*>( mrpt::utils::CObjectPtr::operator ->() ); } \
                                inline const class_name& operator *(void) const { return *reinterpret_cast<const class_name*>( mrpt::utils::CObjectPtr::operator ->() ); } \
                        };

This declaration must be inserted in all CObject classes definition, before the class declaration.

Definition at line 208 of file CObject.h.

#define DEFINE_MRPT_OBJECT_PRE_NO_LINKAGE ( class_name   )     DEFINE_MRPT_OBJECT_PRE_CUSTOM_LINKAGE2(class_name, class_name)

Definition at line 203 of file CObject.h.

#define DEFINE_VIRTUAL_MRPT_OBJECT ( class_name   ) 
Value:
protected: \
                        static const mrpt::utils::TRuntimeClassId* _GetBaseClass(); \
                public: \
                        static const mrpt::utils::TRuntimeClassId class##class_name; \
                        virtual const mrpt::utils::TRuntimeClassId* GetRuntimeClass() const; \
                        friend class mrpt::utils::CStream; \

This declaration must be inserted in virtual CSerializable classes definition:.

Definition at line 255 of file CObject.h.

#define IMPLEMENTS_MRPT_OBJECT ( class_name,
base,
NameSpace   ) 
Value:
mrpt::utils::CObject* NameSpace::class_name::CreateObject() \
                                { return static_cast<mrpt::utils::CObject*>( new NameSpace::class_name ); } \
                        NameSpace::class_name##Ptr NameSpace::class_name::Create() \
                                { return NameSpace::class_name##Ptr( new NameSpace::class_name ); } \
                        const mrpt::utils::TRuntimeClassId* NameSpace::class_name::_GetBaseClass() \
                                { return CLASS_ID(base); } \
                        mrpt::utils::TRuntimeClassId NameSpace::class_name::class##class_name = { \
                                #class_name, NameSpace::class_name::CreateObject, &class_name::_GetBaseClass }; \
                        const mrpt::utils::TRuntimeClassId *NameSpace::class_name::classinfo = & NameSpace::class_name::class##class_name; \
                        const mrpt::utils::TRuntimeClassId* NameSpace::class_name::GetRuntimeClass() const \
                        { return CLASS_ID_NAMESPACE(class_name,NameSpace); } \
                        mrpt::utils::CLASSINIT NameSpace::class_name::_init_##class_name(CLASS_ID(base)); \
                        mrpt::utils::CObject * NameSpace::class_name::duplicate() const \
                        { return static_cast<mrpt::utils::CObject*>( new NameSpace::class_name(*this) ); }

This must be inserted in all CObject classes implementation files.

Definition at line 236 of file CObject.h.

#define IMPLEMENTS_VIRTUAL_MRPT_OBJECT ( class_name,
base_class_name,
NameSpace   ) 
Value:
const mrpt::utils::TRuntimeClassId* class_name::_GetBaseClass() \
                                { return CLASS_ID(base_class_name); } \
                        const mrpt::utils::TRuntimeClassId class_name::class##class_name = { \
                                #class_name, NULL, &class_name::_GetBaseClass }; \
                        const mrpt::utils::TRuntimeClassId* class_name::GetRuntimeClass() const \
                                { return CLASS_ID(class_name); }

This must be inserted as implementation of some required members for virtual CSerializable classes:.

Definition at line 266 of file CObject.h.

#define IS_CLASS ( ptrObj,
class_name   )     ((ptrObj)->GetRuntimeClass()==CLASS_ID(class_name))

Evaluates to true if the given pointer to an object (derived from mrpt::utils::CSerializable) is of the given class.

Definition at line 109 of file CObject.h.

#define IS_DERIVED ( ptrObj,
class_name   )     ((ptrObj)->GetRuntimeClass()->derivedFrom(CLASS_ID(class_name)))

Evaluates to true if the given pointer to an object (derived from mrpt::utils::CSerializable) is an instance of the given class or any of its derived classes.

Definition at line 112 of file CObject.h.

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines



Page generated by Doxygen 1.6.1 for MRPT 0.9.0 SVN: at Mon Jun 7 06:47:58 UTC 2010