
"Marcin Kalicinski" <kalita@poczta.onet.pl> wrote in message news:e2bjmg$i92$1@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