[/
 / 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)
 /]
[template ptree2codeImage[] [$images/ptree2code.png]]
[section:intro What is Property Tree?]
The Property Tree library provides a data structure that stores an arbitrarily
deeply nested tree of values, indexed at each level by some key. Each node of
the tree stores its own value, plus an ordered list of its subnodes and their
keys. The tree allows easy access to any of its nodes by means of a path, which
is a concatenation of multiple keys.

In addition, the library provides parsers and generators for a number of data
formats that can be represented by such a tree, including XML, INI, and JSON.

Property trees are versatile data structures, but are particularly suited for
holding configuration data. The tree provides its own, tree-specific interface,
and each node is also an STL-compatible Sequence for its child nodes.

Conceptually, then, a node can be thought of as the following structure:

   struct ptree
   {
      data_type data;                         // data associated with the node
      list< pair<key_type, ptree> > children; // ordered list of named children
   };

Both key_type and data_type are configurable to some extent, but will usually be
std::string or std::wstring, and the parsers only work with this kind of tree.

Many software projects develop a similar tool at some point of their lifetime,
and property tree originated the same way.  We hope the library can save many
from reinventing the wheel.
[endsect] [/intro]
