$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Scott Woods (scott.suzuki_at_[hidden])
Date: 2008-05-25 19:26:59
Hi Brian,
Apologies to other list members. I am experiencing very odd mail service
that
means I am not receiving messages on the Boost list sent by myself. Here's a
brief response to Brian while I try to figure things out.
----- Original Message -----
From: "brass goowy" <brass_at_[hidden]>
To: <boost_at_[hidden]>
Sent: Monday, May 26, 2008 10:43 AM
Subject: Re: [boost]Question regarding logging, persistence,
threadcommunication, network messaging and async frameworks
> Scott Woods writes:
>>Hi,
>>Is there a place in Boost for a library that tackles all of the above? I
>>believe the realistic
>>answer is no but I would be happy to be proven wrong.
>>Work in the different areas mentioned in the subject line recently
>>collapsed
>>into a single
>>underlying technique. Given the example UDT below;
>>struct person
>>{
>>std::string name;
>>std::vector<unsigned> score;
>>std::set<string> team;
>>};
<snip>
>>actually this is precisely the most compelling thing about the library -
>>it
>>reduces code
>>that traditionally can be quite difficult into fragments such as those
>>shown.
>
> Shalom
>
>>From what you've shown it looks like the duplication of data members
> in serialization methods is not needed. Some have been struggling to
> eliminate the need for that duplication --
> http://preview.tinyurl.com/6kpx8t .
> Maybe more details about codec_object<> would be helpful.
I'm not so sure about that ;-) but in good faith;
struct object_stack
{
typedef file_device device_type;
typedef transfer_block<device_type> transfer_type;
typedef binary_run_codec<transfer_type> codec_type;
};
// Declaration of the left side (the device+transfer+object)
// of the transfer.
template<typename V,typename S=object_stack>
struct codec_object
{
typedef V value_type;
typedef S::codec_type codec_type;
type_hash type;
std::string base_name;
std::string name_to_open;
codec_type codec;
void
decorate( const std::string &s )
{
name_to_open = base_name = s;
name_to_open += '.';
name_to_open += codec.codec_tag();
}
codec_object() :
type( type_of<value_type>::hash() )
{}
codec_object( const std::string &k ) :
type( type_of<value_type>::hash() )
{
decorate( k );
}
void
change_to( const std::string &k )
{
decorate( k );
}
};
I looked through the thread at "for each member of a sturcture/class ?" and
not
sure how to respond; the issue being dealt with in that thread (while
interesting) is
subordinate to my goals.
I do not have any magic technique for avoiding duplication of member
information. Any C++ type that wishes to play within my library
must define the following two global operators;
inline network_variant &
operator<<( network_variant &nv, const person &p )
{
network_memory::iterator i = network_output<3>()( nv );
*i++ << p.name;
*i++ << p.score;
*i++ << p.team;
return nv;
}
inline person &
operator>>( network_variant &nv, person &p )
{
network_memory::iterator i = network_input<3>()( nv );
*i++ >> p.name;
*i++ >> p.score;
*i++ >> p.team;
return p;
}
My library for persistence, thread communication and network messaging
deals with the movement and representation of "network_variants", i.e.
by providing transform functions as above, the type acquires persistence,
transfer-between-threads and transfer-across-networks capabilities, in
one hit.
There is more to say in this area (type declaration) but I'm not sure that
either
of us was actually headed there.
Scott.