1/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 2// archive_serializer_map.ipp: 3 4// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 5// Distributed under the Boost Software License, Version 1.0. (See 6// accompanying file LICENSE_1_0.txt or copy at 7// http://www.boost.org/LICENSE_1_0.txt) 8 9// See http://www.boost.org for updates, documentation, and revision history. 10 11////////////////////////////////////////////////////////////////////// 12// implementation of basic_text_iprimitive overrides for the combination 13// of template parameters used to implement a text_iprimitive 14 15#include <boost/config.hpp> 16#include <boost/archive/detail/archive_serializer_map.hpp> 17#include <boost/archive/detail/basic_serializer_map.hpp> 18#include <boost/serialization/singleton.hpp> 19 20namespace boost { 21namespace archive { 22namespace detail { 23 24#ifdef BOOST_MSVC 25# pragma warning(push) 26# pragma warning(disable : 4511 4512) 27#endif 28 29namespace extra_detail { // anon 30 template<class Archive> 31 class map : public basic_serializer_map 32 {}; 33} 34 35#ifdef BOOST_MSVC 36# pragma warning(pop) 37#endif 38 39template<class Archive> 40BOOST_ARCHIVE_OR_WARCHIVE_DECL bool 41archive_serializer_map<Archive>::insert(const basic_serializer * bs){ 42 return boost::serialization::singleton< 43 extra_detail::map<Archive> 44 >::get_mutable_instance().insert(bs); 45} 46 47template<class Archive> 48BOOST_ARCHIVE_OR_WARCHIVE_DECL void 49archive_serializer_map<Archive>::erase(const basic_serializer * bs){ 50 // note: previously this conditional was a runtime assertion with 51 // BOOST_ASSERT. We've changed it because we've discovered that at 52 // least one platform is not guaranteed to destroy singletons in 53 // reverse order of distruction. 54 if(boost::serialization::singleton< 55 extra_detail::map<Archive> 56 >::is_destroyed()) 57 return; 58 boost::serialization::singleton< 59 extra_detail::map<Archive> 60 >::get_mutable_instance().erase(bs); 61} 62 63template<class Archive> 64BOOST_ARCHIVE_OR_WARCHIVE_DECL const basic_serializer * 65archive_serializer_map<Archive>::find( 66 const boost::serialization::extended_type_info & eti 67) { 68 return boost::serialization::singleton< 69 extra_detail::map<Archive> 70 >::get_const_instance().find(eti); 71} 72 73} // namespace detail 74} // namespace archive 75} // namespace boost 76