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 |