Bytemaster's Boost Libraries
|
00001 #ifndef _BOOST_RPC_SERIALIZATION_HPP_ 00002 #define _BOOST_RPC_SERIALIZATION_HPP_ 00003 #include <boost/fusion/algorithm/iteration/for_each.hpp> 00004 #include <boost/fusion/include/for_each.hpp> 00005 #include <boost/fusion/container/vector.hpp> 00006 #include <boost/fusion/include/vector.hpp> 00007 #include <boost/fusion/container/vector/vector_fwd.hpp> 00008 #include <boost/fusion/include/vector_fwd.hpp> 00009 #include <boost/fusion/container/generation/make_vector.hpp> 00010 #include <boost/fusion/include/make_vector.hpp> 00011 #include <boost/fusion/sequence/comparison/equal_to.hpp> 00012 #include <boost/fusion/include/equal_to.hpp> 00013 00014 #include <boost/archive/binary_iarchive.hpp> 00015 #include <boost/archive/binary_oarchive.hpp> 00016 #include <boost/serialization/serialization.hpp> 00017 00018 namespace boost { namespace rpc { 00019 namespace serialization { 00020 template<typename Archive> 00021 struct item_serializer 00022 { 00023 item_serializer(Archive& ar):ar(ar) {} 00024 00025 template<typename T> 00026 void operator()(const T& o) const { 00027 ar << o; 00028 } 00029 Archive& ar; 00030 }; 00031 00032 template<typename Archive, typename V> 00033 Archive& serialize_fusion_vector(Archive& ar, const V& v) 00034 { 00035 boost::fusion::for_each(v, item_serializer<Archive>(ar)); 00036 return ar; 00037 } 00038 00039 template<typename Archive> 00040 struct item_deserializer 00041 { 00042 item_deserializer(Archive& ar):ar(ar) {} 00043 00044 template<typename T> 00045 void operator()(T& o) const { 00046 ar >> o; 00047 } 00048 Archive& ar; 00049 }; 00050 00051 template<typename Archive, typename V> 00052 Archive& deserialize_fusion_vector(Archive& ar, V& v) 00053 { 00054 boost::fusion::for_each(v, item_deserializer<Archive>(ar)); 00055 return ar; 00056 } 00057 00058 } 00059 } } 00060 00061 #endif // _BOOST_RPC_SERIALIZATION_HPP_