[/
 / 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)
 /]

[library Boost.PropertyTree
    [quickbook 1.4]
    [copyright 2008 Marcin Kalicinski]
    [purpose Property Tree library]
    [license
        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])
    ]
    [authors [Kalicinski, Marcin]]
    [id property_tree]
    [dirname property_tree]
    [category container]
    [category template]
]

[/ Tried to use templates here but got errors expanding them in [classref ...] etc.]
[/ types]
[def __ptree__ [classref boost::property_tree::ptree ptree]]
[def __ptree_value_type__ [classref boost::property_tree::basic_ptree::value_type value_type]]
[def __ptree_data_type__ [classref boost::property_tree::basic_ptree::data_type data_type]]
[def __ptree_iterator__ [classref boost::property_tree::basic_ptree::iterator iterator]]
[def __ptree_const_iterator__ [classref boost::property_tree::basic_ptree::const_iterator const_iterator]]
[def __path__ [classref boost::property_tree::path path]]
[def __ptree_error__ [classref boost::property_tree::ptree_error ptree_error]]
[def __ptree_bad_data__ [classref boost::property_tree::ptree_bad_data ptree_bad_data]]
[def __ptree_bad_path__ [classref boost::property_tree::ptree_bad_path ptree_bad_path]]

[/ members]
[def __ptree_insert__ [memberref boost::property_tree::basic_ptree::insert insert]]
[def __ptree_push_back__ [memberref boost::property_tree::basic_ptree::push_back push_back]]
[def __ptree_find__ [memberref boost::property_tree::basic_ptree::find find]]
[def __ptree_erase__ [memberref boost::property_tree::basic_ptree::erase erase]]
[def __ptree_find__ [memberref boost::property_tree::basic_ptree::find find]]
[def __ptree_data__ [memberref boost::property_tree::basic_ptree::data data]]
[def __ptree_push_front__ [memberref boost::property_tree::basic_ptree::push_front push_front]]
[def __ptree_sort__ [memberref boost::property_tree::basic_ptree::sort sort]]
[def __ptree_get__ [memberref boost::property_tree::basic_ptree::get get]]
[/ XXX: Don't know how to specify overloads]
[def __ptree_get_defaulted__ [memberref boost::property_tree::basic_ptree::get get]]
[def __ptree_get_optional__ [memberref boost::property_tree::basic_ptree::get_optional get_optional]]
[def __ptree_get_value__ [memberref boost::property_tree::basic_ptree::get_value get_value]]
[/ XXX: Don't know how to specify overloads]
[def __ptree_get_value_defaulted__ [memberref boost::property_tree::basic_ptree::get_value get_value]]
[def __ptree_get_value_optional__ [memberref boost::property_tree::basic_ptree::get_value_optional get_value_optional]]
[def __ptree_get_child__ [memberref boost::property_tree::basic_ptree::get_child get_child]]
[def __ptree_put__ [memberref boost::property_tree::basic_ptree::put put]]
[def __ptree_put__ [memberref boost::property_tree::basic_ptree::add add]]
[def __ptree_put_value__ [memberref boost::property_tree::basic_ptree::put_value put_value]]

[/ free-functions]
[def __read_xml__ [funcref boost::property_tree::xml_parser::read_xml read_xml]]
[def __write_xml__ [funcref boost::property_tree::xml_parser::write_xml write_xml]]

[include intro.qbk]

[include tutorial.qbk]

[include container.qbk]

[include synopsis.qbk]

[include parsers.qbk]

[include accessing.qbk]

[section Appendices]
[heading Compatibility]
Property tree uses partial class template specialization. There has been no
attempt to work around lack of support for this. The library will therefore
most probably not work with Visual C++ 7.0 or earlier, or gcc 2.x.

Property tree has been tested (regressions successfully compiled and run)
with the following compilers:

* Visual C++ 8.0
* gcc 3.4.2 (MinGW)
* gcc 3.3.5 (Linux)
* gcc 3.4.4 (Linux)
* gcc 4.3.3 (Linux)
* Intel C++ 9.0 (Linux)

[heading Rationale]
# [*Why are there 3 versions of __ptree_get__? Couldn't there be just one?]
The three versions reflect experience gathered during several of years of using
property tree in several different applications. During that time I tried hard
to come up with one, proper form of the get function, and failed. I know of
these three basic patterns of usage:

 * ['Just get the data and I do not care if it cannot be done.]  This is used
   when the programmer is fairly sure that data exists. Or in homework
   assignments. Or when tomorrow is final deadline for your project.
 * ['Get the data and revert to default value if it cannot be done.]  Used when
   you want to allow omitting the key in question. Implemented by some similar
   tools (windows INI file access functions).
 * ['Get the data, but I care more whether you succeeded than I do for the data
   itself.] Used when you want to vary control flow depending on get
   success/failure. Or to check for presence of a key.

[heading Future Development]
* More parsers:  YAML, environment strings.
* More robust XML parser.
* Mathematical relations:  ptree difference, union, intersection.
  Useful for finding configuration file changes etc.

[endsect] [/ Appendices]

[xinclude autodoc.xml]
