| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 | // ----------------------------------------------------------------------------// Copyright (C) 2002-2006 Marcin Kalicinski// Copyright (C) 2009 Sebastian Redl//// 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)//// For more information, see www.boost.org// ----------------------------------------------------------------------------#ifndef BOOST_PROPERTY_TREE_PTREE_FWD_HPP_INCLUDED#define BOOST_PROPERTY_TREE_PTREE_FWD_HPP_INCLUDED#include <boost/config.hpp>#include <boost/optional/optional_fwd.hpp>#include <boost/throw_exception.hpp>#include <functional>           // for std::less#include <memory>               // for std::allocator#include <string>namespace boost { namespace property_tree{    namespace detail {        template <typename T> struct less_nocase;    }    // Classes    template < class Key, class Data, class KeyCompare = std::less<Key> >    class basic_ptree;    template <typename T>    struct id_translator;    template <typename String, typename Translator>    class string_path;    // Texas-style concepts for documentation only.#if 0    concept PropertyTreePath<class Path> {        // The key type for which this path works.        typename key_type;        // Return the key that the first segment of the path names.        // Split the head off the state.        key_type Path::reduce();        // Return true if the path is empty.        bool Path::empty() const;        // Return true if the path contains a single element.        bool Path::single() const;        // Dump as a std::string, for exception messages.        std::string Path::dump() const;    }    concept PropertyTreeKey<class Key> {        PropertyTreePath path;        requires SameType<Key, PropertyTreePath<path>::key_type>;    }    concept PropertyTreeTranslator<class Tr> {        typename internal_type;        typename external_type;        boost::optional<external_type> Tr::get_value(internal_type);        boost::optional<internal_type> Tr::put_value(external_type);    }#endif    /// If you want to use a custom key type, specialize this struct for it    /// and give it a 'type' typedef that specifies your path type. The path    /// type must conform to the Path concept described in the documentation.    /// This is already specialized for std::basic_string.    template <typename Key>    struct path_of;    /// Specialize this struct to specify a default translator between the data    /// in a tree whose data_type is Internal, and the external data_type    /// specified in a get_value, get, put_value or put operation.    /// This is already specialized for Internal being std::basic_string.    template <typename Internal, typename External>    struct translator_between;    class ptree_error;    class ptree_bad_data;    class ptree_bad_path;    // Typedefs    /** Implements a path using a std::string as the key. */    typedef string_path<std::string, id_translator<std::string> > path;    /**     * A property tree with std::string for key and data, and default     * comparison.     */    typedef basic_ptree<std::string, std::string> ptree;    /**     * A property tree with std::string for key and data, and case-insensitive     * comparison.     */    typedef basic_ptree<std::string, std::string,                        detail::less_nocase<std::string> >        iptree;#ifndef BOOST_NO_STD_WSTRING    /** Implements a path using a std::wstring as the key. */    typedef string_path<std::wstring, id_translator<std::wstring> > wpath;    /**     * A property tree with std::wstring for key and data, and default     * comparison.     * @note The type only exists if the platform supports @c wchar_t.     */    typedef basic_ptree<std::wstring, std::wstring> wptree;    /**     * A property tree with std::wstring for key and data, and case-insensitive     * comparison.     * @note The type only exists if the platform supports @c wchar_t.     */    typedef basic_ptree<std::wstring, std::wstring,                        detail::less_nocase<std::wstring> >        wiptree;#endif    // Free functions    /**     * Swap two property tree instances.     */    template<class K, class D, class C>    void swap(basic_ptree<K, D, C> &pt1,              basic_ptree<K, D, C> &pt2);} }#if !defined(BOOST_PROPERTY_TREE_DOXYGEN_INVOKED)    // Throwing macro to avoid no return warnings portably#   define BOOST_PROPERTY_TREE_THROW(e) BOOST_THROW_EXCEPTION(e)#endif#endif
 |