annotate DEPENDENCIES/generic/include/boost/serialization/set.hpp @ 133:4acb5d8d80b6 tip

Don't fail environmental check if README.md exists (but .txt and no-suffix don't)
author Chris Cannam
date Tue, 30 Jul 2019 12:25:44 +0100
parents c530137014c0
children
rev   line source
Chris@16 1 #ifndef BOOST_SERIALIZATION_SET_HPP
Chris@16 2 #define BOOST_SERIALIZATION_SET_HPP
Chris@16 3
Chris@16 4 // MS compatible compilers support #pragma once
Chris@101 5 #if defined(_MSC_VER)
Chris@16 6 # pragma once
Chris@16 7 #endif
Chris@16 8
Chris@16 9 /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
Chris@16 10 // set.hpp: serialization for stl set templates
Chris@16 11
Chris@101 12 // (C) Copyright 2002-2014 Robert Ramey - http://www.rrsd.com .
Chris@16 13 // Use, modification and distribution is subject to the Boost Software
Chris@16 14 // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
Chris@16 15 // http://www.boost.org/LICENSE_1_0.txt)
Chris@16 16
Chris@16 17 // See http://www.boost.org for updates, documentation, and revision history.
Chris@16 18
Chris@16 19 #include <set>
Chris@16 20
Chris@16 21 #include <boost/config.hpp>
Chris@16 22
Chris@101 23 #include <boost/archive/detail/basic_iarchive.hpp>
Chris@101 24 #include <boost/serialization/access.hpp>
Chris@101 25 #include <boost/serialization/nvp.hpp>
Chris@101 26 #include <boost/serialization/detail/stack_constructor.hpp>
Chris@101 27 #include <boost/serialization/collection_size_type.hpp>
Chris@101 28 #include <boost/serialization/item_version_type.hpp>
Chris@101 29
Chris@16 30 #include <boost/serialization/collections_save_imp.hpp>
Chris@16 31 #include <boost/serialization/split_free.hpp>
Chris@16 32
Chris@16 33 namespace boost {
Chris@16 34 namespace serialization {
Chris@16 35
Chris@101 36 template<class Archive, class Container>
Chris@101 37 inline void load_set_collection(Archive & ar, Container &s)
Chris@101 38 {
Chris@101 39 s.clear();
Chris@101 40 const boost::archive::library_version_type library_version(
Chris@101 41 ar.get_library_version()
Chris@101 42 );
Chris@101 43 // retrieve number of elements
Chris@101 44 item_version_type item_version(0);
Chris@101 45 collection_size_type count;
Chris@101 46 ar >> BOOST_SERIALIZATION_NVP(count);
Chris@101 47 if(boost::archive::library_version_type(3) < library_version){
Chris@101 48 ar >> BOOST_SERIALIZATION_NVP(item_version);
Chris@101 49 }
Chris@101 50 typename Container::iterator hint;
Chris@101 51 hint = s.begin();
Chris@101 52 while(count-- > 0){
Chris@101 53 typedef typename Container::value_type type;
Chris@101 54 detail::stack_construct<Archive, type> t(ar, item_version);
Chris@101 55 // borland fails silently w/o full namespace
Chris@101 56 ar >> boost::serialization::make_nvp("item", t.reference());
Chris@101 57 typename Container::iterator result = s.insert(hint, t.reference());
Chris@101 58 ar.reset_object_address(& (* result), & t.reference());
Chris@101 59 hint = result;
Chris@101 60 }
Chris@101 61 }
Chris@101 62
Chris@16 63 template<class Archive, class Key, class Compare, class Allocator >
Chris@16 64 inline void save(
Chris@16 65 Archive & ar,
Chris@16 66 const std::set<Key, Compare, Allocator> &t,
Chris@16 67 const unsigned int /* file_version */
Chris@16 68 ){
Chris@16 69 boost::serialization::stl::save_collection<
Chris@16 70 Archive, std::set<Key, Compare, Allocator>
Chris@16 71 >(ar, t);
Chris@16 72 }
Chris@16 73
Chris@16 74 template<class Archive, class Key, class Compare, class Allocator >
Chris@16 75 inline void load(
Chris@16 76 Archive & ar,
Chris@16 77 std::set<Key, Compare, Allocator> &t,
Chris@16 78 const unsigned int /* file_version */
Chris@16 79 ){
Chris@101 80 load_set_collection(ar, t);
Chris@16 81 }
Chris@16 82
Chris@16 83 // split non-intrusive serialization function member into separate
Chris@16 84 // non intrusive save/load member functions
Chris@16 85 template<class Archive, class Key, class Compare, class Allocator >
Chris@16 86 inline void serialize(
Chris@16 87 Archive & ar,
Chris@16 88 std::set<Key, Compare, Allocator> & t,
Chris@16 89 const unsigned int file_version
Chris@16 90 ){
Chris@16 91 boost::serialization::split_free(ar, t, file_version);
Chris@16 92 }
Chris@16 93
Chris@16 94 // multiset
Chris@16 95 template<class Archive, class Key, class Compare, class Allocator >
Chris@16 96 inline void save(
Chris@16 97 Archive & ar,
Chris@16 98 const std::multiset<Key, Compare, Allocator> &t,
Chris@16 99 const unsigned int /* file_version */
Chris@16 100 ){
Chris@16 101 boost::serialization::stl::save_collection<
Chris@16 102 Archive,
Chris@16 103 std::multiset<Key, Compare, Allocator>
Chris@16 104 >(ar, t);
Chris@16 105 }
Chris@16 106
Chris@16 107 template<class Archive, class Key, class Compare, class Allocator >
Chris@16 108 inline void load(
Chris@16 109 Archive & ar,
Chris@16 110 std::multiset<Key, Compare, Allocator> &t,
Chris@16 111 const unsigned int /* file_version */
Chris@16 112 ){
Chris@101 113 load_set_collection(ar, t);
Chris@16 114 }
Chris@16 115
Chris@16 116 // split non-intrusive serialization function member into separate
Chris@16 117 // non intrusive save/load member functions
Chris@16 118 template<class Archive, class Key, class Compare, class Allocator >
Chris@16 119 inline void serialize(
Chris@16 120 Archive & ar,
Chris@16 121 std::multiset<Key, Compare, Allocator> & t,
Chris@16 122 const unsigned int file_version
Chris@16 123 ){
Chris@16 124 boost::serialization::split_free(ar, t, file_version);
Chris@16 125 }
Chris@16 126
Chris@16 127 } // namespace serialization
Chris@16 128 } // namespace boost
Chris@16 129
Chris@16 130 #include <boost/serialization/collection_traits.hpp>
Chris@16 131
Chris@16 132 BOOST_SERIALIZATION_COLLECTION_TRAITS(std::set)
Chris@16 133 BOOST_SERIALIZATION_COLLECTION_TRAITS(std::multiset)
Chris@16 134
Chris@16 135 #endif // BOOST_SERIALIZATION_SET_HPP