1 #ifndef _Serialize_h_ 2 #define _Serialize_h_ 3 4 #include <boost/archive/binary_iarchive.hpp> 5 #include <boost/archive/binary_oarchive.hpp> 6 #include <boost/archive/xml_iarchive.hpp> 7 #include <boost/archive/xml_oarchive.hpp> 8 9 #include <map> 10 11 #include "Export.h" 12 13 class OrderSet; 14 class Universe; 15 class UniverseObject; 16 17 typedef boost::archive::binary_iarchive freeorion_bin_iarchive; 18 typedef boost::archive::binary_oarchive freeorion_bin_oarchive; 19 typedef boost::archive::xml_iarchive freeorion_xml_iarchive; 20 typedef boost::archive::xml_oarchive freeorion_xml_oarchive; 21 22 //! @warning 23 //! Do not try to serialize types that contain longs, since longs are 24 //! different sizes on 32- and 64-bit architectures. Replace your longs 25 //! with long longs for portability. It would seem that short of writing 26 //! some Boost.Serialization archive that handles longs portably, we cannot 27 //! transmit longs across machines with different bit-size architectures. 28 29 //! Serialize @p universe to output archive @p oa. 30 template <typename Archive> 31 FO_COMMON_API void Serialize(Archive& oa, const Universe& universe); 32 33 //! Serialize @p object_map to output archive @p oa. 34 template <typename Archive> 35 void Serialize(Archive& oa, const std::map<int, std::shared_ptr<UniverseObject>>& objects); 36 37 //! Serialize @p order_set to output archive @p oa. 38 template <typename Archive> 39 void Serialize(Archive& oa, const OrderSet& order_set); 40 41 //! Deserialize @p universe from input archive @p ia. 42 template <typename Archive> 43 FO_COMMON_API void Deserialize(Archive& ia, Universe& universe); 44 45 //! Deserialize @p object_map from input archive @p ia. 46 template <typename Archive> 47 void Deserialize(Archive& ia, std::map<int, std::shared_ptr<UniverseObject>>& objects); 48 49 //! Deserialize @p order_set from input archive @p ia. 50 template <typename Archive> 51 void Deserialize(Archive& ia, OrderSet& order_set); 52 53 #endif // _Serialize_h_ 54