Main MRPT website > C++ reference
MRPT logo
Classes | Namespaces | Defines | Functions

CObject.h File Reference

#include <mrpt/utils/utils_defs.h>
#include <mrpt/utils/safe_pointers.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 IMPLEMENTS_VIRTUAL_MRPT_OBJECT(class_name, base_class_name, NameSpace)
 This must be inserted as implementation of some required members for virtual CSerializable classes:

Functions

template<typename T , typename C , typename COUNTER >
bool std::operator== (const stlplus::smart_ptr_base< T, C, COUNTER > &a, const stlplus::smart_ptr_base< T, C, COUNTER > &b)
 This operator enables comparing two smart pointers with "==" to test whether they point to the same object.
template<typename T , typename C , typename COUNTER >
bool std::operator!= (const stlplus::smart_ptr_base< T, C, COUNTER > &a, const stlplus::smart_ptr_base< T, C, COUNTER > &b)
 This operator enables comparing two smart pointers with "!=" to test whether they don't point to the same object.

RTTI classes and functions

#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:
typedef safe_ptr< TRuntimeClassId > mrpt::utils::TRuntimeClassIdPtr
 A wrapper class for a "TRuntimeClassId *", well-defined with respect to copy operators and constructors.
class BASE_IMPEXP mrpt::utils::CObject
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.

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 101 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 105 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 109 of file CObject.h.

#define DEFINE_MRPT_OBJECT (   class_name)
Value:
/*! @name RTTI stuff  */ \
                        /*! @{  */ \
                protected: \
                        static  const mrpt::utils::TRuntimeClassId* _GetBaseClass(); \
                        static mrpt::utils::CLASSINIT _init_##class_name;\
                public: \
                        /*! A typedef for the associated smart pointer */ \
                        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; \
                        /*! @} */ \
                public: \
                        EIGEN_MAKE_ALIGNED_OPERATOR_NEW \

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

Definition at line 160 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 247 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 242 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 181 of file CObject.h.

#define DEFINE_MRPT_OBJECT_PRE_CUSTOM_BASE_LINKAGE2 (   class_name,
  base_name,
  class_name_LINKAGE_ 
)
Value:
class class_name_LINKAGE_; \
                        /*! The smart pointer type for the associated class */ \
                        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(); } \
                                /*! Return the internal plain C++ pointer */ \
                                inline class_name * pointer() { return reinterpret_cast<class_name*>(base_name##Ptr::pointer()); } \
                                /*! Return the internal plain C++ pointer (const) */ \
                                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 190 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 185 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 212 of file CObject.h.

#define DEFINE_MRPT_OBJECT_PRE_CUSTOM_LINKAGE2 (   class_name,
  class_name_LINKAGE_ 
)
Value:
class class_name_LINKAGE_; \
                        /*! The smart pointer type for the associated class */ \
                        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(); } \
                                /*! Return the internal plain C++ pointer */ \
                                inline class_name * pointer() { return reinterpret_cast<class_name*>(mrpt::utils::CObjectPtr::pointer()); } \
                                /*! Return the internal plain C++ pointer (const) */ \
                                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 221 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 216 of file CObject.h.

#define DEFINE_VIRTUAL_MRPT_OBJECT (   class_name)
Value:
/*! @name RTTI stuff  */ \
                /*! @{  */ \
                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 271 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 252 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 286 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 112 of file CObject.h.

Referenced by mrpt::opengl::COpenGLScene::internal_visitAllObjects().

#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 115 of file CObject.h.




Page generated by Doxygen 1.7.3 for MRPT 0.9.4 SVN: at Sat Mar 26 06:16:28 UTC 2011