Added binary enum serialization

This commit is contained in:
Randolph Voorhies
2013-06-19 17:56:30 -07:00
parent d82ecd7b63
commit 24ad0341ad
5 changed files with 17 additions and 10 deletions

View File

@@ -1,5 +1,5 @@
CPPFLAGS=-std=c++11 -I./include -Wall -Werror CPPFLAGS=-std=c++11 -I./include -Wall -Werror
CC=g++ CC=clang++
all: unittests sandbox performance all: unittests sandbox performance

View File

@@ -126,6 +126,16 @@ namespace cereal
ar.loadBinary(std::addressof(t), sizeof(t)); ar.loadBinary(std::addressof(t), sizeof(t));
} }
//! Serialization for enum types to binary
template<class Archive, class T> inline
typename std::enable_if<std::is_enum<T>::value &&
(std::is_same<Archive, BinaryInputArchive>::value || std::is_same<Archive, BinaryOutputArchive>::value),
void>::type
serialize(Archive & ar, T & t)
{
ar( reinterpret_cast<typename std::underlying_type<T>::type &>(t) );
}
//! Serializing NVP types to binary //! Serializing NVP types to binary
template <class Archive, class T> inline template <class Archive, class T> inline
CEREAL_ARCHIVE_RESTRICT_SERIALIZE(BinaryInputArchive, BinaryOutputArchive) CEREAL_ARCHIVE_RESTRICT_SERIALIZE(BinaryInputArchive, BinaryOutputArchive)

View File

@@ -41,12 +41,12 @@ namespace cereal
string string
}; };
template <class Archive> inline //template <class Archive> inline
CEREAL_ARCHIVE_RESTRICT_SERIALIZE(BinaryInputArchive, BinaryOutputArchive) //CEREAL_ARCHIVE_RESTRICT_SERIALIZE(BinaryInputArchive, BinaryOutputArchive)
serialize( Archive & ar, type & t ) //serialize( Archive & ar, type & t )
{ //{
ar( reinterpret_cast<uint8_t &>( t ) ); // ar( reinterpret_cast<uint8_t &>( t ) );
} //}
} }
//! Serializing (save) for std::bitset to binary //! Serializing (save) for std::bitset to binary

View File

@@ -65,14 +65,12 @@ class Test2
void save(Archive & ar) const void save(Archive & ar) const
{ {
ar(a); ar(a);
//ar(CEREAL_NVP(a));
} }
template<class Archive> template<class Archive>
void load(Archive & ar) void load(Archive & ar)
{ {
ar(a); ar(a);
//ar(CEREAL_NVP(a));
} }
}; };

View File

@@ -1816,4 +1816,3 @@ BOOST_AUTO_TEST_CASE( binary_chrono )
BOOST_CHECK_EQUAL( o_timePoint1 == i_timePoint1, true ); BOOST_CHECK_EQUAL( o_timePoint1 == i_timePoint1, true );
} }
} }