#include <mrpt/utils/utils_defs.h>
#include <mrpt/utils/safe_pointers.h>
#include <mrpt/utils/safe_pointers.h>
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 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, | |
T | |||
) | static_cast<const mrpt::utils::TRuntimeClassId*>(& template <class T> class_name<T>::class##class_name) |
#define DEFINE_MRPT_OBJECT | ( | class_name | ) |
/*! @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.
#define DEFINE_MRPT_OBJECT_PRE | ( | class_name | ) | DEFINE_MRPT_OBJECT_PRE_CUSTOM_LINKAGE(class_name, BASE_IMPEXP ) |
#define DEFINE_MRPT_OBJECT_PRE_CUSTOM_BASE | ( | class_name, | |
base_name | |||
) | DEFINE_MRPT_OBJECT_PRE_CUSTOM_BASE_LINKAGE(class_name, base_name, BASE_IMPEXP ) |
#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_LINKAGE2 | ( | class_name, | |
base_name, | |||
class_name_LINKAGE_ | |||
) |
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.
#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_LINKAGE | ( | class_name, | |
_LINKAGE_ | |||
) | DEFINE_MRPT_OBJECT_PRE_CUSTOM_LINKAGE2(class_name, _LINKAGE_ class_name) |
#define DEFINE_MRPT_OBJECT_PRE_CUSTOM_LINKAGE2 | ( | class_name, | |
class_name_LINKAGE_ | |||
) |
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.
#define DEFINE_MRPT_OBJECT_PRE_NO_LINKAGE | ( | class_name | ) | DEFINE_MRPT_OBJECT_PRE_CUSTOM_LINKAGE2(class_name, class_name) |
#define DEFINE_VIRTUAL_MRPT_OBJECT | ( | class_name | ) |
/*! @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:
#define IMPLEMENTS_MRPT_OBJECT | ( | class_name, | |
base, | |||
NameSpace | |||
) |
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.
#define IMPLEMENTS_VIRTUAL_MRPT_OBJECT | ( | class_name, | |
base_class_name, | |||
NameSpace | |||
) |
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:
#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.
Page generated by Doxygen 1.7.3 for MRPT 0.9.4 SVN: at Sat Mar 26 06:16:28 UTC 2011 |