/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // // demo_portable_archive.cpp // // (C) Copyright 2002-4 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // should pass compilation and execution // note:: this example can only be built with the static library // (at least with MSVC - due to conflicts related to import of library // code and instantiation of templates. #include #include "portable_binary_oarchive.hpp" #include "portable_binary_iarchive.hpp" #include #include #if defined(BOOST_NO_STDC_NAMESPACE) namespace std{ using ::rand; } #endif class A { friend class boost::serialization::access; char c; A *pa; int i; int i2; // special tricky case to check sign extension unsigned int ui; long l; unsigned long ul; template void serialize(Archive & ar, const unsigned int /* version */){ ar & c & i & i2 & ui & l & ul ; } public: bool operator==(const A & rhs) const { return c == rhs.c && i == rhs.i && i2 == rhs.i2 && ui == rhs.ui && l == rhs.l && ul == rhs.ul ; } A() : c(0xFF & std::rand()), pa(0), i(std::rand()), i2(0x80), ui(std::rand()), l(std::rand() * std::rand()), ul(std::rand()) {} }; int main( int /* argc */, char* /* argv */[] ) { const A a; A a1; std::stringstream ss; { portable_binary_oarchive pboa(ss); pboa << a; } { portable_binary_iarchive pbia(ss); pbia >> a1; } if(! (a == a1)) return 1; ss.clear(); { portable_binary_oarchive pboa(ss, endian_big); pboa << a; } { portable_binary_iarchive pbia(ss, endian_big); pbia >> a1; } if(! (a == a1)) return 1; ss.clear(); { portable_binary_oarchive pboa(ss, endian_big); pboa << a; } { portable_binary_iarchive pbia(ss, endian_big); pbia >> a1; } return !(a == a1); }