//---------------------------------------------------------------------------- // Serializer.h // Copyright (c) 2006 Move Interactive // // //---------------------------------------------------------------------------- #ifndef _FLOWENGINE_CORE_SERIALIZER_XMLSERIALIZER_H_ #define _FLOWENGINE_CORE_SERIALIZER_XMLSERIALIZER_H_ // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif #include "core/serialization/Serializer.h" #include #include #include // size_t #include #if defined(BOOST_NO_STDC_NAMESPACE) namespace std{ using ::size_t; } // namespace std #endif #include #include #include #include #include #include #include #include #include // must be the last header namespace FlowEngine { class XMLArchiveO : public IArchive, // don't derive from xml_oarchive !!! public boost::archive::xml_oarchive_impl { public: XMLArchiveO(std::ostream & os, unsigned flags = 0) : boost::archive::xml_oarchive_impl(os, flags) {} FE_SERIALIZATION_SERIALIZE; virtual void Serialize(void * data, size_t size) { save_binary(data, size); } virtual void Serialize(Serializer & t) { *this & BOOST_SERIALIZATION_NVP(t); } virtual void Serialize(Serializer * t) { *this & BOOST_SERIALIZATION_NVP(t); } }; class XMLArchiveI : public IArchive, // don't derive from xml_oarchive !!! public boost::archive::xml_iarchive_impl { public: XMLArchiveI(std::istream & is, unsigned flags = 0) : boost::archive::xml_iarchive_impl(is,flags) {} FE_SERIALIZATION_SERIALIZE; virtual void Serialize(void * data, size_t size) { load_binary(data, size); } virtual void Serialize(Serializer & t) { *this & BOOST_SERIALIZATION_NVP(t); } virtual void Serialize(Serializer * t) { *this & BOOST_SERIALIZATION_NVP(t); } }; } // required by smart_cast for compilers not implementing // partial template specialization BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(boost::archive::xml_oarchive) #include // pops abi_suffix.hpp pragmas #endif // BOOST_ARCHIVE_XML_OARCHIVE_HPP