Chris@102: /* Copyright 2006-2014 Joaquin M Lopez Munoz. Chris@102: * Distributed under the Boost Software License, Version 1.0. Chris@102: * (See accompanying file LICENSE_1_0.txt or copy at Chris@102: * http://www.boost.org/LICENSE_1_0.txt) Chris@102: * Chris@102: * See http://www.boost.org/libs/flyweight for library home page. Chris@102: */ Chris@102: Chris@102: #ifndef BOOST_FLYWEIGHT_SERIALIZE_HPP Chris@102: #define BOOST_FLYWEIGHT_SERIALIZE_HPP Chris@102: Chris@102: #if defined(_MSC_VER)&&(_MSC_VER>=1200) Chris@102: #pragma once Chris@102: #endif Chris@102: Chris@102: #include /* keep it first to prevent nasty warns in MSVC */ Chris@102: #include Chris@102: #include Chris@102: #include Chris@102: #include Chris@102: #include Chris@102: #include Chris@102: #include Chris@102: Chris@102: /* Serialization routines for flyweight. Chris@102: */ Chris@102: Chris@102: namespace boost{ Chris@102: Chris@102: namespace serialization{ Chris@102: Chris@102: template< Chris@102: class Archive, Chris@102: typename T,typename Arg1,typename Arg2,typename Arg3 Chris@102: > Chris@102: inline void serialize( Chris@102: Archive& ar,::boost::flyweights::flyweight& f, Chris@102: const unsigned int version) Chris@102: { Chris@102: split_free(ar,f,version); Chris@102: } Chris@102: Chris@102: template< Chris@102: class Archive, Chris@102: typename T,typename Arg1,typename Arg2,typename Arg3 Chris@102: > Chris@102: void save( Chris@102: Archive& ar,const ::boost::flyweights::flyweight& f, Chris@102: const unsigned int version) Chris@102: { Chris@102: typedef ::boost::flyweights::flyweight flyweight; Chris@102: typedef ::boost::flyweights::detail::save_helper helper; Chris@102: typedef typename helper::size_type size_type; Chris@102: Chris@102: helper& hlp=ar.template get_helper(); Chris@102: Chris@102: size_type n=hlp.find(f); Chris@102: ar< Chris@102: void load( Chris@102: Archive& ar,::boost::flyweights::flyweight& f, Chris@102: const unsigned int version) Chris@102: { Chris@102: typedef ::boost::flyweights::flyweight flyweight; Chris@102: typedef typename flyweight::key_type key_type; Chris@102: typedef ::boost::flyweights::detail::load_helper helper; Chris@102: typedef typename helper::size_type size_type; Chris@102: Chris@102: helper& hlp=ar.template get_helper(); Chris@102: Chris@102: size_type n=0; Chris@102: ar>>make_nvp("item",n); Chris@102: if(n>hlp.size()){ Chris@102: throw_exception( Chris@102: archive::archive_exception(archive::archive_exception::other_exception)); Chris@102: } Chris@102: else if(n==hlp.size()){ Chris@102: ::boost::flyweights::detail::archive_constructed k( Chris@102: "key",ar,version); Chris@102: hlp.push_back(flyweight(k.get())); Chris@102: } Chris@102: f=hlp[n]; Chris@102: } Chris@102: Chris@102: } /* namespace serialization */ Chris@102: Chris@102: } /* namespace boost */ Chris@102: Chris@102: #endif