[/
 / 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, but will usually be std::string.

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]
