[/
 / Copyright (c) 2008 Marcin Kalicinski (kalita <at> poczta dot onet dot pl)
 / Copyright (c) 2009 Sebastian Redl (sebastian dot redl <at> getdesigned dot at)
 /
 / Distributed under the Boost Software License, Version 1.0. (See accompanying
 / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 /]
[section:synopsis Property Tree Synopsis]
[def __basic_ptree__ [classref boost::property_tree::basic_ptree basic_ptree]]
[def __ptree__ [classref boost::property_tree::ptree ptree]]
[def __wptree__ [classref boost::property_tree::wptree wptree]]
[def __iptree__ [classref boost::property_tree::iptree iptree]]
[def __wiptree__ [classref boost::property_tree::wiptree wiptree]]
[/ basic_ptree members]
[def __ptree_get__ [memberref boost::property_tree::basic_ptree::get get]]
[def __ptree_put__ [memberref boost::property_tree::basic_ptree::put put]]
[def __ptree_get_value__ [memberref boost::property_tree::basic_ptree::get_value get_value]]
[def __ptree_put_value__ [memberref boost::property_tree::basic_ptree::put_value put_value]]
[def __ptree_get_child__ [memberref boost::property_tree::basic_ptree::get_child get_child]]
[def __ptree_put_child__ [memberref boost::property_tree::basic_ptree::put_child put_child]]
[def __ptree_data__ [memberref boost::property_tree::basic_ptree::data data]]
The central component of the library is the __basic_ptree__ class template.
Instances of this class are property trees. It is parametrized on key and data
type, and key comparison policy; __ptree__, __wptree__, __iptree__ and
__wiptree__ are typedefs of __basic_ptree__ using predefined combinations of
template parameters.  Property tree is basically a somewhat simplified standard
container (the closest being std::list), plus a bunch of extra member
functions. These functions allow easy and effective access to the data stored
in property tree. They are various variants of __ptree_get__, __ptree_put__,
__ptree_get_value__, __ptree_put_value__, __ptree_get_child__,
__ptree_put_child__. Additionally, there is __ptree_data__ function to access
node data directly.

See the [classref boost::property_tree::basic_ptree basic_ptree class template synopsis] for more information.
[endsect]
