32 #ifndef _CommonLibs_Util_ObjectWithID_HPP_
33 #define _CommonLibs_Util_ObjectWithID_HPP_
35 #include <type_traits>
40 # define GRANOO_OBJECT_WITH_ID_CLASS(CLASS) \
42 friend class GranOO3::Core::ObjectWithID<CLASS>; \
44 static CLASS & get(const std::string& ID) { \
45 return GranOO3::Core::ObjectWithID<CLASS>::get(ID); \
47 static const CLASS & get_const(const std::string& ID) { \
48 return GranOO3::Core::ObjectWithID<CLASS>::get(ID); \
50 static bool exist(const std::string& ID) { \
51 return GranOO3::Core::ObjectWithID<CLASS>::exist(ID); \
65 static T&
get(
const std::string& ID);
66 static bool exist(
const std::string& ID);
74 const std::string&
get_uID()
const;
78 template<
class Archive>
void save(Archive&,
const unsigned int )
const;
79 template<
class Archive>
void load(Archive&,
const unsigned int);
84 static std::map<const std::string, T*>
_all;
91 template<
class T> std::map<const std::string, T*>
ObjectWithID<T>::_all = std::map<const std::string, T*>()
97 AssertMsg(exist(ID),
"The " + T::class_ID() +
" object with '" + ID +
"' does not exist");
104 return (_all.count(ID) == 1);
115 AssertMsg(
_all.count(
_ID) == 0,
"The " + T::class_ID() +
" object with '" + ID +
"' already exists");
116 _all[
_ID] =
static_cast<T*
>(
this);
122 auto it = _all.find(_ID);
134 template<
class Archive>
void
140 template<
class Archive>
void
144 _ID = m.get_SerializationPrefix() + _ID + m.get_SerializationSuffix();
146 _all[_ID] =
static_cast<T*
>(
this);
#define InternAssert(condition)
Definition: Macro.hpp:81
#define AssertMsg(condition, message)
Definition: Macro.hpp:67
Definition: ObjectWithID.hpp:63
static bool exist(const std::string &ID)
Definition: ObjectWithID.hpp:103
virtual ~ObjectWithID()
Definition: ObjectWithID.hpp:120
static T & get(const std::string &ID)
Definition: ObjectWithID.hpp:96
ObjectWithID()
Definition: ObjectWithID.hpp:108
std::string _ID
Definition: ObjectWithID.hpp:87
void save(Archive &, const unsigned int) const
Definition: ObjectWithID.hpp:135
friend class boost::serialization::access
Definition: ObjectWithID.hpp:77
static std::map< const std::string, T * > _all
Definition: ObjectWithID.hpp:84
void load(Archive &, const unsigned int)
Definition: ObjectWithID.hpp:141
const std::string & get_uID() const
Definition: ObjectWithID.hpp:128
BOOST_SERIALIZATION_SPLIT_MEMBER()
static SetOfManager & get()
Definition: Singleton.hpp:127
Definition: Common.hpp:198