$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Gennadiy Rozental (gennadiy.rozental_at_[hidden])
Date: 2006-04-21 22:33:32
"Marcin Kalicinski" <kalita_at_[hidden]> wrote in message
news:e2bjmg$i92$1_at_sea.gmane.org...
>>> The biggest virtue of property_tree is easy to use interface. If we try
>>> to make generic tree of it, it will be compromised. This should not
>>> happen, because people will then prefer to use Expat or MSXML instead.
>>
>> Could you clarify (with details) how is it easier then alternatives?
>
> I assume that by alternatives you mean above mentioned Expat and MSXML?
No, of course. I mean why do I need this half baked property_tree as another
data structure?
> First, property_tree supports more formats, not just XML.
Property tree supports nothing in itself. It's just a data structure. You
have parsers that produce property tree out of different sources. But you
mat as well produce maps or something else. Here for example All that I need
to do to "implement" similar functionality as your property tree:
// Data structure itself
template<typename ValueType,typename KeyType>
struct Node;
template<typename ValueType,typename KeyType>
struct ptree_gen {
typedef std::pair<KeyType,Node<ValueType,KeyType> > mi_value;
typedef multi_index<mi_value, indexed_by<...> > type;
};
template<typename ValueType,typename KeyType>
struct Node {
ValueType v;
ptree_gen<ValueType,KeyType>::type children;
};
// serilization support
template<class Archive,typename ValueType,typename KeyType>
void serialize(Archive & ar, Node<ValueType,KeyType>& n, const unsigned int
version)
{
ar & n.v;
ar & n.children;
}
// some access methods
template<typename ValueType,typename KeyType>
ValueType const&
get( string const& keys, ptree_gen<ValueType,KeyType>::type const& src )
{
std::pait<string,string> sk = split( keys, "." );
Node const& N = src.find( sk.first );
return sk.second.empty() ? N.v : get( sk.second, N.children );
}
Use it like this:
ptree_gen<string,string>::type PT;
boost::archive::text_iarchive ia( std::ifstream ifs("filename") );
ia >> PT;
string value = get( "a.b.c.d", PT );
Now tell me how property_tree interface is easier? And what is the value in
50k of Code you need to implement this data tructure.
Gennadiy