]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | // ---------------------------------------------------------------------------- |
2 | // Copyright (C) 2002-2006 Marcin Kalicinski | |
3 | // Copyright (C) 2009 Sebastian Redl | |
4 | // | |
5 | // Distributed under the Boost Software License, Version 1.0. | |
6 | // (See accompanying file LICENSE_1_0.txt or copy at | |
7 | // http://www.boost.org/LICENSE_1_0.txt) | |
8 | // | |
9 | // For more information, see www.boost.org | |
10 | // ---------------------------------------------------------------------------- | |
11 | #ifndef BOOST_PROPERTY_TREE_PTREE_FWD_HPP_INCLUDED | |
12 | #define BOOST_PROPERTY_TREE_PTREE_FWD_HPP_INCLUDED | |
13 | ||
14 | #include <boost/config.hpp> | |
15 | #include <boost/optional/optional_fwd.hpp> | |
16 | #include <boost/throw_exception.hpp> | |
17 | #include <functional> // for std::less | |
18 | #include <memory> // for std::allocator | |
19 | #include <string> | |
20 | ||
21 | namespace boost { namespace property_tree | |
22 | { | |
23 | namespace detail { | |
24 | template <typename T> struct less_nocase; | |
25 | } | |
26 | ||
27 | // Classes | |
28 | ||
29 | template < class Key, class Data, class KeyCompare = std::less<Key> > | |
30 | class basic_ptree; | |
31 | ||
32 | template <typename T> | |
33 | struct id_translator; | |
34 | ||
35 | template <typename String, typename Translator> | |
36 | class string_path; | |
37 | ||
38 | // Texas-style concepts for documentation only. | |
39 | #if 0 | |
40 | concept PropertyTreePath<class Path> { | |
41 | // The key type for which this path works. | |
42 | typename key_type; | |
43 | // Return the key that the first segment of the path names. | |
44 | // Split the head off the state. | |
45 | key_type Path::reduce(); | |
46 | ||
47 | // Return true if the path is empty. | |
48 | bool Path::empty() const; | |
49 | ||
50 | // Return true if the path contains a single element. | |
51 | bool Path::single() const; | |
52 | ||
53 | // Dump as a std::string, for exception messages. | |
54 | std::string Path::dump() const; | |
55 | } | |
56 | concept PropertyTreeKey<class Key> { | |
57 | PropertyTreePath path; | |
58 | requires SameType<Key, PropertyTreePath<path>::key_type>; | |
59 | } | |
60 | concept PropertyTreeTranslator<class Tr> { | |
61 | typename internal_type; | |
62 | typename external_type; | |
63 | ||
64 | boost::optional<external_type> Tr::get_value(internal_type); | |
65 | boost::optional<internal_type> Tr::put_value(external_type); | |
66 | } | |
67 | #endif | |
68 | /// If you want to use a custom key type, specialize this struct for it | |
69 | /// and give it a 'type' typedef that specifies your path type. The path | |
70 | /// type must conform to the Path concept described in the documentation. | |
71 | /// This is already specialized for std::basic_string. | |
72 | template <typename Key> | |
73 | struct path_of; | |
74 | ||
75 | /// Specialize this struct to specify a default translator between the data | |
76 | /// in a tree whose data_type is Internal, and the external data_type | |
77 | /// specified in a get_value, get, put_value or put operation. | |
78 | /// This is already specialized for Internal being std::basic_string. | |
79 | template <typename Internal, typename External> | |
80 | struct translator_between; | |
81 | ||
82 | class ptree_error; | |
83 | class ptree_bad_data; | |
84 | class ptree_bad_path; | |
85 | ||
86 | // Typedefs | |
87 | ||
88 | /** Implements a path using a std::string as the key. */ | |
89 | typedef string_path<std::string, id_translator<std::string> > path; | |
90 | ||
91 | /** | |
92 | * A property tree with std::string for key and data, and default | |
93 | * comparison. | |
94 | */ | |
95 | typedef basic_ptree<std::string, std::string> ptree; | |
96 | ||
97 | /** | |
98 | * A property tree with std::string for key and data, and case-insensitive | |
99 | * comparison. | |
100 | */ | |
101 | typedef basic_ptree<std::string, std::string, | |
102 | detail::less_nocase<std::string> > | |
103 | iptree; | |
104 | ||
105 | #ifndef BOOST_NO_STD_WSTRING | |
106 | /** Implements a path using a std::wstring as the key. */ | |
107 | typedef string_path<std::wstring, id_translator<std::wstring> > wpath; | |
108 | ||
109 | /** | |
110 | * A property tree with std::wstring for key and data, and default | |
111 | * comparison. | |
112 | * @note The type only exists if the platform supports @c wchar_t. | |
113 | */ | |
114 | typedef basic_ptree<std::wstring, std::wstring> wptree; | |
115 | ||
116 | /** | |
117 | * A property tree with std::wstring for key and data, and case-insensitive | |
118 | * comparison. | |
119 | * @note The type only exists if the platform supports @c wchar_t. | |
120 | */ | |
121 | typedef basic_ptree<std::wstring, std::wstring, | |
122 | detail::less_nocase<std::wstring> > | |
123 | wiptree; | |
124 | #endif | |
125 | ||
126 | // Free functions | |
127 | ||
128 | /** | |
129 | * Swap two property tree instances. | |
130 | */ | |
131 | template<class K, class D, class C> | |
132 | void swap(basic_ptree<K, D, C> &pt1, | |
133 | basic_ptree<K, D, C> &pt2); | |
134 | ||
135 | } } | |
136 | ||
137 | ||
138 | #if !defined(BOOST_PROPERTY_TREE_DOXYGEN_INVOKED) | |
139 | // Throwing macro to avoid no return warnings portably | |
140 | # define BOOST_PROPERTY_TREE_THROW(e) BOOST_THROW_EXCEPTION(e) | |
141 | #endif | |
142 | ||
143 | #endif |