Boost logo

Boost Users :

From: Jeff Flinn (TriumphSprint2000_at_[hidden])
Date: 2007-08-22 11:14:37


Frank Birbacher wrote:
> Hi!
>
> Robert Ramey schrieb:
>> The real easy way is just to use a binary_object which saves/loads a
>> specified number of bytes.
>> so the above would look like:
>>
>> void write_to_cbuffer(char* buf_p, size_t* buf_sz_p) { // note only one *
>> std::ostringstream oss;
>> boost::archive::text_oarchive oa(oss);
>> oa << binary_object(bf_sz_p, mc);
>> }
>> void read_from_cbuffer(const char* buf, const size_t buf_sz) {
>> std::istringstream iss(buf_str);
>> boost::archive::text_iarchive ia(iss);
>> ia >> binary_object(buf_sz, buf)
>> }
>
> You got this one mixed up. The char array is not something to serailize
> but it is the storage to searialize to. The "read_from_cbuffer" function
> does *read* the cbuffer and construct a my_class instance out of it by
> using serialization. The "write_to_cbuffer" serializes a my_class
> instance an stores the result in the cbuffer.
>
> I can think of using the old strstream class to read from the buffer or
> take something from Boost.IOStreams. And writing could be faster if you
> use a std::deque wrapped with IOStreams and later on std::copy this into
> a char array (instead of memcpy). A deque has usually better performance
> on push_back than a vector or string, I guess. But then I don't know the
> internals of a stringstream.

I've used boost::IOStreams to do exactly this, for both over the wire
transmission and using the Windows clipboard for cut/paste drag/drop
operations.

Jeff Flinn


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