Bytemaster's Boost Libraries
/Users/dlarimer/dev/libs/rpc/include/boost/rpc/serialization.hpp
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_
 All Classes Namespaces Files Functions Variables Typedefs Defines