22 struct TMetricMapInitializer;
36 typedef std::map<std::string,std::pair<MapDefCtorFunctor,MapCtorFromDefFunctor> >
TListRegisteredMaps;
44 #define MAP_DEFINITION_START(_CLASS_NAME_,_LINKAGE_) \
47 struct _LINKAGE_ TMapDefinitionBase : public mrpt::maps::TMetricMapInitializer { \
48 TMapDefinitionBase() : TMetricMapInitializer(CLASS_ID(_CLASS_NAME_)) { } \
50 struct _LINKAGE_ TMapDefinition : public TMapDefinitionBase { \
52 #define MAP_DEFINITION_END(_CLASS_NAME_,_LINKAGE_) \
55 void loadFromConfigFile_map_specific(const mrpt::utils::CConfigFileBase &source, const std::string §ionNamePrefix) MRPT_OVERRIDE; \
56 void dumpToTextStream_map_specific(mrpt::utils::CStream &out) const MRPT_OVERRIDE; \
59 static mrpt::maps::TMetricMapInitializer* MapDefinition(); \
61 static _CLASS_NAME_* CreateFromMapDefinition(const mrpt::maps::TMetricMapInitializer &def); \
62 static mrpt::maps::CMetricMap* internal_CreateFromMapDefinition(const mrpt::maps::TMetricMapInitializer &def); \
64 static const size_t m_private_map_register_id; \
69 #define MAP_DEFINITION_REGISTER(_CLASSNAME_STRINGS, _CLASSNAME_WITH_NS) \
70 const size_t _CLASSNAME_WITH_NS::m_private_map_register_id = mrpt::maps::internal::TMetricMapTypesRegistry::Instance().doRegister(_CLASSNAME_STRINGS,&_CLASSNAME_WITH_NS::MapDefinition,&_CLASSNAME_WITH_NS::internal_CreateFromMapDefinition); \
71 mrpt::maps::TMetricMapInitializer* _CLASSNAME_WITH_NS::MapDefinition() { return new _CLASSNAME_WITH_NS::TMapDefinition; } \
72 _CLASSNAME_WITH_NS* _CLASSNAME_WITH_NS::CreateFromMapDefinition(const mrpt::maps::TMetricMapInitializer &def) \
73 { return dynamic_cast<_CLASSNAME_WITH_NS*>(_CLASSNAME_WITH_NS::internal_CreateFromMapDefinition(def)); }
Declares a virtual base class for all metric maps storage classes.
mrpt::maps::CMetricMap *(* MapCtorFromDefFunctor)(const mrpt::maps::TMetricMapInitializer &)
mrpt::maps::TMetricMapInitializer *(* MapDefCtorFunctor)(void)
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
Virtual base for specifying the kind and parameters of one map (normally, to be inserted into mrpt::m...
Class factory & registry for map classes.
std::map< std::string, std::pair< MapDefCtorFunctor, MapCtorFromDefFunctor > > TListRegisteredMaps
size_t doRegister(const std::string &name, MapDefCtorFunctor func1, MapCtorFromDefFunctor func2)
Return the index of the class in the list (not important, just used as a trick to initialize static m...
TListRegisteredMaps m_registry
const TListRegisteredMaps & getAllRegistered() const
mrpt::maps::CMetricMap * factoryMapObjectFromDefinition(const mrpt::maps::TMetricMapInitializer &mi) const
Return NULL if not found.
mrpt::maps::TMetricMapInitializer * factoryMapDefinition(const std::string &className) const
Return NULL if not found.
TMetricMapTypesRegistry()
static TMetricMapTypesRegistry & Instance()