Chris@16
|
1 /*!
|
Chris@16
|
2 * \file bitset.hpp
|
Chris@16
|
3 * \brief Provides Boost.Serialization support for std::bitset
|
Chris@16
|
4 * \author Brian Ravnsgaard Riis
|
Chris@16
|
5 * \author Kenneth Riddile
|
Chris@16
|
6 * \date 16.09.2004, updated 04.03.2009
|
Chris@16
|
7 * \copyright 2004 Brian Ravnsgaard Riis
|
Chris@16
|
8 * \license Boost Software License 1.0
|
Chris@16
|
9 */
|
Chris@16
|
10 #ifndef BOOST_SERIALIZATION_BITSET_HPP
|
Chris@16
|
11 #define BOOST_SERIALIZATION_BITSET_HPP
|
Chris@16
|
12
|
Chris@16
|
13 // MS compatible compilers support #pragma once
|
Chris@101
|
14 #if defined(_MSC_VER)
|
Chris@16
|
15 # pragma once
|
Chris@16
|
16 #endif
|
Chris@16
|
17
|
Chris@16
|
18 #include <bitset>
|
Chris@16
|
19 #include <cstddef> // size_t
|
Chris@16
|
20
|
Chris@16
|
21 #include <boost/config.hpp>
|
Chris@16
|
22 #include <boost/serialization/split_free.hpp>
|
Chris@16
|
23 #include <boost/serialization/string.hpp>
|
Chris@16
|
24 #include <boost/serialization/nvp.hpp>
|
Chris@16
|
25
|
Chris@16
|
26 namespace boost{
|
Chris@16
|
27 namespace serialization{
|
Chris@16
|
28
|
Chris@16
|
29 template <class Archive, std::size_t size>
|
Chris@16
|
30 inline void save(
|
Chris@16
|
31 Archive & ar,
|
Chris@16
|
32 std::bitset<size> const & t,
|
Chris@16
|
33 const unsigned int /* version */
|
Chris@16
|
34 ){
|
Chris@16
|
35 const std::string bits = t.template to_string<
|
Chris@16
|
36 std::string::value_type,
|
Chris@16
|
37 std::string::traits_type,
|
Chris@16
|
38 std::string::allocator_type
|
Chris@16
|
39 >();
|
Chris@16
|
40 ar << BOOST_SERIALIZATION_NVP( bits );
|
Chris@16
|
41 }
|
Chris@16
|
42
|
Chris@16
|
43 template <class Archive, std::size_t size>
|
Chris@16
|
44 inline void load(
|
Chris@16
|
45 Archive & ar,
|
Chris@16
|
46 std::bitset<size> & t,
|
Chris@16
|
47 const unsigned int /* version */
|
Chris@16
|
48 ){
|
Chris@16
|
49 std::string bits;
|
Chris@16
|
50 ar >> BOOST_SERIALIZATION_NVP( bits );
|
Chris@16
|
51 t = std::bitset<size>(bits);
|
Chris@16
|
52 }
|
Chris@16
|
53
|
Chris@16
|
54 template <class Archive, std::size_t size>
|
Chris@16
|
55 inline void serialize(
|
Chris@16
|
56 Archive & ar,
|
Chris@16
|
57 std::bitset<size> & t,
|
Chris@16
|
58 const unsigned int version
|
Chris@16
|
59 ){
|
Chris@16
|
60 boost::serialization::split_free( ar, t, version );
|
Chris@16
|
61 }
|
Chris@16
|
62
|
Chris@16
|
63 // don't track bitsets since that would trigger tracking
|
Chris@16
|
64 // all over the program - which probably would be a surprise.
|
Chris@16
|
65 // also, tracking would be hard to implement since, we're
|
Chris@16
|
66 // serialization a representation of the data rather than
|
Chris@16
|
67 // the data itself.
|
Chris@16
|
68 template <std::size_t size>
|
Chris@16
|
69 struct tracking_level<std::bitset<size> >
|
Chris@16
|
70 : mpl::int_<track_never> {} ;
|
Chris@16
|
71
|
Chris@16
|
72 } //serialization
|
Chris@16
|
73 } //boost
|
Chris@16
|
74
|
Chris@16
|
75 #endif // BOOST_SERIALIZATION_BITSET_HPP
|