Boost logo

Boost Users :

From: Robert Ramey (ramey_at_[hidden])
Date: 2008-04-03 11:32:52


Looks like the trunk version is already fixed.

Robert Ramey

"Filip Peters" <filippeters_at_[hidden]> wrote in message
news:753101.4971.qm_at_web30701.mail.mud.yahoo.com...
I looked a bit deeper into the code and found this:

in 1.34.1, a vector would use the code from collections_save_imp.hpp,
which contains the following:
    unsigned int count = s.size();
    ar << BOOST_SERIALIZATION_NVP(count);

    if(3 < ar.get_library_version()){
        const unsigned int item_version = version<
            BOOST_DEDUCED_TYPENAME Container::value_type
>::value;
        ar << BOOST_SERIALIZATION_NVP(item_version);
    }

in 1.35.0, there is an "optimized" version in vector.hpp,

    const collection_size_type count(t.size());
    ar << BOOST_SERIALIZATION_NVP(count);
   if (!t.empty())
      ar << make_array(detail::get_data(t),t.size());

without the item_version.
Loading a vector of a type like int or double, created in 1.34 won't work in
1.35.

Filip Peters.

Haven't used boost's trac before, but I'll enter it tomorrow.

In the meantime, adding item_version into the optimized versions seems to
solve my problem, except I have to make sure it doesn't break in the next
version.

----- Original Message ----
From: Robert Ramey <ramey_at_[hidden]>
To: boost-users_at_[hidden]
Sent: Wednesday, April 2, 2008 6:30:01 PM
Subject: Re: [Boost-users] serialization, 1.34/1.35 difference: serializing
a vector

Hmm I don't recal where that might have come from. Open a TRAK item.

Robert Ramey
"Filip Peters" <filippeters_at_[hidden]> wrote in message
news:859190.51711.qm_at_web30705.mail.mud.yahoo.com...
I just tried serializing a simple vector,
std::vector<unsigned int> vectortest;

If I serialize out in 1.34, I can't read it in in 1.35.
xml result from 1.35:
<vectortest>
    <count>3</count>
    <item>1</item>
    <item>2</item>
    <item>3< /item>
</vectortest>

from 1.34:
<vectortest>
    <count>3</count>
    <item_version>0</item_version>
    <item>1</item>
&n bsp; <item>2</item>
    <item>3</item>
</vectortest>

Notice the item_version, this causes an exception when reading it in with
1.35....
I need a way to get the behavior from 1.34 back....
Otherwise my files aren't readable anymore.

small testprogram:

#include <boost/config.hpp>

#include <boost/archive/xml_oarchive.hpp>
#include <boost/archive/xml_iarchive.hpp>
//#include <boost/archive/binary_iarchive.hpp>
//#include <boost/archive/binary_oarchive.hpp>

#include <boost/serialization/vector.hpp>
#include <boost/serialization/export.hpp>
#include <fstream>
#include <iomanip>

int _tmain(int argc, _TCHAR* argv[])
{

    std::vector<unsigned int> testvector;
    testvector.push_back(1.);
    testvector.push_back (2.);
    testvector.push_back(3.);

//this in 1.34
        std::ofstream ofs( "testing2.txt", std::ios::binary ) ;
        boost::archive::xml_oarchive oa(ofs);
        oa << boost::serialization::make_nvp("vectortest", testvector);
        ofs.close();

//do this in 1.35
    try{
        std::ifstream ofs( "testing2.txt", std::ios::binary ) ;
        boost::archive::xml_iarchive ia(ofs);
        ia >> boost::serialization::make_nvp("vectortest", testvector2);
      &nb sp; ofs.close();
    }
    catch(boost::archi ve::archive_exception testexception){
    //reading a file from 1.34, will end up here
        std::string error = testexception.what();
    }

return 0;
}

You rock. That's why Blockbuster's offering you one month of Blockbuster
Total Access, No Cost.

_______________________________________________
Boost-users mailing list
Boost-users_at_[hidden]
http://lists.boost.org/mailman/listinfo.cgi/boost-users

_______________________________________________
Boost-users mailing list
Boost-u sers_at_[hidden]
http://lists.boost.org/mailman/listinfo.cgi/boost-users

You rock. That's why Blockbuster's offering you one month of Blockbuster
Total Access, No Cost.

_______________________________________________
Boost-users mailing list
Boost-users_at_[hidden]
http://lists.boost.org/mailman/listinfo.cgi/boost-users


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net