$include_dir="/home/hyper-archives/boost-users/include"; include("$include_dir/msg-header.inc") ?>
From: Dominick Layfield (dom.layfield_at_[hidden])
Date: 2007-08-21 16:15:04
>> > Obviously, I can just switch to a different serialization library
>> > (e.g. s11n).
> 
> I believe that library also has serialization of pointers
Darn it!  Foiled at every turn!  :-)
If that is the case, maybe you might consider updating/clarifying the "Overview 
-> Other implementations" section of the docs.  There you imply that s11n 
doesn't do this.  (Maybe it didn't back when you wrote the docs.)
>> But as much as possible, I would like to stick with
>> > whatever is most "standard". And as part of the Boost family, I'm
>> > guessing that boost::serialization is top dog here.  Would that be
>> >  right?  Is this library included in any of the proposed C++
>> > standards (TR2, C++0x)?
> 
> This serialization library will never be part of any C++ standard.
Oh.  That's disappointing.  Why not?  Too much bureaucracy involved?
> Because normally one doesn't want to change data while its being saved
> one will typically have something like the following in his program.
> 
> FileSave(const MyData & md){
>     // create archive
>     oa << md; // no need for "const cast" because md is already "const"
>     ...
> }
Okay.  That makes a lot of sense.
Let me ask another newbie question, about how to get data in and out of an 
archive.  I have to work with legacy C-based code that delivers/accepts data in 
a char* buffer.  My code to serialize data into and out of this buffer is both 
convoluted and inefficient.   It looks something like this:
my_class mc;
void read_from_cbuffer(const char* buf, const size_t buf_sz) {
     std::string buf_str(buf, buf_sz);
     std::istringstream iss(buf_str);
     boost::archive::text_iarchive ia(iss);
     ia >> mc;
}
void write_to_cbuffer(char** buf_p, size_t* buf_sz_p) {
     std::ostringstream oss;
     boost::archive::text_oarchive oa(oss);
     oa << mc;
     *buf_p = new char[oss.str().size()];
     memcpy(*buf_p, oss.str().c_str(), oss.str().size());
     *buf_sz_p = oss.str().size();
}
Any suggestions about how this can be done better?
Thanks,
-- Dominick