Ticket #4214: boost-serialization-version-collection.patch

File boost-serialization-version-collection.patch, 6.3 KB (added by Douglas Gregor, 12 years ago)

Patch to use collection_size_type/version_type consistently

  • boost/serialization/slist.hpp

     
    6060    ar >> BOOST_SERIALIZATION_NVP(count);
    6161    if(std::size_t(0) == count)
    6262        return;
    63     unsigned int v;
     63    unsigned int v = 0;
    6464    if(3 < ar.get_library_version()){
    65         ar >> boost::serialization::make_nvp("item_version", v);
     65      boost::archive::version_type item_version(0);
     66      ar >> BOOST_SERIALIZATION_NVP(item_version);
     67      v = item_version.t;
    6668    }
    6769    boost::serialization::detail::stack_construct<Archive, U> u(ar, v);
    6870    ar >> boost::serialization::make_nvp("item", u.reference());
  • boost/serialization/hash_collections_save_imp.hpp

     
    2222#include <boost/serialization/nvp.hpp>
    2323#include <boost/serialization/serialization.hpp>
    2424#include <boost/serialization/version.hpp>
     25#include <boost/serialization/collection_size_type.hpp>
    2526
    2627namespace boost{
    2728namespace serialization {
     
    3536inline void save_hash_collection(Archive & ar, const Container &s)
    3637{
    3738    // record number of elements
    38     unsigned int count = s.size();
     39    unsigned int c = s.size();
     40    collection_size_type count(c);
    3941    ar <<  BOOST_SERIALIZATION_NVP(count);
    4042    // make sure the target type is registered so we can retrieve
    4143    // the version when we load
    4244    if(3 < ar.get_library_version()){
    43         const unsigned int bucket_count = s.bucket_count();
     45        const collection_size_type bucket_count(s.bucket_count());
    4446        ar << BOOST_SERIALIZATION_NVP(bucket_count);
    45         const unsigned int item_version = version<BOOST_DEDUCED_TYPENAME Container::value_type>::value;
     47        const boost::archive::version_type item_version(
     48                version<BOOST_DEDUCED_TYPENAME Container::value_type>::value);
    4649        ar << BOOST_SERIALIZATION_NVP(item_version);
    4750    }
    4851    BOOST_DEDUCED_TYPENAME Container::const_iterator it = s.begin();
    49     while(count-- > 0){
     52    while(c-- > 0){
    5053        // note borland emits a no-op without the explicit namespace
    5154        boost::serialization::save_construct_data_adl(
    5255            ar,
  • boost/serialization/collections_load_imp.hpp

     
    139139    s.clear();
    140140    // retrieve number of elements
    141141    collection_size_type count;
    142     unsigned int item_version;
     142    unsigned int item_version_val = 0;
    143143    ar >> BOOST_SERIALIZATION_NVP(count);
    144     if(3 < ar.get_library_version())
    145         ar >> BOOST_SERIALIZATION_NVP(item_version);
    146     else
    147         item_version = 0;
     144    if(3 < ar.get_library_version()) {
     145      boost::archive::version_type item_version(0);
     146      ar >> BOOST_SERIALIZATION_NVP(item_version);
     147      item_version_val = item_version.t;
     148    }
    148149    R rx;
    149150    rx(s, count);
    150151    std::size_t c = count;
     
    152153    BOOST_DEDUCED_TYPENAME Container::iterator hint;
    153154    hint = s.begin();
    154155    while(c-- > 0){
    155         hint = ifunc(ar, s, item_version, hint);
     156        hint = ifunc(ar, s, item_version_val, hint);
    156157    }
    157158}
    158159
  • boost/serialization/collections_save_imp.hpp

     
    4141    // make sure the target type is registered so we can retrieve
    4242    // the version when we load
    4343    if(3 < ar.get_library_version()){
    44         const unsigned int item_version = version<
     44      const boost::archive::version_type item_version(version<
    4545            BOOST_DEDUCED_TYPENAME Container::value_type
    46         >::value;
    47         ar << BOOST_SERIALIZATION_NVP(item_version);
     46        >::value);
     47      ar << BOOST_SERIALIZATION_NVP(item_version);
    4848    }
    4949    BOOST_DEDUCED_TYPENAME Container::const_iterator it = s.begin();
    5050    collection_size_type c=count;
  • boost/serialization/optional.hpp

     
    3838    ar << boost::serialization::make_nvp("initialized", tflag);
    3939    if (tflag){
    4040        if(3 < ar.get_library_version()){
    41             const int v = version<T>::value;
    42             ar << boost::serialization::make_nvp("item_version", v);
     41          const boost::archive::version_type v(version<T>::value);
     42          ar << boost::serialization::make_nvp("item_version", v);
    4343        }
    4444        ar << boost::serialization::make_nvp("value", *t);
    4545    }
     
    5656    if (tflag){
    5757        unsigned int v = 0;
    5858        if(3 < ar.get_library_version()){
    59             ar >> boost::serialization::make_nvp("item_version", v);
     59          boost::archive::version_type vt(v);
     60          ar >> boost::serialization::make_nvp("item_version", vt);
     61          v = vt.t;
    6062        }
    6163        detail::stack_construct<Archive, T> aux(ar, v);
    6264        ar >> boost::serialization::make_nvp("value", aux.reference());
  • boost/serialization/hash_collections_load_imp.hpp

     
    2121#include <boost/config.hpp>
    2222#include <boost/serialization/nvp.hpp>
    2323//#include <boost/serialization/collections_load_imp.hpp>
     24#include <boost/serialization/collection_size_type.hpp>
    2425
    2526namespace boost{
    2627namespace serialization {
     
    3435{
    3536    s.clear();
    3637    // retrieve number of elements
    37     unsigned int count;
    38     unsigned int item_version(0);
    39     unsigned int bucket_count;;
     38    collection_size_type count;
     39    boost::archive::version_type item_version(0);
     40    collection_size_type bucket_count;
    4041    ar >> BOOST_SERIALIZATION_NVP(count);
    4142    if(3 < ar.get_library_version()){
    4243       ar >> BOOST_SERIALIZATION_NVP(bucket_count);