Changed size_t to cereal::size_type everywhere.

This is to ensure binary compatability between machines of different bit persuasions. cereal::size_type is typedef'd to uint64_t in helpers.hpp for now, but as soon as our 128 bit machines arrive we can change this with a one liner.

closes #10.
This commit is contained in:
Randolph Voorhies 2013-07-13 16:28:27 -07:00
parent 8f367b6502
commit bfe2289636
10 changed files with 30 additions and 23 deletions

View File

@ -36,6 +36,13 @@
namespace cereal
{
//! The size type used by cereal
/*! To ensure compatability between 32, 64, etc bit machines, we need to use
* a fixed size type instead of size_t, which may vary from machine to
* machine. */
typedef uint64_t size_type;
// forward decls
class BinaryOutputArchive;
class BinaryInputArchive;

View File

@ -39,7 +39,7 @@ namespace cereal
template <class Archive, class T, class A> inline
void save( Archive & ar, std::deque<T, A> const & deque )
{
ar( make_size_tag( deque.size() ) );
ar( make_size_tag( static_cast<size_type>(deque.size()) ) );
for( auto const & i : deque )
ar( i );
@ -49,7 +49,7 @@ namespace cereal
template <class Archive, class T, class A> inline
void load( Archive & ar, std::deque<T, A> & deque )
{
size_t size;
size_type size;
ar( make_size_tag( size ) );
deque.resize( size );

View File

@ -42,7 +42,7 @@ namespace cereal
// write the size - note that this is slow because we need to traverse
// the entire list. there are ways we could avoid this but this was chosen
// since it works in the most general fashion with any archive type
const size_t size = std::distance( forward_list.begin(), forward_list.end() );
size_type const size = std::distance( forward_list.begin(), forward_list.end() );
ar( make_size_tag( size ) );
@ -55,7 +55,7 @@ namespace cereal
template <class Archive, class T, class A>
void load( Archive & ar, std::forward_list<T, A> & forward_list )
{
size_t size;
size_type size;
ar( make_size_tag( size ) );
forward_list.resize( size );

View File

@ -39,7 +39,7 @@ namespace cereal
template <class Archive, class T, class A> inline
void save( Archive & ar, std::list<T, A> const & list )
{
ar( make_size_tag( list.size() ) );
ar( make_size_tag( static_cast<size_type>(list.size()) ) );
for( auto const & i : list )
ar( i );
@ -49,7 +49,7 @@ namespace cereal
template <class Archive, class T, class A> inline
void load( Archive & ar, std::list<T, A> & list )
{
size_t size;
size_type size;
ar( make_size_tag( size ) );
list.resize( size );

View File

@ -41,7 +41,7 @@ namespace cereal
template <class Archive, class MapT> inline
void save( Archive & ar, MapT const & map )
{
ar( make_size_tag( map.size() ) );
ar( make_size_tag( static_cast<size_type>(map.size()) ) );
for( const auto & i : map )
{
@ -53,7 +53,7 @@ namespace cereal
template <class Archive, class MapT> inline
void load( Archive & ar, MapT & map )
{
size_t size;
size_type size;
ar( make_size_tag( size ) );
map.clear();

View File

@ -41,7 +41,7 @@ namespace cereal
template <class Archive, class SetT> inline
void save( Archive & ar, SetT const & set )
{
ar( make_size_tag( set.size() ) );
ar( make_size_tag( static_cast<size_type>(set.size()) ) );
for( const auto & i : set )
ar( i );
@ -51,13 +51,13 @@ namespace cereal
template <class Archive, class SetT> inline
void load( Archive & ar, SetT & set )
{
size_t size;
size_type size;
ar( make_size_tag( size ) );
set.clear();
auto hint = set.begin();
for( size_t i = 0; i < size; ++i )
for( size_type i = 0; i < size; ++i )
{
typename SetT::key_type key;

View File

@ -41,7 +41,7 @@ namespace cereal
save(Archive & ar, std::basic_string<CharT, Traits, Alloc> const & str)
{
// Save number of chars + the data
ar( make_size_tag( str.size() ) );
ar( make_size_tag( static_cast<size_type>(str.size()) ) );
ar( binary_data( str.data(), str.size() * sizeof(CharT) ) );
}
@ -50,7 +50,7 @@ namespace cereal
typename std::enable_if<traits::is_input_serializable<BinaryData<CharT>, Archive>(), void>::type
load(Archive & ar, std::basic_string<CharT, Traits, Alloc> & str)
{
size_t size;
size_type size;
ar( make_size_tag( size ) );
str.resize(size);
ar( binary_data( &(*str.begin()), size * sizeof(CharT) ) );

View File

@ -41,7 +41,7 @@ namespace cereal
template <class Archive, class MapT> inline
void save( Archive & ar, MapT const & map )
{
ar( make_size_tag( map.size() ) );
ar( make_size_tag( static_cast<size_type>(map.size()) ) );
for( const auto & i : map )
ar( make_map_item(i.first, i.second) );
@ -51,13 +51,13 @@ namespace cereal
template <class Archive, class MapT> inline
void load( Archive & ar, MapT & map )
{
size_t size;
size_type size;
ar( make_size_tag( size ) );
map.clear();
map.reserve( size );
for( size_t i = 0; i < size; ++i )
for( size_type i = 0; i < size; ++i )
{
typename MapT::key_type key;
typename MapT::mapped_type value;

View File

@ -41,7 +41,7 @@ namespace cereal
template <class Archive, class SetT> inline
void save( Archive & ar, SetT const & set )
{
ar( make_size_tag( set.size() ) );
ar( make_size_tag( static_cast<size_type>(set.size()) ) );
for( const auto & i : set )
ar( i );
@ -51,13 +51,13 @@ namespace cereal
template <class Archive, class SetT> inline
void load( Archive & ar, SetT & set )
{
size_t size;
size_type size;
ar( make_size_tag( size ) );
set.clear();
set.reserve( size );
for( size_t i = 0; i < size; ++i )
for( size_type i = 0; i < size; ++i )
{
typename SetT::key_type key;

View File

@ -41,7 +41,7 @@ namespace cereal
&& std::is_arithmetic<T>::value && !std::is_same<T, bool>::value, void>::type
save( Archive & ar, std::vector<T, A> const & vector )
{
ar( make_size_tag( vector.size() ) ); // number of elements
ar( make_size_tag( static_cast<size_type>(vector.size()) ) ); // number of elements
ar( binary_data( vector.data(), vector.size() * sizeof(T) ) );
}
@ -51,7 +51,7 @@ namespace cereal
&& std::is_arithmetic<T>::value && !std::is_same<T, bool>::value, void>::type
load( Archive & ar, std::vector<T, A> & vector )
{
size_t vectorSize;
size_type vectorSize;
ar( make_size_tag( vectorSize ) );
vector.resize( vectorSize );
@ -65,7 +65,7 @@ namespace cereal
|| std::is_same<T, bool>::value, void>::type
save( Archive & ar, std::vector<T, A> const & vector )
{
ar( make_size_tag( vector.size() ) ); // number of elements
ar( make_size_tag( static_cast<size_type>(vector.size()) ) ); // number of elements
for( auto it = vector.begin(), end = vector.end(); it != end; ++it )
ar( *it );
}
@ -77,7 +77,7 @@ namespace cereal
|| std::is_same<T, bool>::value, void>::type
load( Archive & ar, std::vector<T, A> & vector )
{
size_t size;
size_type size;
ar( make_size_tag( size ) );
vector.resize( size );