144 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			144 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| // ----------------------------------------------------------------------------
 | |
| // 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
 | 
