Mercurial > hg > vamp-build-and-test
comparison DEPENDENCIES/generic/include/boost/property_tree/info_parser.hpp @ 16:2665513ce2d3
Add boost headers
author | Chris Cannam |
---|---|
date | Tue, 05 Aug 2014 11:11:38 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
15:663ca0da4350 | 16:2665513ce2d3 |
---|---|
1 // ---------------------------------------------------------------------------- | |
2 // Copyright (C) 2002-2006 Marcin Kalicinski | |
3 // | |
4 // Distributed under the Boost Software License, Version 1.0. | |
5 // (See accompanying file LICENSE_1_0.txt or copy at | |
6 // http://www.boost.org/LICENSE_1_0.txt) | |
7 // | |
8 // For more information, see www.boost.org | |
9 // ---------------------------------------------------------------------------- | |
10 #ifndef BOOST_PROPERTY_TREE_INFO_PARSER_HPP_INCLUDED | |
11 #define BOOST_PROPERTY_TREE_INFO_PARSER_HPP_INCLUDED | |
12 | |
13 #include <boost/property_tree/ptree.hpp> | |
14 #include <boost/property_tree/detail/info_parser_error.hpp> | |
15 #include <boost/property_tree/detail/info_parser_writer_settings.hpp> | |
16 #include <boost/property_tree/detail/info_parser_read.hpp> | |
17 #include <boost/property_tree/detail/info_parser_write.hpp> | |
18 #include <istream> | |
19 | |
20 namespace boost { namespace property_tree { namespace info_parser | |
21 { | |
22 | |
23 /** | |
24 * Read INFO from a the given stream and translate it to a property tree. | |
25 * @note Replaces the existing contents. Strong exception guarantee. | |
26 * @throw info_parser_error If the stream cannot be read, doesn't contain | |
27 * valid INFO, or a conversion fails. | |
28 */ | |
29 template<class Ptree, class Ch> | |
30 void read_info(std::basic_istream<Ch> &stream, Ptree &pt) | |
31 { | |
32 Ptree local; | |
33 read_info_internal(stream, local, std::string(), 0); | |
34 pt.swap(local); | |
35 } | |
36 | |
37 /** | |
38 * Read INFO from a the given stream and translate it to a property tree. | |
39 * @note Replaces the existing contents. Strong exception guarantee. | |
40 * @param default_ptree If parsing fails, pt is set to a copy of this tree. | |
41 */ | |
42 template<class Ptree, class Ch> | |
43 void read_info(std::basic_istream<Ch> &stream, Ptree &pt, | |
44 const Ptree &default_ptree) | |
45 { | |
46 try { | |
47 read_info(stream, pt); | |
48 } catch(file_parser_error &) { | |
49 pt = default_ptree; | |
50 } | |
51 } | |
52 | |
53 /** | |
54 * Read INFO from a the given file and translate it to a property tree. The | |
55 * tree's key type must be a string type, i.e. it must have a nested | |
56 * value_type typedef that is a valid parameter for basic_ifstream. | |
57 * @note Replaces the existing contents. Strong exception guarantee. | |
58 * @throw info_parser_error If the file cannot be read, doesn't contain | |
59 * valid INFO, or a conversion fails. | |
60 */ | |
61 template<class Ptree> | |
62 void read_info(const std::string &filename, Ptree &pt, | |
63 const std::locale &loc = std::locale()) | |
64 { | |
65 std::basic_ifstream<typename Ptree::key_type::value_type> | |
66 stream(filename.c_str()); | |
67 if (!stream) { | |
68 BOOST_PROPERTY_TREE_THROW(info_parser_error( | |
69 "cannot open file for reading", filename, 0)); | |
70 } | |
71 stream.imbue(loc); | |
72 Ptree local; | |
73 read_info_internal(stream, local, filename, 0); | |
74 pt.swap(local); | |
75 } | |
76 | |
77 /** | |
78 * Read INFO from a the given file and translate it to a property tree. The | |
79 * tree's key type must be a string type, i.e. it must have a nested | |
80 * value_type typedef that is a valid parameter for basic_ifstream. | |
81 * @note Replaces the existing contents. Strong exception guarantee. | |
82 * @param default_ptree If parsing fails, pt is set to a copy of this tree. | |
83 */ | |
84 template<class Ptree> | |
85 void read_info(const std::string &filename, | |
86 Ptree &pt, | |
87 const Ptree &default_ptree, | |
88 const std::locale &loc = std::locale()) | |
89 { | |
90 try { | |
91 read_info(filename, pt, loc); | |
92 } catch(file_parser_error &) { | |
93 pt = default_ptree; | |
94 } | |
95 } | |
96 | |
97 /** | |
98 * Writes a tree to the stream in INFO format. | |
99 * @throw info_parser_error If the stream cannot be written to, or a | |
100 * conversion fails. | |
101 * @param settings The settings to use when writing the INFO data. | |
102 */ | |
103 template<class Ptree, class Ch> | |
104 void write_info(std::basic_ostream<Ch> &stream, | |
105 const Ptree &pt, | |
106 const info_writer_settings<Ch> &settings = | |
107 info_writer_settings<Ch>()) | |
108 { | |
109 write_info_internal(stream, pt, std::string(), settings); | |
110 } | |
111 | |
112 /** | |
113 * Writes a tree to the file in INFO format. The tree's key type must be a | |
114 * string type, i.e. it must have a nested value_type typedef that is a | |
115 * valid parameter for basic_ofstream. | |
116 * @throw info_parser_error If the file cannot be written to, or a | |
117 * conversion fails. | |
118 * @param settings The settings to use when writing the INFO data. | |
119 */ | |
120 template<class Ptree> | |
121 void write_info(const std::string &filename, | |
122 const Ptree &pt, | |
123 const std::locale &loc = std::locale(), | |
124 const info_writer_settings< | |
125 typename Ptree::key_type::value_type | |
126 > &settings = | |
127 info_writer_make_settings< | |
128 typename Ptree::key_type::value_type>()) | |
129 { | |
130 std::basic_ofstream<typename Ptree::key_type::value_type> | |
131 stream(filename.c_str()); | |
132 if (!stream) { | |
133 BOOST_PROPERTY_TREE_THROW(info_parser_error( | |
134 "cannot open file for writing", filename, 0)); | |
135 } | |
136 stream.imbue(loc); | |
137 write_info_internal(stream, pt, filename, settings); | |
138 } | |
139 | |
140 } } } | |
141 | |
142 namespace boost { namespace property_tree | |
143 { | |
144 using info_parser::info_parser_error; | |
145 using info_parser::read_info; | |
146 using info_parser::write_info; | |
147 using info_parser::info_writer_settings; | |
148 using info_parser::info_writer_make_settings; | |
149 } } | |
150 | |
151 #endif |