Boost logo

Boost Users :

Subject: Re: [Boost-users] [Q] help serializing a multiset of shared ptrs
From: V S P (toreason_at_[hidden])
Date: 2009-06-17 13:33:35


Hi,
did not get any replies,
just wanted to see if may be there is serialize specific list
or if anybody can recommend an example that serializes
an associative container of shared pointers

thank you in advance

On Mon, 15 Jun 2009 00:57 -0400, "V S P" <toreason_at_[hidden]> wrote:
> Hello,
>
> I am sure I am not doing things quite right in serializing my
> multiset, however I could not 'connect the dots' in the serialize
> documentation between serializing shared pointers and containers.
>
> Therefore, asking for help.
>
> I created a complete compilable example, that I am attaching below
> and the created output file. The program crashes on the last line
> when I am trying to load the data back in.
>
> Any help is greatly appreciated,
> Vlad
> -------------- prog start ----------------
> #include <iostream>
> #include <fstream>
> #include <ostream>
> #include <ctime>
> #include <cstdlib>
>
>
> #include <set>
> #include <algorithm>
>
> #include <boost/archive/tmpdir.hpp>
> #include <boost/archive/text_iarchive.hpp>
> #include <boost/archive/text_oarchive.hpp>
> #include <boost/serialization/base_object.hpp>
> #include <boost/serialization/utility.hpp>
> #include <boost/serialization/list.hpp>
> #include <boost/serialization/assume_abstract.hpp>
> #include <boost/serialization/base_object.hpp>
> #include <boost/serialization/nvp.hpp>
>
>
> #include <boost/archive/tmpdir.hpp>
> #include <boost/archive/xml_oarchive.hpp>
> #include <boost/archive/xml_iarchive.hpp>
>
> #include <boost/lexical_cast.hpp>
>
>
> using namespace std;
> using namespace boost;
>
>
> template <typename TRow, typename TContainer=std::multiset<
> shared_ptr<TRow> > >
> struct cactivetable_t: public TContainer,
> private boost::noncopyable
>
> {
> template <typename Archive>
> void
> serialize (Archive& ar, const unsigned int version)
> {
>
>
> for (TContainer::const_iterator it=begin();
> it!=end();it++)
> {
> (*it)->myserialize(ar,version);
> }
> }
>
> };
>
>
> struct tRow
> {
> int a;
> string b;
>
> template <typename Archive>
> void
> myserialize (Archive& ar, const unsigned int version)
> {
> ar&boost::serialization::make_nvp("a", a);
> ar&boost::serialization::make_nvp("b", b);
> }
>
> };
>
>
> struct randrow
> {
> shared_ptr<tRow> operator()(void)
> {
> shared_ptr<tRow> p(new tRow);
> p->a=rand()%100;
> p->b=lexical_cast<string>(p->a);
> return p;
> }
>
> };
>
> void main (void)
> {
> cactivetable_t<tRow> mytb;
> shared_ptr<tRow> tmpP(new tRow);
>
> for (size_t i=0;i<10;i++)
> {
> /*note for multiset we can
> insert the same thing many times */
> mytb.insert(tmpP);
> }
>
>
> randrow rw;
> generate(mytb.begin(),mytb.end(),rw);
>
>
> // make an archive
> {
> ofstream ofs("xyz.sxml");
> assert(ofs.good());
> boost::archive::xml_oarchive oa(ofs);
> oa<<BOOST_SERIALIZATION_NVP(mytb);
> }//scope to close file
>
> cout<<"finished serializing, now lets try to read back"<<endl;
> mytb.clear();
>
> {
> // open the archive
> std::ifstream ifs("xyz.sxml");
> assert(ifs.good());
> boost::archive::xml_iarchive ia(ifs);
>
> // restore the schedule from the archive
> ia >> BOOST_SERIALIZATION_NVP(mytb);
> }
>
> cout<<"after restore tb size is: "<<mytb.size()<<endl;
>
> }
>
>
> -------------- prog end -------------------
>
> -- archive xyz.sxml XML start ----
>
>
> <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
> <!DOCTYPE boost_serialization>
> <boost_serialization signature="serialization::archive" version="5">
> <mytb class_id="0" tracking_level="0" version="0">
> <a>41</a>
> <b>41</b>
> <a>67</a>
> <b>67</b>
> <a>34</a>
> <b>34</b>
> <a>0</a>
> <b>0</b>
> <a>69</a>
> <b>69</b>
> <a>24</a>
> <b>24</b>
> <a>78</a>
> <b>78</b>
> <a>58</a>
> <b>58</b>
> <a>62</a>
> <b>62</b>
> <a>64</a>
> <b>64</b>
> </mytb>
> </boost_serialization>
>
>
>
> --- archive XML end ----
> --
> V S P
> toreason_at_[hidden]
>
> --
> http://www.fastmail.fm - Access all of your messages and folders
> wherever you are
>

-- 
  V S P
  toreason_at_[hidden]
-- 
http://www.fastmail.fm - Or how I learned to stop worrying and
                          love email again

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