Boost logo

Boost Users :

Subject: [Boost-users] [serialization] EOF marker?
From: Ramey, Larry (c_lramey_at_[hidden])
Date: 2013-04-15 10:59:01


Is there a way to serialize an unknown number of items and then read them back? In essence, I'd like to do this:

Ignore the variables being serialized, these are pointers to base classes, they go in and out just fine.

try
    {
        ofstream ofs(fileName.c_str(),ios::binary);
       portable_binary_oarchive oa(ofs);
       //boost::archive::text_oarchive oa(ofs);

        oa<<qdc
          <<qdf
          <<qdenv
          <<qdmsg
          <<qsd
          <<qdfc
          <<qdce;

    }
    catch(boost::archive::archive_exception& ae)
    {
        cout<<ae.what();
    }

try
    {

        ifstream ifs(fileName.c_str(),ios::binary);
        portable_binary_iarchive ia(ifs);
        //boost::archive::text_iarchive ia(ifs);
        while( true )
        {
            ia>>qdc2;
            cout<<qdc2->GetElementDebugType()<<endl;
            delete qdc2;
            qdc2=NULL;
        }

    }
    catch(boost::archive::archive_exception& ae)
    {
        cout<<ae.what();
    }
    catch( std::exception& e)
    {
        cout<<e.what();
    }

What happens is that an exception gets tossed with this message:
5
2
14
1
3
18
Access violation - no RTTI data!

The numbers are correct, those are the elements that got serialized. I'd like to do something like:
while( ia )
{
                Ia>>qdc2;
}
But there is no () operator on an portable_binary_iarchive . I tried to do the test on the input stream, but that didn't work either. I don't know how many elements there are because I'm writing them as I go, I don't want to catch that exception as the EOF marker, because it really isn't the correct exception for that. I tried walking through the serialization code to see where it actually reads a byte stream form the file... but I'm apparently not smart enough to unravel that much templated Macro awesomeness. :)

Larry E. Ramey



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