27 #ifndef CEREAL_TYPES_BITSET_HPP_
28 #define CEREAL_TYPES_BITSET_HPP_
30 #include <cereal/cereal.hpp>
35 namespace bitset_detail
37 enum class type : uint8_t
46 template <
class Archive,
size_t N>
inline
47 void save( Archive & ar, std::bitset<N>
const & bits )
51 auto const b = bits.to_ulong();
52 ar( _CEREAL_NVP(
"type", bitset_detail::type::ulong) );
53 ar( _CEREAL_NVP(
"data", b) );
55 catch( std::overflow_error
const & e )
59 auto const b = bits.to_ullong();
60 ar( _CEREAL_NVP(
"type", bitset_detail::type::ullong) );
61 ar( _CEREAL_NVP(
"data", b) );
63 catch( std::overflow_error
const & e )
65 ar( _CEREAL_NVP(
"type", bitset_detail::type::string) );
66 ar( _CEREAL_NVP(
"data", bits.to_string()) );
72 template <
class Archive,
size_t N>
inline
73 void load( Archive & ar, std::bitset<N> & bits )
75 bitset_detail::type t;
80 case bitset_detail::type::ulong:
84 bits = std::bitset<N>( b );
87 case bitset_detail::type::ullong:
91 bits = std::bitset<N>( b );
94 case bitset_detail::type::string:
98 bits = std::bitset<N>( b );
102 throw Exception(
"Invalid bitset data representation");
107 #endif // CEREAL_TYPES_BITSET_HPP_