24 #include "3rdparty/archives/portable_iarchive.hpp" 25 #include "3rdparty/archives/portable_oarchive.hpp" 26 #include "MCBinaryData.hpp" 28 #include "MCTypes.hpp" 30 #include <boost/archive/binary_iarchive.hpp> 31 #include <boost/archive/binary_oarchive.hpp> 32 #include <boost/serialization/access.hpp> 33 #include <boost/serialization/list.hpp> 34 #include <boost/serialization/map.hpp> 35 #include <boost/serialization/split_member.hpp> 36 #include <boost/serialization/vector.hpp> 37 #include <boost/scoped_ptr.hpp> 60 virtual void LoadFromArchive(boost::archive::binary_iarchive& archive);
61 virtual void SaveToArchive(boost::archive::binary_oarchive& archive)
const;
62 virtual void LoadFromArchive(eos::portable_iarchive& archive);
63 virtual void SaveToArchive(eos::portable_oarchive& archive)
const;
64 virtual void DeleteData();
74 typedef std::list<MCDataItemBase*> DataItemBasePtrList;
86 InitWithCloning(data, data_name);
93 InitWithCloning(data, data_name);
96 DataPtr = (
void*)&data;
104 void InitWithCloning(
const T& data,
const std::string& data_name)
109 DataPtr = (
void*)NewData;
110 DataName = data_name;
119 return *
reinterpret_cast<T*
>(DataPtr);
122 virtual void DeleteData()
override 124 delete reinterpret_cast<T*
>(DataPtr);
128 virtual void LoadFromArchive(eos::portable_iarchive& archive)
override 131 archive & *
reinterpret_cast<T*
>(DataPtr);
134 virtual void SaveToArchive(eos::portable_oarchive& archive)
const override 137 archive & *
reinterpret_cast<T*
>(DataPtr);
140 virtual void LoadFromArchive(boost::archive::binary_iarchive& archive)
override 143 archive & *
reinterpret_cast<T*
>(DataPtr);
146 virtual void SaveToArchive(boost::archive::binary_oarchive& archive)
const override 149 archive & *
reinterpret_cast<T*
>(DataPtr);
159 friend class boost::serialization::access;
186 bool IsPortable()
const;
202 std::string GetName()
const;
244 MC::StringList GetDataNames()
const;
276 const MC::DataItemBasePtrList& GetAllData()
const;
285 void RemoveData(
const std::string& data_name);
297 virtual MCDataItemBase* GetInputArchiveDataType(
const std::string& type_name,
298 const std::string& data_name);
301 template<
class Archive>
302 void load(Archive& archive,
const unsigned int version);
303 template<
class Archive>
304 void save(Archive& archive,
const unsigned int version)
const;
305 BOOST_SERIALIZATION_SPLIT_MEMBER();
328 template <
typename T>
331 boost::scoped_ptr<MCDataContainer> DataContainer(
new MCDataContainer(
"Dummy", portable));
334 return DataContainer->Encode();
349 template <
typename T>
354 if (DataContainer.get())
359 if (DataItem && MCGetClassName<T>() == DataItem->TypeName)
361 return boost::shared_ptr<T>(
new T(*reinterpret_cast<T*>(DataItem->DataPtr)));
364 return boost::shared_ptr<T>();
380 template <
typename T>
385 return BinaryData->ToBase64();
400 template <
typename T>
403 boost::scoped_ptr<MCBinaryData> BinaryData(
new MCBinaryData);
405 BinaryData->FromBase64(data_str);
406 return MCDecodeFromBinaryData<T>(*BinaryData, portable);
A helper class to fill the type info to the base structure.
MC::DataItemBasePtrList Items
Data items.
Data container item base structure to store basic type info.
std::string MCEncodeToString(const T &data, bool portable=true)
Encode a data into a string.
#define MC_DISABLE_COPY(class_name)
Helper macro to disable the copy constructor and assignment operator of a class (object copying) ...
boost::shared_ptr< T > MCDecodeFromBinaryData(const MCBinaryData &data, bool portable=true)
Decode a data from binary form.
std::string MCGetClassName(T *instance=nullptr, const std::string &name_suffix="")
Get a class name.
static MCDataContainer * Decode(const MCBinaryData &data, bool portable=false, MCDataContainer *instance=nullptr)
Load the data container from binary form.
MCBinaryData * MCEncodeToBinaryData(const T &data, bool portable=true)
Encode a data into binary form.
boost::shared_ptr< T > MCDecodeFromString(const std::string &data_str, bool portable=true)
Decode a data from a string.
std::string Name
Data container name.
bool Portable
Data container type (portable/non-portable)