1*2e9d4914SAndroid Build Coastguard Worker /* ----------------------------------------------------------------------------
2*2e9d4914SAndroid Build Coastguard Worker libconfig - A library for processing structured configuration files
3*2e9d4914SAndroid Build Coastguard Worker Copyright (C) 2005-2018 Mark A Lindner
4*2e9d4914SAndroid Build Coastguard Worker
5*2e9d4914SAndroid Build Coastguard Worker This file is part of libconfig.
6*2e9d4914SAndroid Build Coastguard Worker
7*2e9d4914SAndroid Build Coastguard Worker This library is free software; you can redistribute it and/or
8*2e9d4914SAndroid Build Coastguard Worker modify it under the terms of the GNU Lesser General Public License
9*2e9d4914SAndroid Build Coastguard Worker as published by the Free Software Foundation; either version 2.1 of
10*2e9d4914SAndroid Build Coastguard Worker the License, or (at your option) any later version.
11*2e9d4914SAndroid Build Coastguard Worker
12*2e9d4914SAndroid Build Coastguard Worker This library is distributed in the hope that it will be useful, but
13*2e9d4914SAndroid Build Coastguard Worker WITHOUT ANY WARRANTY; without even the implied warranty of
14*2e9d4914SAndroid Build Coastguard Worker MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15*2e9d4914SAndroid Build Coastguard Worker Lesser General Public License for more details.
16*2e9d4914SAndroid Build Coastguard Worker
17*2e9d4914SAndroid Build Coastguard Worker You should have received a copy of the GNU Library General Public
18*2e9d4914SAndroid Build Coastguard Worker License along with this library; if not, see
19*2e9d4914SAndroid Build Coastguard Worker <http://www.gnu.org/licenses/>.
20*2e9d4914SAndroid Build Coastguard Worker ----------------------------------------------------------------------------
21*2e9d4914SAndroid Build Coastguard Worker */
22*2e9d4914SAndroid Build Coastguard Worker
23*2e9d4914SAndroid Build Coastguard Worker #include "libconfig.h++"
24*2e9d4914SAndroid Build Coastguard Worker
25*2e9d4914SAndroid Build Coastguard Worker #ifdef _MSC_VER
26*2e9d4914SAndroid Build Coastguard Worker #pragma warning (disable: 4996)
27*2e9d4914SAndroid Build Coastguard Worker #endif
28*2e9d4914SAndroid Build Coastguard Worker
29*2e9d4914SAndroid Build Coastguard Worker #include "wincompat.h"
30*2e9d4914SAndroid Build Coastguard Worker #include "libconfig.h"
31*2e9d4914SAndroid Build Coastguard Worker
32*2e9d4914SAndroid Build Coastguard Worker #include <cstring>
33*2e9d4914SAndroid Build Coastguard Worker #include <cstdlib>
34*2e9d4914SAndroid Build Coastguard Worker #include <sstream>
35*2e9d4914SAndroid Build Coastguard Worker
36*2e9d4914SAndroid Build Coastguard Worker namespace libconfig {
37*2e9d4914SAndroid Build Coastguard Worker
38*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
39*2e9d4914SAndroid Build Coastguard Worker
__include_func(config_t * config,const char * include_dir,const char * path,const char ** error)40*2e9d4914SAndroid Build Coastguard Worker static const char **__include_func(config_t *config,
41*2e9d4914SAndroid Build Coastguard Worker const char *include_dir,
42*2e9d4914SAndroid Build Coastguard Worker const char *path,
43*2e9d4914SAndroid Build Coastguard Worker const char **error)
44*2e9d4914SAndroid Build Coastguard Worker {
45*2e9d4914SAndroid Build Coastguard Worker Config *self = reinterpret_cast<Config *>(config_get_hook(config));
46*2e9d4914SAndroid Build Coastguard Worker return(self->evaluateIncludePath(path, error));
47*2e9d4914SAndroid Build Coastguard Worker }
48*2e9d4914SAndroid Build Coastguard Worker
49*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
50*2e9d4914SAndroid Build Coastguard Worker
ParseException(const char * file,int line,const char * error)51*2e9d4914SAndroid Build Coastguard Worker ParseException::ParseException(const char *file, int line, const char *error)
52*2e9d4914SAndroid Build Coastguard Worker : _file(file ? ::strdup(file) : NULL), _line(line), _error(error)
53*2e9d4914SAndroid Build Coastguard Worker {
54*2e9d4914SAndroid Build Coastguard Worker }
55*2e9d4914SAndroid Build Coastguard Worker
56*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
57*2e9d4914SAndroid Build Coastguard Worker
ParseException(const ParseException & other)58*2e9d4914SAndroid Build Coastguard Worker ParseException::ParseException(const ParseException &other)
59*2e9d4914SAndroid Build Coastguard Worker : ConfigException(other),
60*2e9d4914SAndroid Build Coastguard Worker _file(other._file ? ::strdup(other._file) : NULL),
61*2e9d4914SAndroid Build Coastguard Worker _line(other._line),
62*2e9d4914SAndroid Build Coastguard Worker _error(other._error)
63*2e9d4914SAndroid Build Coastguard Worker {
64*2e9d4914SAndroid Build Coastguard Worker }
65*2e9d4914SAndroid Build Coastguard Worker
66*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
67*2e9d4914SAndroid Build Coastguard Worker
~ParseException()68*2e9d4914SAndroid Build Coastguard Worker ParseException::~ParseException() LIBCONFIGXX_NOEXCEPT
69*2e9d4914SAndroid Build Coastguard Worker {
70*2e9d4914SAndroid Build Coastguard Worker ::free((void *)_file);
71*2e9d4914SAndroid Build Coastguard Worker }
72*2e9d4914SAndroid Build Coastguard Worker
73*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
74*2e9d4914SAndroid Build Coastguard Worker
what() const75*2e9d4914SAndroid Build Coastguard Worker const char *ParseException::what() const LIBCONFIGXX_NOEXCEPT
76*2e9d4914SAndroid Build Coastguard Worker {
77*2e9d4914SAndroid Build Coastguard Worker return("ParseException");
78*2e9d4914SAndroid Build Coastguard Worker }
79*2e9d4914SAndroid Build Coastguard Worker
80*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
81*2e9d4914SAndroid Build Coastguard Worker
__toTypeCode(Setting::Type type)82*2e9d4914SAndroid Build Coastguard Worker static int __toTypeCode(Setting::Type type)
83*2e9d4914SAndroid Build Coastguard Worker {
84*2e9d4914SAndroid Build Coastguard Worker int typecode;
85*2e9d4914SAndroid Build Coastguard Worker
86*2e9d4914SAndroid Build Coastguard Worker switch(type)
87*2e9d4914SAndroid Build Coastguard Worker {
88*2e9d4914SAndroid Build Coastguard Worker case Setting::TypeGroup:
89*2e9d4914SAndroid Build Coastguard Worker typecode = CONFIG_TYPE_GROUP;
90*2e9d4914SAndroid Build Coastguard Worker break;
91*2e9d4914SAndroid Build Coastguard Worker
92*2e9d4914SAndroid Build Coastguard Worker case Setting::TypeInt:
93*2e9d4914SAndroid Build Coastguard Worker typecode = CONFIG_TYPE_INT;
94*2e9d4914SAndroid Build Coastguard Worker break;
95*2e9d4914SAndroid Build Coastguard Worker
96*2e9d4914SAndroid Build Coastguard Worker case Setting::TypeInt64:
97*2e9d4914SAndroid Build Coastguard Worker typecode = CONFIG_TYPE_INT64;
98*2e9d4914SAndroid Build Coastguard Worker break;
99*2e9d4914SAndroid Build Coastguard Worker
100*2e9d4914SAndroid Build Coastguard Worker case Setting::TypeFloat:
101*2e9d4914SAndroid Build Coastguard Worker typecode = CONFIG_TYPE_FLOAT;
102*2e9d4914SAndroid Build Coastguard Worker break;
103*2e9d4914SAndroid Build Coastguard Worker
104*2e9d4914SAndroid Build Coastguard Worker case Setting::TypeString:
105*2e9d4914SAndroid Build Coastguard Worker typecode = CONFIG_TYPE_STRING;
106*2e9d4914SAndroid Build Coastguard Worker break;
107*2e9d4914SAndroid Build Coastguard Worker
108*2e9d4914SAndroid Build Coastguard Worker case Setting::TypeBoolean:
109*2e9d4914SAndroid Build Coastguard Worker typecode = CONFIG_TYPE_BOOL;
110*2e9d4914SAndroid Build Coastguard Worker break;
111*2e9d4914SAndroid Build Coastguard Worker
112*2e9d4914SAndroid Build Coastguard Worker case Setting::TypeArray:
113*2e9d4914SAndroid Build Coastguard Worker typecode = CONFIG_TYPE_ARRAY;
114*2e9d4914SAndroid Build Coastguard Worker break;
115*2e9d4914SAndroid Build Coastguard Worker
116*2e9d4914SAndroid Build Coastguard Worker case Setting::TypeList:
117*2e9d4914SAndroid Build Coastguard Worker typecode = CONFIG_TYPE_LIST;
118*2e9d4914SAndroid Build Coastguard Worker break;
119*2e9d4914SAndroid Build Coastguard Worker
120*2e9d4914SAndroid Build Coastguard Worker default:
121*2e9d4914SAndroid Build Coastguard Worker typecode = CONFIG_TYPE_NONE;
122*2e9d4914SAndroid Build Coastguard Worker }
123*2e9d4914SAndroid Build Coastguard Worker
124*2e9d4914SAndroid Build Coastguard Worker return(typecode);
125*2e9d4914SAndroid Build Coastguard Worker }
126*2e9d4914SAndroid Build Coastguard Worker
127*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
128*2e9d4914SAndroid Build Coastguard Worker
__constructPath(const Setting & setting,std::stringstream & path)129*2e9d4914SAndroid Build Coastguard Worker static void __constructPath(const Setting &setting,
130*2e9d4914SAndroid Build Coastguard Worker std::stringstream &path)
131*2e9d4914SAndroid Build Coastguard Worker {
132*2e9d4914SAndroid Build Coastguard Worker // head recursion to print path from root to target
133*2e9d4914SAndroid Build Coastguard Worker
134*2e9d4914SAndroid Build Coastguard Worker if(! setting.isRoot())
135*2e9d4914SAndroid Build Coastguard Worker {
136*2e9d4914SAndroid Build Coastguard Worker __constructPath(setting.getParent(), path);
137*2e9d4914SAndroid Build Coastguard Worker if(path.tellp() > 0)
138*2e9d4914SAndroid Build Coastguard Worker path << '.';
139*2e9d4914SAndroid Build Coastguard Worker
140*2e9d4914SAndroid Build Coastguard Worker const char *name = setting.getName();
141*2e9d4914SAndroid Build Coastguard Worker if(name)
142*2e9d4914SAndroid Build Coastguard Worker path << name;
143*2e9d4914SAndroid Build Coastguard Worker else
144*2e9d4914SAndroid Build Coastguard Worker path << '[' << setting.getIndex() << ']';
145*2e9d4914SAndroid Build Coastguard Worker }
146*2e9d4914SAndroid Build Coastguard Worker }
147*2e9d4914SAndroid Build Coastguard Worker
148*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
149*2e9d4914SAndroid Build Coastguard Worker
SettingException(const Setting & setting)150*2e9d4914SAndroid Build Coastguard Worker SettingException::SettingException(const Setting &setting)
151*2e9d4914SAndroid Build Coastguard Worker {
152*2e9d4914SAndroid Build Coastguard Worker std::stringstream sstr;
153*2e9d4914SAndroid Build Coastguard Worker __constructPath(setting, sstr);
154*2e9d4914SAndroid Build Coastguard Worker
155*2e9d4914SAndroid Build Coastguard Worker _path = ::strdup(sstr.str().c_str());
156*2e9d4914SAndroid Build Coastguard Worker }
157*2e9d4914SAndroid Build Coastguard Worker
158*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
159*2e9d4914SAndroid Build Coastguard Worker
SettingException(const Setting & setting,int idx)160*2e9d4914SAndroid Build Coastguard Worker SettingException::SettingException(const Setting &setting, int idx)
161*2e9d4914SAndroid Build Coastguard Worker {
162*2e9d4914SAndroid Build Coastguard Worker std::stringstream sstr;
163*2e9d4914SAndroid Build Coastguard Worker __constructPath(setting, sstr);
164*2e9d4914SAndroid Build Coastguard Worker sstr << ".[" << idx << "]";
165*2e9d4914SAndroid Build Coastguard Worker
166*2e9d4914SAndroid Build Coastguard Worker _path = ::strdup(sstr.str().c_str());
167*2e9d4914SAndroid Build Coastguard Worker }
168*2e9d4914SAndroid Build Coastguard Worker
169*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
170*2e9d4914SAndroid Build Coastguard Worker
SettingException(const Setting & setting,const char * name)171*2e9d4914SAndroid Build Coastguard Worker SettingException::SettingException(const Setting &setting, const char *name)
172*2e9d4914SAndroid Build Coastguard Worker {
173*2e9d4914SAndroid Build Coastguard Worker std::stringstream sstr;
174*2e9d4914SAndroid Build Coastguard Worker __constructPath(setting, sstr);
175*2e9d4914SAndroid Build Coastguard Worker sstr << '.' << name;
176*2e9d4914SAndroid Build Coastguard Worker
177*2e9d4914SAndroid Build Coastguard Worker _path = ::strdup(sstr.str().c_str());
178*2e9d4914SAndroid Build Coastguard Worker }
179*2e9d4914SAndroid Build Coastguard Worker
180*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
181*2e9d4914SAndroid Build Coastguard Worker
SettingException(const char * path)182*2e9d4914SAndroid Build Coastguard Worker SettingException::SettingException(const char *path)
183*2e9d4914SAndroid Build Coastguard Worker {
184*2e9d4914SAndroid Build Coastguard Worker _path = ::strdup(path);
185*2e9d4914SAndroid Build Coastguard Worker }
186*2e9d4914SAndroid Build Coastguard Worker
187*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
188*2e9d4914SAndroid Build Coastguard Worker
getPath() const189*2e9d4914SAndroid Build Coastguard Worker const char *SettingException::getPath() const
190*2e9d4914SAndroid Build Coastguard Worker {
191*2e9d4914SAndroid Build Coastguard Worker return(_path);
192*2e9d4914SAndroid Build Coastguard Worker }
193*2e9d4914SAndroid Build Coastguard Worker
194*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
195*2e9d4914SAndroid Build Coastguard Worker
SettingException(const SettingException & other)196*2e9d4914SAndroid Build Coastguard Worker SettingException::SettingException(const SettingException &other)
197*2e9d4914SAndroid Build Coastguard Worker : ConfigException(other)
198*2e9d4914SAndroid Build Coastguard Worker {
199*2e9d4914SAndroid Build Coastguard Worker _path = ::strdup(other._path);
200*2e9d4914SAndroid Build Coastguard Worker }
201*2e9d4914SAndroid Build Coastguard Worker
202*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
203*2e9d4914SAndroid Build Coastguard Worker
operator =(const SettingException & other)204*2e9d4914SAndroid Build Coastguard Worker SettingException &SettingException::operator=(const SettingException &other)
205*2e9d4914SAndroid Build Coastguard Worker {
206*2e9d4914SAndroid Build Coastguard Worker ::free(_path);
207*2e9d4914SAndroid Build Coastguard Worker _path = ::strdup(other._path);
208*2e9d4914SAndroid Build Coastguard Worker
209*2e9d4914SAndroid Build Coastguard Worker return(*this);
210*2e9d4914SAndroid Build Coastguard Worker }
211*2e9d4914SAndroid Build Coastguard Worker
212*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
213*2e9d4914SAndroid Build Coastguard Worker
what() const214*2e9d4914SAndroid Build Coastguard Worker const char *SettingException::what() const LIBCONFIGXX_NOEXCEPT
215*2e9d4914SAndroid Build Coastguard Worker {
216*2e9d4914SAndroid Build Coastguard Worker return("SettingException");
217*2e9d4914SAndroid Build Coastguard Worker }
218*2e9d4914SAndroid Build Coastguard Worker
219*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
220*2e9d4914SAndroid Build Coastguard Worker
~SettingException()221*2e9d4914SAndroid Build Coastguard Worker SettingException::~SettingException() LIBCONFIGXX_NOEXCEPT
222*2e9d4914SAndroid Build Coastguard Worker {
223*2e9d4914SAndroid Build Coastguard Worker ::free(_path);
224*2e9d4914SAndroid Build Coastguard Worker }
225*2e9d4914SAndroid Build Coastguard Worker
226*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
227*2e9d4914SAndroid Build Coastguard Worker
SettingTypeException(const Setting & setting)228*2e9d4914SAndroid Build Coastguard Worker SettingTypeException::SettingTypeException(const Setting &setting)
229*2e9d4914SAndroid Build Coastguard Worker : SettingException(setting)
230*2e9d4914SAndroid Build Coastguard Worker {
231*2e9d4914SAndroid Build Coastguard Worker }
232*2e9d4914SAndroid Build Coastguard Worker
233*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
234*2e9d4914SAndroid Build Coastguard Worker
SettingTypeException(const Setting & setting,int idx)235*2e9d4914SAndroid Build Coastguard Worker SettingTypeException::SettingTypeException(const Setting &setting, int idx)
236*2e9d4914SAndroid Build Coastguard Worker : SettingException(setting, idx)
237*2e9d4914SAndroid Build Coastguard Worker {
238*2e9d4914SAndroid Build Coastguard Worker }
239*2e9d4914SAndroid Build Coastguard Worker
240*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
241*2e9d4914SAndroid Build Coastguard Worker
SettingTypeException(const Setting & setting,const char * name)242*2e9d4914SAndroid Build Coastguard Worker SettingTypeException::SettingTypeException(const Setting &setting,
243*2e9d4914SAndroid Build Coastguard Worker const char *name)
244*2e9d4914SAndroid Build Coastguard Worker : SettingException(setting, name)
245*2e9d4914SAndroid Build Coastguard Worker {
246*2e9d4914SAndroid Build Coastguard Worker }
247*2e9d4914SAndroid Build Coastguard Worker
248*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
249*2e9d4914SAndroid Build Coastguard Worker
what() const250*2e9d4914SAndroid Build Coastguard Worker const char *SettingTypeException::what() const LIBCONFIGXX_NOEXCEPT
251*2e9d4914SAndroid Build Coastguard Worker {
252*2e9d4914SAndroid Build Coastguard Worker return("SettingTypeException");
253*2e9d4914SAndroid Build Coastguard Worker }
254*2e9d4914SAndroid Build Coastguard Worker
255*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
256*2e9d4914SAndroid Build Coastguard Worker
SettingNotFoundException(const Setting & setting,int idx)257*2e9d4914SAndroid Build Coastguard Worker SettingNotFoundException::SettingNotFoundException(const Setting &setting,
258*2e9d4914SAndroid Build Coastguard Worker int idx)
259*2e9d4914SAndroid Build Coastguard Worker : SettingException(setting, idx)
260*2e9d4914SAndroid Build Coastguard Worker {
261*2e9d4914SAndroid Build Coastguard Worker }
262*2e9d4914SAndroid Build Coastguard Worker
263*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
264*2e9d4914SAndroid Build Coastguard Worker
SettingNotFoundException(const Setting & setting,const char * name)265*2e9d4914SAndroid Build Coastguard Worker SettingNotFoundException::SettingNotFoundException(const Setting &setting,
266*2e9d4914SAndroid Build Coastguard Worker const char *name)
267*2e9d4914SAndroid Build Coastguard Worker : SettingException(setting, name)
268*2e9d4914SAndroid Build Coastguard Worker {
269*2e9d4914SAndroid Build Coastguard Worker }
270*2e9d4914SAndroid Build Coastguard Worker
271*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
272*2e9d4914SAndroid Build Coastguard Worker
SettingNotFoundException(const char * path)273*2e9d4914SAndroid Build Coastguard Worker SettingNotFoundException::SettingNotFoundException(const char *path)
274*2e9d4914SAndroid Build Coastguard Worker : SettingException(path)
275*2e9d4914SAndroid Build Coastguard Worker {
276*2e9d4914SAndroid Build Coastguard Worker }
277*2e9d4914SAndroid Build Coastguard Worker
278*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
279*2e9d4914SAndroid Build Coastguard Worker
what() const280*2e9d4914SAndroid Build Coastguard Worker const char *SettingNotFoundException::what() const LIBCONFIGXX_NOEXCEPT
281*2e9d4914SAndroid Build Coastguard Worker {
282*2e9d4914SAndroid Build Coastguard Worker return("SettingNotFoundException");
283*2e9d4914SAndroid Build Coastguard Worker }
284*2e9d4914SAndroid Build Coastguard Worker
285*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
286*2e9d4914SAndroid Build Coastguard Worker
SettingNameException(const Setting & setting,const char * name)287*2e9d4914SAndroid Build Coastguard Worker SettingNameException::SettingNameException(const Setting &setting,
288*2e9d4914SAndroid Build Coastguard Worker const char *name)
289*2e9d4914SAndroid Build Coastguard Worker : SettingException(setting, name)
290*2e9d4914SAndroid Build Coastguard Worker {
291*2e9d4914SAndroid Build Coastguard Worker }
292*2e9d4914SAndroid Build Coastguard Worker
293*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
294*2e9d4914SAndroid Build Coastguard Worker
what() const295*2e9d4914SAndroid Build Coastguard Worker const char *SettingNameException::what() const LIBCONFIGXX_NOEXCEPT
296*2e9d4914SAndroid Build Coastguard Worker {
297*2e9d4914SAndroid Build Coastguard Worker return("SettingNameException");
298*2e9d4914SAndroid Build Coastguard Worker }
299*2e9d4914SAndroid Build Coastguard Worker
300*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
301*2e9d4914SAndroid Build Coastguard Worker
what() const302*2e9d4914SAndroid Build Coastguard Worker const char *FileIOException::what() const LIBCONFIGXX_NOEXCEPT
303*2e9d4914SAndroid Build Coastguard Worker {
304*2e9d4914SAndroid Build Coastguard Worker return("FileIOException");
305*2e9d4914SAndroid Build Coastguard Worker }
306*2e9d4914SAndroid Build Coastguard Worker
307*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
308*2e9d4914SAndroid Build Coastguard Worker
ConfigDestructor(void * arg)309*2e9d4914SAndroid Build Coastguard Worker void Config::ConfigDestructor(void *arg)
310*2e9d4914SAndroid Build Coastguard Worker {
311*2e9d4914SAndroid Build Coastguard Worker delete reinterpret_cast<Setting *>(arg);
312*2e9d4914SAndroid Build Coastguard Worker }
313*2e9d4914SAndroid Build Coastguard Worker
314*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
315*2e9d4914SAndroid Build Coastguard Worker
Config()316*2e9d4914SAndroid Build Coastguard Worker Config::Config()
317*2e9d4914SAndroid Build Coastguard Worker : _defaultFormat(Setting::FormatDefault)
318*2e9d4914SAndroid Build Coastguard Worker {
319*2e9d4914SAndroid Build Coastguard Worker _config = new config_t;
320*2e9d4914SAndroid Build Coastguard Worker config_init(_config);
321*2e9d4914SAndroid Build Coastguard Worker config_set_hook(_config, reinterpret_cast<void *>(this));
322*2e9d4914SAndroid Build Coastguard Worker config_set_destructor(_config, ConfigDestructor);
323*2e9d4914SAndroid Build Coastguard Worker config_set_include_func(_config, __include_func);
324*2e9d4914SAndroid Build Coastguard Worker }
325*2e9d4914SAndroid Build Coastguard Worker
326*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
327*2e9d4914SAndroid Build Coastguard Worker
~Config()328*2e9d4914SAndroid Build Coastguard Worker Config::~Config()
329*2e9d4914SAndroid Build Coastguard Worker {
330*2e9d4914SAndroid Build Coastguard Worker config_destroy(_config);
331*2e9d4914SAndroid Build Coastguard Worker delete _config;
332*2e9d4914SAndroid Build Coastguard Worker }
333*2e9d4914SAndroid Build Coastguard Worker
334*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
335*2e9d4914SAndroid Build Coastguard Worker
clear()336*2e9d4914SAndroid Build Coastguard Worker void Config::clear()
337*2e9d4914SAndroid Build Coastguard Worker {
338*2e9d4914SAndroid Build Coastguard Worker config_clear(_config);
339*2e9d4914SAndroid Build Coastguard Worker }
340*2e9d4914SAndroid Build Coastguard Worker
341*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
342*2e9d4914SAndroid Build Coastguard Worker
setOptions(int options)343*2e9d4914SAndroid Build Coastguard Worker void Config::setOptions(int options)
344*2e9d4914SAndroid Build Coastguard Worker {
345*2e9d4914SAndroid Build Coastguard Worker config_set_options(_config, options);
346*2e9d4914SAndroid Build Coastguard Worker }
347*2e9d4914SAndroid Build Coastguard Worker
348*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
349*2e9d4914SAndroid Build Coastguard Worker
getOptions() const350*2e9d4914SAndroid Build Coastguard Worker int Config::getOptions() const
351*2e9d4914SAndroid Build Coastguard Worker {
352*2e9d4914SAndroid Build Coastguard Worker return(config_get_options(_config));
353*2e9d4914SAndroid Build Coastguard Worker }
354*2e9d4914SAndroid Build Coastguard Worker
355*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
356*2e9d4914SAndroid Build Coastguard Worker
setOption(Config::Option option,bool flag)357*2e9d4914SAndroid Build Coastguard Worker void Config::setOption(Config::Option option, bool flag)
358*2e9d4914SAndroid Build Coastguard Worker {
359*2e9d4914SAndroid Build Coastguard Worker config_set_option(_config, (int)option, flag ? CONFIG_TRUE : CONFIG_FALSE);
360*2e9d4914SAndroid Build Coastguard Worker }
361*2e9d4914SAndroid Build Coastguard Worker
362*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
363*2e9d4914SAndroid Build Coastguard Worker
getOption(Config::Option option) const364*2e9d4914SAndroid Build Coastguard Worker bool Config::getOption(Config::Option option) const
365*2e9d4914SAndroid Build Coastguard Worker {
366*2e9d4914SAndroid Build Coastguard Worker return(config_get_option(_config, (int)option) == CONFIG_TRUE);
367*2e9d4914SAndroid Build Coastguard Worker }
368*2e9d4914SAndroid Build Coastguard Worker
369*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
370*2e9d4914SAndroid Build Coastguard Worker
setDefaultFormat(Setting::Format format)371*2e9d4914SAndroid Build Coastguard Worker void Config::setDefaultFormat(Setting::Format format)
372*2e9d4914SAndroid Build Coastguard Worker {
373*2e9d4914SAndroid Build Coastguard Worker if(format == Setting::FormatHex)
374*2e9d4914SAndroid Build Coastguard Worker _defaultFormat = Setting::FormatHex;
375*2e9d4914SAndroid Build Coastguard Worker else
376*2e9d4914SAndroid Build Coastguard Worker _defaultFormat = Setting::FormatDefault;
377*2e9d4914SAndroid Build Coastguard Worker
378*2e9d4914SAndroid Build Coastguard Worker config_set_default_format(_config, static_cast<short>(_defaultFormat));
379*2e9d4914SAndroid Build Coastguard Worker }
380*2e9d4914SAndroid Build Coastguard Worker
381*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
382*2e9d4914SAndroid Build Coastguard Worker
setTabWidth(unsigned short width)383*2e9d4914SAndroid Build Coastguard Worker void Config::setTabWidth(unsigned short width)
384*2e9d4914SAndroid Build Coastguard Worker {
385*2e9d4914SAndroid Build Coastguard Worker config_set_tab_width(_config, width);
386*2e9d4914SAndroid Build Coastguard Worker }
387*2e9d4914SAndroid Build Coastguard Worker
388*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
389*2e9d4914SAndroid Build Coastguard Worker
getTabWidth() const390*2e9d4914SAndroid Build Coastguard Worker unsigned short Config::getTabWidth() const
391*2e9d4914SAndroid Build Coastguard Worker {
392*2e9d4914SAndroid Build Coastguard Worker return(config_get_tab_width(_config));
393*2e9d4914SAndroid Build Coastguard Worker }
394*2e9d4914SAndroid Build Coastguard Worker
395*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
396*2e9d4914SAndroid Build Coastguard Worker
setFloatPrecision(unsigned short digits)397*2e9d4914SAndroid Build Coastguard Worker void Config::setFloatPrecision(unsigned short digits)
398*2e9d4914SAndroid Build Coastguard Worker {
399*2e9d4914SAndroid Build Coastguard Worker return (config_set_float_precision(_config,digits));
400*2e9d4914SAndroid Build Coastguard Worker }
401*2e9d4914SAndroid Build Coastguard Worker
402*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
403*2e9d4914SAndroid Build Coastguard Worker
getFloatPrecision() const404*2e9d4914SAndroid Build Coastguard Worker unsigned short Config::getFloatPrecision() const
405*2e9d4914SAndroid Build Coastguard Worker {
406*2e9d4914SAndroid Build Coastguard Worker return (config_get_float_precision(_config));
407*2e9d4914SAndroid Build Coastguard Worker }
408*2e9d4914SAndroid Build Coastguard Worker
409*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
410*2e9d4914SAndroid Build Coastguard Worker
setIncludeDir(const char * includeDir)411*2e9d4914SAndroid Build Coastguard Worker void Config::setIncludeDir(const char *includeDir)
412*2e9d4914SAndroid Build Coastguard Worker {
413*2e9d4914SAndroid Build Coastguard Worker config_set_include_dir(_config, includeDir);
414*2e9d4914SAndroid Build Coastguard Worker }
415*2e9d4914SAndroid Build Coastguard Worker
416*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
417*2e9d4914SAndroid Build Coastguard Worker
getIncludeDir() const418*2e9d4914SAndroid Build Coastguard Worker const char *Config::getIncludeDir() const
419*2e9d4914SAndroid Build Coastguard Worker {
420*2e9d4914SAndroid Build Coastguard Worker return(config_get_include_dir(_config));
421*2e9d4914SAndroid Build Coastguard Worker }
422*2e9d4914SAndroid Build Coastguard Worker
423*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
424*2e9d4914SAndroid Build Coastguard Worker
evaluateIncludePath(const char * path,const char ** error)425*2e9d4914SAndroid Build Coastguard Worker const char **Config::evaluateIncludePath(const char *path, const char **error)
426*2e9d4914SAndroid Build Coastguard Worker {
427*2e9d4914SAndroid Build Coastguard Worker return(config_default_include_func(_config, getIncludeDir(), path, error));
428*2e9d4914SAndroid Build Coastguard Worker }
429*2e9d4914SAndroid Build Coastguard Worker
430*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
431*2e9d4914SAndroid Build Coastguard Worker
handleError() const432*2e9d4914SAndroid Build Coastguard Worker void Config::handleError() const
433*2e9d4914SAndroid Build Coastguard Worker {
434*2e9d4914SAndroid Build Coastguard Worker switch(config_error_type(_config))
435*2e9d4914SAndroid Build Coastguard Worker {
436*2e9d4914SAndroid Build Coastguard Worker case CONFIG_ERR_NONE:
437*2e9d4914SAndroid Build Coastguard Worker break;
438*2e9d4914SAndroid Build Coastguard Worker
439*2e9d4914SAndroid Build Coastguard Worker case CONFIG_ERR_PARSE:
440*2e9d4914SAndroid Build Coastguard Worker throw ParseException(config_error_file(_config),
441*2e9d4914SAndroid Build Coastguard Worker config_error_line(_config),
442*2e9d4914SAndroid Build Coastguard Worker config_error_text(_config));
443*2e9d4914SAndroid Build Coastguard Worker break;
444*2e9d4914SAndroid Build Coastguard Worker
445*2e9d4914SAndroid Build Coastguard Worker case CONFIG_ERR_FILE_IO:
446*2e9d4914SAndroid Build Coastguard Worker default:
447*2e9d4914SAndroid Build Coastguard Worker throw FileIOException();
448*2e9d4914SAndroid Build Coastguard Worker }
449*2e9d4914SAndroid Build Coastguard Worker }
450*2e9d4914SAndroid Build Coastguard Worker
451*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
452*2e9d4914SAndroid Build Coastguard Worker
read(FILE * stream)453*2e9d4914SAndroid Build Coastguard Worker void Config::read(FILE *stream)
454*2e9d4914SAndroid Build Coastguard Worker {
455*2e9d4914SAndroid Build Coastguard Worker if(! config_read(_config, stream))
456*2e9d4914SAndroid Build Coastguard Worker handleError();
457*2e9d4914SAndroid Build Coastguard Worker }
458*2e9d4914SAndroid Build Coastguard Worker
459*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
460*2e9d4914SAndroid Build Coastguard Worker
readString(const char * str)461*2e9d4914SAndroid Build Coastguard Worker void Config::readString(const char *str)
462*2e9d4914SAndroid Build Coastguard Worker {
463*2e9d4914SAndroid Build Coastguard Worker if(! config_read_string(_config, str))
464*2e9d4914SAndroid Build Coastguard Worker handleError();
465*2e9d4914SAndroid Build Coastguard Worker }
466*2e9d4914SAndroid Build Coastguard Worker
467*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
468*2e9d4914SAndroid Build Coastguard Worker
write(FILE * stream) const469*2e9d4914SAndroid Build Coastguard Worker void Config::write(FILE *stream) const
470*2e9d4914SAndroid Build Coastguard Worker {
471*2e9d4914SAndroid Build Coastguard Worker config_write(_config, stream);
472*2e9d4914SAndroid Build Coastguard Worker }
473*2e9d4914SAndroid Build Coastguard Worker
474*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
475*2e9d4914SAndroid Build Coastguard Worker
readFile(const char * filename)476*2e9d4914SAndroid Build Coastguard Worker void Config::readFile(const char *filename)
477*2e9d4914SAndroid Build Coastguard Worker {
478*2e9d4914SAndroid Build Coastguard Worker if(! config_read_file(_config, filename))
479*2e9d4914SAndroid Build Coastguard Worker handleError();
480*2e9d4914SAndroid Build Coastguard Worker }
481*2e9d4914SAndroid Build Coastguard Worker
482*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
483*2e9d4914SAndroid Build Coastguard Worker
writeFile(const char * filename)484*2e9d4914SAndroid Build Coastguard Worker void Config::writeFile(const char *filename)
485*2e9d4914SAndroid Build Coastguard Worker {
486*2e9d4914SAndroid Build Coastguard Worker if(! config_write_file(_config, filename))
487*2e9d4914SAndroid Build Coastguard Worker handleError();
488*2e9d4914SAndroid Build Coastguard Worker }
489*2e9d4914SAndroid Build Coastguard Worker
490*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
491*2e9d4914SAndroid Build Coastguard Worker
lookup(const char * path) const492*2e9d4914SAndroid Build Coastguard Worker Setting & Config::lookup(const char *path) const
493*2e9d4914SAndroid Build Coastguard Worker {
494*2e9d4914SAndroid Build Coastguard Worker config_setting_t *s = config_lookup(_config, path);
495*2e9d4914SAndroid Build Coastguard Worker if(! s)
496*2e9d4914SAndroid Build Coastguard Worker throw SettingNotFoundException(path);
497*2e9d4914SAndroid Build Coastguard Worker
498*2e9d4914SAndroid Build Coastguard Worker return(Setting::wrapSetting(s));
499*2e9d4914SAndroid Build Coastguard Worker }
500*2e9d4914SAndroid Build Coastguard Worker
501*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
502*2e9d4914SAndroid Build Coastguard Worker
exists(const char * path) const503*2e9d4914SAndroid Build Coastguard Worker bool Config::exists(const char *path) const
504*2e9d4914SAndroid Build Coastguard Worker {
505*2e9d4914SAndroid Build Coastguard Worker config_setting_t *s = config_lookup(_config, path);
506*2e9d4914SAndroid Build Coastguard Worker
507*2e9d4914SAndroid Build Coastguard Worker return(s != NULL);
508*2e9d4914SAndroid Build Coastguard Worker }
509*2e9d4914SAndroid Build Coastguard Worker
510*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
511*2e9d4914SAndroid Build Coastguard Worker
512*2e9d4914SAndroid Build Coastguard Worker #define CONFIG_LOOKUP_NO_EXCEPTIONS(P, T, V) \
513*2e9d4914SAndroid Build Coastguard Worker try \
514*2e9d4914SAndroid Build Coastguard Worker { \
515*2e9d4914SAndroid Build Coastguard Worker Setting &s = lookup(P); \
516*2e9d4914SAndroid Build Coastguard Worker V = (T)s; \
517*2e9d4914SAndroid Build Coastguard Worker return(true); \
518*2e9d4914SAndroid Build Coastguard Worker } \
519*2e9d4914SAndroid Build Coastguard Worker catch(const ConfigException &) \
520*2e9d4914SAndroid Build Coastguard Worker { \
521*2e9d4914SAndroid Build Coastguard Worker return(false); \
522*2e9d4914SAndroid Build Coastguard Worker }
523*2e9d4914SAndroid Build Coastguard Worker
524*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
525*2e9d4914SAndroid Build Coastguard Worker
lookupValue(const char * path,bool & value) const526*2e9d4914SAndroid Build Coastguard Worker bool Config::lookupValue(const char *path, bool &value) const
527*2e9d4914SAndroid Build Coastguard Worker {
528*2e9d4914SAndroid Build Coastguard Worker CONFIG_LOOKUP_NO_EXCEPTIONS(path, bool, value);
529*2e9d4914SAndroid Build Coastguard Worker }
530*2e9d4914SAndroid Build Coastguard Worker
531*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
532*2e9d4914SAndroid Build Coastguard Worker
lookupValue(const char * path,int & value) const533*2e9d4914SAndroid Build Coastguard Worker bool Config::lookupValue(const char *path, int &value) const
534*2e9d4914SAndroid Build Coastguard Worker {
535*2e9d4914SAndroid Build Coastguard Worker CONFIG_LOOKUP_NO_EXCEPTIONS(path, int, value);
536*2e9d4914SAndroid Build Coastguard Worker }
537*2e9d4914SAndroid Build Coastguard Worker
538*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
539*2e9d4914SAndroid Build Coastguard Worker
lookupValue(const char * path,unsigned int & value) const540*2e9d4914SAndroid Build Coastguard Worker bool Config::lookupValue(const char *path, unsigned int &value) const
541*2e9d4914SAndroid Build Coastguard Worker {
542*2e9d4914SAndroid Build Coastguard Worker CONFIG_LOOKUP_NO_EXCEPTIONS(path, unsigned int, value);
543*2e9d4914SAndroid Build Coastguard Worker }
544*2e9d4914SAndroid Build Coastguard Worker
545*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
546*2e9d4914SAndroid Build Coastguard Worker
lookupValue(const char * path,long long & value) const547*2e9d4914SAndroid Build Coastguard Worker bool Config::lookupValue(const char *path, long long &value) const
548*2e9d4914SAndroid Build Coastguard Worker {
549*2e9d4914SAndroid Build Coastguard Worker CONFIG_LOOKUP_NO_EXCEPTIONS(path, long long, value);
550*2e9d4914SAndroid Build Coastguard Worker }
551*2e9d4914SAndroid Build Coastguard Worker
552*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
553*2e9d4914SAndroid Build Coastguard Worker
lookupValue(const char * path,unsigned long long & value) const554*2e9d4914SAndroid Build Coastguard Worker bool Config::lookupValue(const char *path, unsigned long long &value) const
555*2e9d4914SAndroid Build Coastguard Worker {
556*2e9d4914SAndroid Build Coastguard Worker CONFIG_LOOKUP_NO_EXCEPTIONS(path, unsigned long long, value);
557*2e9d4914SAndroid Build Coastguard Worker }
558*2e9d4914SAndroid Build Coastguard Worker
559*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
560*2e9d4914SAndroid Build Coastguard Worker
lookupValue(const char * path,double & value) const561*2e9d4914SAndroid Build Coastguard Worker bool Config::lookupValue(const char *path, double &value) const
562*2e9d4914SAndroid Build Coastguard Worker {
563*2e9d4914SAndroid Build Coastguard Worker CONFIG_LOOKUP_NO_EXCEPTIONS(path, double, value);
564*2e9d4914SAndroid Build Coastguard Worker }
565*2e9d4914SAndroid Build Coastguard Worker
566*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
567*2e9d4914SAndroid Build Coastguard Worker
lookupValue(const char * path,float & value) const568*2e9d4914SAndroid Build Coastguard Worker bool Config::lookupValue(const char *path, float &value) const
569*2e9d4914SAndroid Build Coastguard Worker {
570*2e9d4914SAndroid Build Coastguard Worker CONFIG_LOOKUP_NO_EXCEPTIONS(path, float, value);
571*2e9d4914SAndroid Build Coastguard Worker }
572*2e9d4914SAndroid Build Coastguard Worker
573*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
574*2e9d4914SAndroid Build Coastguard Worker
lookupValue(const char * path,const char * & value) const575*2e9d4914SAndroid Build Coastguard Worker bool Config::lookupValue(const char *path, const char *&value) const
576*2e9d4914SAndroid Build Coastguard Worker {
577*2e9d4914SAndroid Build Coastguard Worker CONFIG_LOOKUP_NO_EXCEPTIONS(path, const char *, value);
578*2e9d4914SAndroid Build Coastguard Worker }
579*2e9d4914SAndroid Build Coastguard Worker
580*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
581*2e9d4914SAndroid Build Coastguard Worker
lookupValue(const char * path,std::string & value) const582*2e9d4914SAndroid Build Coastguard Worker bool Config::lookupValue(const char *path, std::string &value) const
583*2e9d4914SAndroid Build Coastguard Worker {
584*2e9d4914SAndroid Build Coastguard Worker CONFIG_LOOKUP_NO_EXCEPTIONS(path, const char *, value);
585*2e9d4914SAndroid Build Coastguard Worker }
586*2e9d4914SAndroid Build Coastguard Worker
587*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
588*2e9d4914SAndroid Build Coastguard Worker
getRoot() const589*2e9d4914SAndroid Build Coastguard Worker Setting & Config::getRoot() const
590*2e9d4914SAndroid Build Coastguard Worker {
591*2e9d4914SAndroid Build Coastguard Worker return(Setting::wrapSetting(config_root_setting(_config)));
592*2e9d4914SAndroid Build Coastguard Worker }
593*2e9d4914SAndroid Build Coastguard Worker
594*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
595*2e9d4914SAndroid Build Coastguard Worker
Setting(config_setting_t * setting)596*2e9d4914SAndroid Build Coastguard Worker Setting::Setting(config_setting_t *setting)
597*2e9d4914SAndroid Build Coastguard Worker : _setting(setting)
598*2e9d4914SAndroid Build Coastguard Worker {
599*2e9d4914SAndroid Build Coastguard Worker switch(config_setting_type(setting))
600*2e9d4914SAndroid Build Coastguard Worker {
601*2e9d4914SAndroid Build Coastguard Worker case CONFIG_TYPE_GROUP:
602*2e9d4914SAndroid Build Coastguard Worker _type = TypeGroup;
603*2e9d4914SAndroid Build Coastguard Worker break;
604*2e9d4914SAndroid Build Coastguard Worker
605*2e9d4914SAndroid Build Coastguard Worker case CONFIG_TYPE_INT:
606*2e9d4914SAndroid Build Coastguard Worker _type = TypeInt;
607*2e9d4914SAndroid Build Coastguard Worker break;
608*2e9d4914SAndroid Build Coastguard Worker
609*2e9d4914SAndroid Build Coastguard Worker case CONFIG_TYPE_INT64:
610*2e9d4914SAndroid Build Coastguard Worker _type = TypeInt64;
611*2e9d4914SAndroid Build Coastguard Worker break;
612*2e9d4914SAndroid Build Coastguard Worker
613*2e9d4914SAndroid Build Coastguard Worker case CONFIG_TYPE_FLOAT:
614*2e9d4914SAndroid Build Coastguard Worker _type = TypeFloat;
615*2e9d4914SAndroid Build Coastguard Worker break;
616*2e9d4914SAndroid Build Coastguard Worker
617*2e9d4914SAndroid Build Coastguard Worker case CONFIG_TYPE_STRING:
618*2e9d4914SAndroid Build Coastguard Worker _type = TypeString;
619*2e9d4914SAndroid Build Coastguard Worker break;
620*2e9d4914SAndroid Build Coastguard Worker
621*2e9d4914SAndroid Build Coastguard Worker case CONFIG_TYPE_BOOL:
622*2e9d4914SAndroid Build Coastguard Worker _type = TypeBoolean;
623*2e9d4914SAndroid Build Coastguard Worker break;
624*2e9d4914SAndroid Build Coastguard Worker
625*2e9d4914SAndroid Build Coastguard Worker case CONFIG_TYPE_ARRAY:
626*2e9d4914SAndroid Build Coastguard Worker _type = TypeArray;
627*2e9d4914SAndroid Build Coastguard Worker break;
628*2e9d4914SAndroid Build Coastguard Worker
629*2e9d4914SAndroid Build Coastguard Worker case CONFIG_TYPE_LIST:
630*2e9d4914SAndroid Build Coastguard Worker _type = TypeList;
631*2e9d4914SAndroid Build Coastguard Worker break;
632*2e9d4914SAndroid Build Coastguard Worker
633*2e9d4914SAndroid Build Coastguard Worker case CONFIG_TYPE_NONE:
634*2e9d4914SAndroid Build Coastguard Worker default:
635*2e9d4914SAndroid Build Coastguard Worker _type = TypeNone;
636*2e9d4914SAndroid Build Coastguard Worker break;
637*2e9d4914SAndroid Build Coastguard Worker }
638*2e9d4914SAndroid Build Coastguard Worker
639*2e9d4914SAndroid Build Coastguard Worker switch(config_setting_get_format(setting))
640*2e9d4914SAndroid Build Coastguard Worker {
641*2e9d4914SAndroid Build Coastguard Worker case CONFIG_FORMAT_HEX:
642*2e9d4914SAndroid Build Coastguard Worker _format = FormatHex;
643*2e9d4914SAndroid Build Coastguard Worker break;
644*2e9d4914SAndroid Build Coastguard Worker
645*2e9d4914SAndroid Build Coastguard Worker case CONFIG_FORMAT_DEFAULT:
646*2e9d4914SAndroid Build Coastguard Worker default:
647*2e9d4914SAndroid Build Coastguard Worker _format = FormatDefault;
648*2e9d4914SAndroid Build Coastguard Worker break;
649*2e9d4914SAndroid Build Coastguard Worker }
650*2e9d4914SAndroid Build Coastguard Worker }
651*2e9d4914SAndroid Build Coastguard Worker
652*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
653*2e9d4914SAndroid Build Coastguard Worker
~Setting()654*2e9d4914SAndroid Build Coastguard Worker Setting::~Setting()
655*2e9d4914SAndroid Build Coastguard Worker {
656*2e9d4914SAndroid Build Coastguard Worker _setting = NULL;
657*2e9d4914SAndroid Build Coastguard Worker }
658*2e9d4914SAndroid Build Coastguard Worker
659*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
660*2e9d4914SAndroid Build Coastguard Worker
setFormat(Format format)661*2e9d4914SAndroid Build Coastguard Worker void Setting::setFormat(Format format)
662*2e9d4914SAndroid Build Coastguard Worker {
663*2e9d4914SAndroid Build Coastguard Worker if((_type == TypeInt) || (_type == TypeInt64))
664*2e9d4914SAndroid Build Coastguard Worker {
665*2e9d4914SAndroid Build Coastguard Worker if(format == FormatHex)
666*2e9d4914SAndroid Build Coastguard Worker _format = FormatHex;
667*2e9d4914SAndroid Build Coastguard Worker else
668*2e9d4914SAndroid Build Coastguard Worker _format = FormatDefault;
669*2e9d4914SAndroid Build Coastguard Worker }
670*2e9d4914SAndroid Build Coastguard Worker else
671*2e9d4914SAndroid Build Coastguard Worker _format = FormatDefault;
672*2e9d4914SAndroid Build Coastguard Worker
673*2e9d4914SAndroid Build Coastguard Worker config_setting_set_format(_setting, static_cast<short>(_format));
674*2e9d4914SAndroid Build Coastguard Worker }
675*2e9d4914SAndroid Build Coastguard Worker
676*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
677*2e9d4914SAndroid Build Coastguard Worker
operator bool() const678*2e9d4914SAndroid Build Coastguard Worker Setting::operator bool() const
679*2e9d4914SAndroid Build Coastguard Worker {
680*2e9d4914SAndroid Build Coastguard Worker assertType(TypeBoolean);
681*2e9d4914SAndroid Build Coastguard Worker
682*2e9d4914SAndroid Build Coastguard Worker return(config_setting_get_bool(_setting) ? true : false);
683*2e9d4914SAndroid Build Coastguard Worker }
684*2e9d4914SAndroid Build Coastguard Worker
685*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
686*2e9d4914SAndroid Build Coastguard Worker
operator int() const687*2e9d4914SAndroid Build Coastguard Worker Setting::operator int() const
688*2e9d4914SAndroid Build Coastguard Worker {
689*2e9d4914SAndroid Build Coastguard Worker assertType(TypeInt);
690*2e9d4914SAndroid Build Coastguard Worker
691*2e9d4914SAndroid Build Coastguard Worker return(config_setting_get_int(_setting));
692*2e9d4914SAndroid Build Coastguard Worker }
693*2e9d4914SAndroid Build Coastguard Worker
694*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
695*2e9d4914SAndroid Build Coastguard Worker
operator unsigned int() const696*2e9d4914SAndroid Build Coastguard Worker Setting::operator unsigned int() const
697*2e9d4914SAndroid Build Coastguard Worker {
698*2e9d4914SAndroid Build Coastguard Worker assertType(TypeInt);
699*2e9d4914SAndroid Build Coastguard Worker
700*2e9d4914SAndroid Build Coastguard Worker int v = config_setting_get_int(_setting);
701*2e9d4914SAndroid Build Coastguard Worker
702*2e9d4914SAndroid Build Coastguard Worker return(static_cast<unsigned int>(v));
703*2e9d4914SAndroid Build Coastguard Worker }
704*2e9d4914SAndroid Build Coastguard Worker
705*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
706*2e9d4914SAndroid Build Coastguard Worker
operator long() const707*2e9d4914SAndroid Build Coastguard Worker Setting::operator long() const
708*2e9d4914SAndroid Build Coastguard Worker {
709*2e9d4914SAndroid Build Coastguard Worker if(sizeof(long) == sizeof(long long))
710*2e9d4914SAndroid Build Coastguard Worker return operator long long();
711*2e9d4914SAndroid Build Coastguard Worker else
712*2e9d4914SAndroid Build Coastguard Worker return operator int();
713*2e9d4914SAndroid Build Coastguard Worker }
714*2e9d4914SAndroid Build Coastguard Worker
715*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
716*2e9d4914SAndroid Build Coastguard Worker
operator unsigned long() const717*2e9d4914SAndroid Build Coastguard Worker Setting::operator unsigned long() const
718*2e9d4914SAndroid Build Coastguard Worker {
719*2e9d4914SAndroid Build Coastguard Worker if(sizeof(long) == sizeof(long long))
720*2e9d4914SAndroid Build Coastguard Worker return operator unsigned long long();
721*2e9d4914SAndroid Build Coastguard Worker else
722*2e9d4914SAndroid Build Coastguard Worker return operator unsigned int();
723*2e9d4914SAndroid Build Coastguard Worker }
724*2e9d4914SAndroid Build Coastguard Worker
725*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
726*2e9d4914SAndroid Build Coastguard Worker
operator long long() const727*2e9d4914SAndroid Build Coastguard Worker Setting::operator long long() const
728*2e9d4914SAndroid Build Coastguard Worker {
729*2e9d4914SAndroid Build Coastguard Worker assertType(TypeInt64);
730*2e9d4914SAndroid Build Coastguard Worker
731*2e9d4914SAndroid Build Coastguard Worker return(config_setting_get_int64(_setting));
732*2e9d4914SAndroid Build Coastguard Worker }
733*2e9d4914SAndroid Build Coastguard Worker
734*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
735*2e9d4914SAndroid Build Coastguard Worker
operator unsigned long long() const736*2e9d4914SAndroid Build Coastguard Worker Setting::operator unsigned long long() const
737*2e9d4914SAndroid Build Coastguard Worker {
738*2e9d4914SAndroid Build Coastguard Worker assertType(TypeInt64);
739*2e9d4914SAndroid Build Coastguard Worker
740*2e9d4914SAndroid Build Coastguard Worker long long v = config_setting_get_int64(_setting);
741*2e9d4914SAndroid Build Coastguard Worker
742*2e9d4914SAndroid Build Coastguard Worker return(static_cast<unsigned long long>(v));
743*2e9d4914SAndroid Build Coastguard Worker }
744*2e9d4914SAndroid Build Coastguard Worker
745*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
746*2e9d4914SAndroid Build Coastguard Worker
operator double() const747*2e9d4914SAndroid Build Coastguard Worker Setting::operator double() const
748*2e9d4914SAndroid Build Coastguard Worker {
749*2e9d4914SAndroid Build Coastguard Worker assertType(TypeFloat);
750*2e9d4914SAndroid Build Coastguard Worker
751*2e9d4914SAndroid Build Coastguard Worker return(config_setting_get_float(_setting));
752*2e9d4914SAndroid Build Coastguard Worker }
753*2e9d4914SAndroid Build Coastguard Worker
754*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
755*2e9d4914SAndroid Build Coastguard Worker
operator float() const756*2e9d4914SAndroid Build Coastguard Worker Setting::operator float() const
757*2e9d4914SAndroid Build Coastguard Worker {
758*2e9d4914SAndroid Build Coastguard Worker assertType(TypeFloat);
759*2e9d4914SAndroid Build Coastguard Worker
760*2e9d4914SAndroid Build Coastguard Worker // may cause loss of precision:
761*2e9d4914SAndroid Build Coastguard Worker return(static_cast<float>(config_setting_get_float(_setting)));
762*2e9d4914SAndroid Build Coastguard Worker }
763*2e9d4914SAndroid Build Coastguard Worker
764*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
765*2e9d4914SAndroid Build Coastguard Worker
operator const char*() const766*2e9d4914SAndroid Build Coastguard Worker Setting::operator const char *() const
767*2e9d4914SAndroid Build Coastguard Worker {
768*2e9d4914SAndroid Build Coastguard Worker assertType(TypeString);
769*2e9d4914SAndroid Build Coastguard Worker
770*2e9d4914SAndroid Build Coastguard Worker return(config_setting_get_string(_setting));
771*2e9d4914SAndroid Build Coastguard Worker }
772*2e9d4914SAndroid Build Coastguard Worker
773*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
774*2e9d4914SAndroid Build Coastguard Worker
operator std::string() const775*2e9d4914SAndroid Build Coastguard Worker Setting::operator std::string() const
776*2e9d4914SAndroid Build Coastguard Worker {
777*2e9d4914SAndroid Build Coastguard Worker assertType(TypeString);
778*2e9d4914SAndroid Build Coastguard Worker
779*2e9d4914SAndroid Build Coastguard Worker const char *s = config_setting_get_string(_setting);
780*2e9d4914SAndroid Build Coastguard Worker
781*2e9d4914SAndroid Build Coastguard Worker std::string str;
782*2e9d4914SAndroid Build Coastguard Worker if(s)
783*2e9d4914SAndroid Build Coastguard Worker str = s;
784*2e9d4914SAndroid Build Coastguard Worker
785*2e9d4914SAndroid Build Coastguard Worker return(str);
786*2e9d4914SAndroid Build Coastguard Worker }
787*2e9d4914SAndroid Build Coastguard Worker
788*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
789*2e9d4914SAndroid Build Coastguard Worker
operator =(bool value)790*2e9d4914SAndroid Build Coastguard Worker Setting & Setting::operator=(bool value)
791*2e9d4914SAndroid Build Coastguard Worker {
792*2e9d4914SAndroid Build Coastguard Worker assertType(TypeBoolean);
793*2e9d4914SAndroid Build Coastguard Worker
794*2e9d4914SAndroid Build Coastguard Worker config_setting_set_bool(_setting, value);
795*2e9d4914SAndroid Build Coastguard Worker
796*2e9d4914SAndroid Build Coastguard Worker return(*this);
797*2e9d4914SAndroid Build Coastguard Worker }
798*2e9d4914SAndroid Build Coastguard Worker
799*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
800*2e9d4914SAndroid Build Coastguard Worker
operator =(int value)801*2e9d4914SAndroid Build Coastguard Worker Setting & Setting::operator=(int value)
802*2e9d4914SAndroid Build Coastguard Worker {
803*2e9d4914SAndroid Build Coastguard Worker assertType(TypeInt);
804*2e9d4914SAndroid Build Coastguard Worker
805*2e9d4914SAndroid Build Coastguard Worker config_setting_set_int(_setting, value);
806*2e9d4914SAndroid Build Coastguard Worker
807*2e9d4914SAndroid Build Coastguard Worker return(*this);
808*2e9d4914SAndroid Build Coastguard Worker }
809*2e9d4914SAndroid Build Coastguard Worker
810*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
811*2e9d4914SAndroid Build Coastguard Worker
operator =(long value)812*2e9d4914SAndroid Build Coastguard Worker Setting & Setting::operator=(long value)
813*2e9d4914SAndroid Build Coastguard Worker {
814*2e9d4914SAndroid Build Coastguard Worker if(sizeof(long) == sizeof(long long))
815*2e9d4914SAndroid Build Coastguard Worker return(operator=(static_cast<long long>(value)));
816*2e9d4914SAndroid Build Coastguard Worker else
817*2e9d4914SAndroid Build Coastguard Worker return(operator=(static_cast<int>(value)));
818*2e9d4914SAndroid Build Coastguard Worker }
819*2e9d4914SAndroid Build Coastguard Worker
820*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
821*2e9d4914SAndroid Build Coastguard Worker
operator =(const long long & value)822*2e9d4914SAndroid Build Coastguard Worker Setting & Setting::operator=(const long long &value)
823*2e9d4914SAndroid Build Coastguard Worker {
824*2e9d4914SAndroid Build Coastguard Worker assertType(TypeInt64);
825*2e9d4914SAndroid Build Coastguard Worker
826*2e9d4914SAndroid Build Coastguard Worker config_setting_set_int64(_setting, value);
827*2e9d4914SAndroid Build Coastguard Worker
828*2e9d4914SAndroid Build Coastguard Worker return(*this);
829*2e9d4914SAndroid Build Coastguard Worker }
830*2e9d4914SAndroid Build Coastguard Worker
831*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
832*2e9d4914SAndroid Build Coastguard Worker
operator =(const double & value)833*2e9d4914SAndroid Build Coastguard Worker Setting & Setting::operator=(const double &value)
834*2e9d4914SAndroid Build Coastguard Worker {
835*2e9d4914SAndroid Build Coastguard Worker assertType(TypeFloat);
836*2e9d4914SAndroid Build Coastguard Worker
837*2e9d4914SAndroid Build Coastguard Worker config_setting_set_float(_setting, value);
838*2e9d4914SAndroid Build Coastguard Worker
839*2e9d4914SAndroid Build Coastguard Worker return(*this);
840*2e9d4914SAndroid Build Coastguard Worker }
841*2e9d4914SAndroid Build Coastguard Worker
842*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
843*2e9d4914SAndroid Build Coastguard Worker
operator =(float value)844*2e9d4914SAndroid Build Coastguard Worker Setting & Setting::operator=(float value)
845*2e9d4914SAndroid Build Coastguard Worker {
846*2e9d4914SAndroid Build Coastguard Worker assertType(TypeFloat);
847*2e9d4914SAndroid Build Coastguard Worker
848*2e9d4914SAndroid Build Coastguard Worker double cvalue = static_cast<double>(value);
849*2e9d4914SAndroid Build Coastguard Worker
850*2e9d4914SAndroid Build Coastguard Worker config_setting_set_float(_setting, cvalue);
851*2e9d4914SAndroid Build Coastguard Worker
852*2e9d4914SAndroid Build Coastguard Worker return(*this);
853*2e9d4914SAndroid Build Coastguard Worker }
854*2e9d4914SAndroid Build Coastguard Worker
855*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
856*2e9d4914SAndroid Build Coastguard Worker
operator =(const char * value)857*2e9d4914SAndroid Build Coastguard Worker Setting & Setting::operator=(const char *value)
858*2e9d4914SAndroid Build Coastguard Worker {
859*2e9d4914SAndroid Build Coastguard Worker assertType(TypeString);
860*2e9d4914SAndroid Build Coastguard Worker
861*2e9d4914SAndroid Build Coastguard Worker config_setting_set_string(_setting, value);
862*2e9d4914SAndroid Build Coastguard Worker
863*2e9d4914SAndroid Build Coastguard Worker return(*this);
864*2e9d4914SAndroid Build Coastguard Worker }
865*2e9d4914SAndroid Build Coastguard Worker
866*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
867*2e9d4914SAndroid Build Coastguard Worker
operator =(const std::string & value)868*2e9d4914SAndroid Build Coastguard Worker Setting & Setting::operator=(const std::string &value)
869*2e9d4914SAndroid Build Coastguard Worker {
870*2e9d4914SAndroid Build Coastguard Worker assertType(TypeString);
871*2e9d4914SAndroid Build Coastguard Worker
872*2e9d4914SAndroid Build Coastguard Worker config_setting_set_string(_setting, value.c_str());
873*2e9d4914SAndroid Build Coastguard Worker
874*2e9d4914SAndroid Build Coastguard Worker return(*this);
875*2e9d4914SAndroid Build Coastguard Worker }
876*2e9d4914SAndroid Build Coastguard Worker
877*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
878*2e9d4914SAndroid Build Coastguard Worker
lookup(const char * path) const879*2e9d4914SAndroid Build Coastguard Worker Setting & Setting::lookup(const char *path) const
880*2e9d4914SAndroid Build Coastguard Worker {
881*2e9d4914SAndroid Build Coastguard Worker assertType(TypeGroup);
882*2e9d4914SAndroid Build Coastguard Worker
883*2e9d4914SAndroid Build Coastguard Worker config_setting_t *setting = config_setting_lookup(_setting, path);
884*2e9d4914SAndroid Build Coastguard Worker
885*2e9d4914SAndroid Build Coastguard Worker if(! setting)
886*2e9d4914SAndroid Build Coastguard Worker throw SettingNotFoundException(*this, path);
887*2e9d4914SAndroid Build Coastguard Worker
888*2e9d4914SAndroid Build Coastguard Worker return(wrapSetting(setting));
889*2e9d4914SAndroid Build Coastguard Worker }
890*2e9d4914SAndroid Build Coastguard Worker
891*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
892*2e9d4914SAndroid Build Coastguard Worker
operator [](const char * name) const893*2e9d4914SAndroid Build Coastguard Worker Setting & Setting::operator[](const char *name) const
894*2e9d4914SAndroid Build Coastguard Worker {
895*2e9d4914SAndroid Build Coastguard Worker assertType(TypeGroup);
896*2e9d4914SAndroid Build Coastguard Worker
897*2e9d4914SAndroid Build Coastguard Worker config_setting_t *setting = config_setting_get_member(_setting, name);
898*2e9d4914SAndroid Build Coastguard Worker
899*2e9d4914SAndroid Build Coastguard Worker if(! setting)
900*2e9d4914SAndroid Build Coastguard Worker throw SettingNotFoundException(*this, name);
901*2e9d4914SAndroid Build Coastguard Worker
902*2e9d4914SAndroid Build Coastguard Worker return(wrapSetting(setting));
903*2e9d4914SAndroid Build Coastguard Worker }
904*2e9d4914SAndroid Build Coastguard Worker
905*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
906*2e9d4914SAndroid Build Coastguard Worker
operator [](int i) const907*2e9d4914SAndroid Build Coastguard Worker Setting & Setting::operator[](int i) const
908*2e9d4914SAndroid Build Coastguard Worker {
909*2e9d4914SAndroid Build Coastguard Worker if((_type != TypeArray) && (_type != TypeGroup) && (_type != TypeList))
910*2e9d4914SAndroid Build Coastguard Worker throw SettingTypeException(*this, i);
911*2e9d4914SAndroid Build Coastguard Worker
912*2e9d4914SAndroid Build Coastguard Worker config_setting_t *setting = config_setting_get_elem(_setting, i);
913*2e9d4914SAndroid Build Coastguard Worker
914*2e9d4914SAndroid Build Coastguard Worker if(! setting)
915*2e9d4914SAndroid Build Coastguard Worker throw SettingNotFoundException(*this, i);
916*2e9d4914SAndroid Build Coastguard Worker
917*2e9d4914SAndroid Build Coastguard Worker return(wrapSetting(setting));
918*2e9d4914SAndroid Build Coastguard Worker }
919*2e9d4914SAndroid Build Coastguard Worker
920*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
921*2e9d4914SAndroid Build Coastguard Worker
922*2e9d4914SAndroid Build Coastguard Worker #define SETTING_LOOKUP_NO_EXCEPTIONS(K, T, V) \
923*2e9d4914SAndroid Build Coastguard Worker try \
924*2e9d4914SAndroid Build Coastguard Worker { \
925*2e9d4914SAndroid Build Coastguard Worker Setting &s = operator[](K); \
926*2e9d4914SAndroid Build Coastguard Worker V = (T)s; \
927*2e9d4914SAndroid Build Coastguard Worker return(true); \
928*2e9d4914SAndroid Build Coastguard Worker } \
929*2e9d4914SAndroid Build Coastguard Worker catch(const ConfigException &) \
930*2e9d4914SAndroid Build Coastguard Worker { \
931*2e9d4914SAndroid Build Coastguard Worker return(false); \
932*2e9d4914SAndroid Build Coastguard Worker }
933*2e9d4914SAndroid Build Coastguard Worker
934*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
935*2e9d4914SAndroid Build Coastguard Worker
lookupValue(const char * name,bool & value) const936*2e9d4914SAndroid Build Coastguard Worker bool Setting::lookupValue(const char *name, bool &value) const
937*2e9d4914SAndroid Build Coastguard Worker {
938*2e9d4914SAndroid Build Coastguard Worker SETTING_LOOKUP_NO_EXCEPTIONS(name, bool, value);
939*2e9d4914SAndroid Build Coastguard Worker }
940*2e9d4914SAndroid Build Coastguard Worker
941*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
942*2e9d4914SAndroid Build Coastguard Worker
lookupValue(const char * name,int & value) const943*2e9d4914SAndroid Build Coastguard Worker bool Setting::lookupValue(const char *name, int &value) const
944*2e9d4914SAndroid Build Coastguard Worker {
945*2e9d4914SAndroid Build Coastguard Worker SETTING_LOOKUP_NO_EXCEPTIONS(name, int, value);
946*2e9d4914SAndroid Build Coastguard Worker }
947*2e9d4914SAndroid Build Coastguard Worker
948*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
949*2e9d4914SAndroid Build Coastguard Worker
lookupValue(const char * name,unsigned int & value) const950*2e9d4914SAndroid Build Coastguard Worker bool Setting::lookupValue(const char *name, unsigned int &value) const
951*2e9d4914SAndroid Build Coastguard Worker {
952*2e9d4914SAndroid Build Coastguard Worker SETTING_LOOKUP_NO_EXCEPTIONS(name, unsigned int, value);
953*2e9d4914SAndroid Build Coastguard Worker }
954*2e9d4914SAndroid Build Coastguard Worker
955*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
956*2e9d4914SAndroid Build Coastguard Worker
lookupValue(const char * name,long long & value) const957*2e9d4914SAndroid Build Coastguard Worker bool Setting::lookupValue(const char *name, long long &value) const
958*2e9d4914SAndroid Build Coastguard Worker {
959*2e9d4914SAndroid Build Coastguard Worker SETTING_LOOKUP_NO_EXCEPTIONS(name, long long, value);
960*2e9d4914SAndroid Build Coastguard Worker }
961*2e9d4914SAndroid Build Coastguard Worker
962*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
963*2e9d4914SAndroid Build Coastguard Worker
lookupValue(const char * name,unsigned long long & value) const964*2e9d4914SAndroid Build Coastguard Worker bool Setting::lookupValue(const char *name, unsigned long long &value) const
965*2e9d4914SAndroid Build Coastguard Worker {
966*2e9d4914SAndroid Build Coastguard Worker SETTING_LOOKUP_NO_EXCEPTIONS(name, unsigned long long, value);
967*2e9d4914SAndroid Build Coastguard Worker }
968*2e9d4914SAndroid Build Coastguard Worker
969*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
970*2e9d4914SAndroid Build Coastguard Worker
lookupValue(const char * name,double & value) const971*2e9d4914SAndroid Build Coastguard Worker bool Setting::lookupValue(const char *name, double &value) const
972*2e9d4914SAndroid Build Coastguard Worker {
973*2e9d4914SAndroid Build Coastguard Worker SETTING_LOOKUP_NO_EXCEPTIONS(name, double, value);
974*2e9d4914SAndroid Build Coastguard Worker }
975*2e9d4914SAndroid Build Coastguard Worker
976*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
977*2e9d4914SAndroid Build Coastguard Worker
lookupValue(const char * name,float & value) const978*2e9d4914SAndroid Build Coastguard Worker bool Setting::lookupValue(const char *name, float &value) const
979*2e9d4914SAndroid Build Coastguard Worker {
980*2e9d4914SAndroid Build Coastguard Worker SETTING_LOOKUP_NO_EXCEPTIONS(name, float, value);
981*2e9d4914SAndroid Build Coastguard Worker }
982*2e9d4914SAndroid Build Coastguard Worker
983*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
984*2e9d4914SAndroid Build Coastguard Worker
lookupValue(const char * name,const char * & value) const985*2e9d4914SAndroid Build Coastguard Worker bool Setting::lookupValue(const char *name, const char *&value) const
986*2e9d4914SAndroid Build Coastguard Worker {
987*2e9d4914SAndroid Build Coastguard Worker SETTING_LOOKUP_NO_EXCEPTIONS(name, const char *, value);
988*2e9d4914SAndroid Build Coastguard Worker }
989*2e9d4914SAndroid Build Coastguard Worker
990*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
991*2e9d4914SAndroid Build Coastguard Worker
lookupValue(const char * name,std::string & value) const992*2e9d4914SAndroid Build Coastguard Worker bool Setting::lookupValue(const char *name, std::string &value) const
993*2e9d4914SAndroid Build Coastguard Worker {
994*2e9d4914SAndroid Build Coastguard Worker SETTING_LOOKUP_NO_EXCEPTIONS(name, const char *, value);
995*2e9d4914SAndroid Build Coastguard Worker }
996*2e9d4914SAndroid Build Coastguard Worker
997*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
998*2e9d4914SAndroid Build Coastguard Worker
exists(const char * name) const999*2e9d4914SAndroid Build Coastguard Worker bool Setting::exists(const char *name) const
1000*2e9d4914SAndroid Build Coastguard Worker {
1001*2e9d4914SAndroid Build Coastguard Worker if(_type != TypeGroup)
1002*2e9d4914SAndroid Build Coastguard Worker return(false);
1003*2e9d4914SAndroid Build Coastguard Worker
1004*2e9d4914SAndroid Build Coastguard Worker config_setting_t *setting = config_setting_get_member(_setting, name);
1005*2e9d4914SAndroid Build Coastguard Worker
1006*2e9d4914SAndroid Build Coastguard Worker return(setting != NULL);
1007*2e9d4914SAndroid Build Coastguard Worker }
1008*2e9d4914SAndroid Build Coastguard Worker
1009*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
1010*2e9d4914SAndroid Build Coastguard Worker
getLength() const1011*2e9d4914SAndroid Build Coastguard Worker int Setting::getLength() const
1012*2e9d4914SAndroid Build Coastguard Worker {
1013*2e9d4914SAndroid Build Coastguard Worker return(config_setting_length(_setting));
1014*2e9d4914SAndroid Build Coastguard Worker }
1015*2e9d4914SAndroid Build Coastguard Worker
1016*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
1017*2e9d4914SAndroid Build Coastguard Worker
getName() const1018*2e9d4914SAndroid Build Coastguard Worker const char * Setting::getName() const
1019*2e9d4914SAndroid Build Coastguard Worker {
1020*2e9d4914SAndroid Build Coastguard Worker return(config_setting_name(_setting));
1021*2e9d4914SAndroid Build Coastguard Worker }
1022*2e9d4914SAndroid Build Coastguard Worker
1023*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
1024*2e9d4914SAndroid Build Coastguard Worker
getPath() const1025*2e9d4914SAndroid Build Coastguard Worker std::string Setting::getPath() const
1026*2e9d4914SAndroid Build Coastguard Worker {
1027*2e9d4914SAndroid Build Coastguard Worker std::stringstream path;
1028*2e9d4914SAndroid Build Coastguard Worker
1029*2e9d4914SAndroid Build Coastguard Worker __constructPath(*this, path);
1030*2e9d4914SAndroid Build Coastguard Worker
1031*2e9d4914SAndroid Build Coastguard Worker return(path.str());
1032*2e9d4914SAndroid Build Coastguard Worker }
1033*2e9d4914SAndroid Build Coastguard Worker
1034*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
1035*2e9d4914SAndroid Build Coastguard Worker
getParent() const1036*2e9d4914SAndroid Build Coastguard Worker const Setting & Setting::getParent() const
1037*2e9d4914SAndroid Build Coastguard Worker {
1038*2e9d4914SAndroid Build Coastguard Worker config_setting_t *setting = config_setting_parent(_setting);
1039*2e9d4914SAndroid Build Coastguard Worker
1040*2e9d4914SAndroid Build Coastguard Worker if(! setting)
1041*2e9d4914SAndroid Build Coastguard Worker throw SettingNotFoundException(NULL);
1042*2e9d4914SAndroid Build Coastguard Worker
1043*2e9d4914SAndroid Build Coastguard Worker return(wrapSetting(setting));
1044*2e9d4914SAndroid Build Coastguard Worker }
1045*2e9d4914SAndroid Build Coastguard Worker
1046*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
1047*2e9d4914SAndroid Build Coastguard Worker
getParent()1048*2e9d4914SAndroid Build Coastguard Worker Setting & Setting::getParent()
1049*2e9d4914SAndroid Build Coastguard Worker {
1050*2e9d4914SAndroid Build Coastguard Worker config_setting_t *setting = config_setting_parent(_setting);
1051*2e9d4914SAndroid Build Coastguard Worker
1052*2e9d4914SAndroid Build Coastguard Worker if(! setting)
1053*2e9d4914SAndroid Build Coastguard Worker throw SettingNotFoundException(NULL);
1054*2e9d4914SAndroid Build Coastguard Worker
1055*2e9d4914SAndroid Build Coastguard Worker return(wrapSetting(setting));
1056*2e9d4914SAndroid Build Coastguard Worker }
1057*2e9d4914SAndroid Build Coastguard Worker
1058*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
1059*2e9d4914SAndroid Build Coastguard Worker
getSourceLine() const1060*2e9d4914SAndroid Build Coastguard Worker unsigned int Setting::getSourceLine() const
1061*2e9d4914SAndroid Build Coastguard Worker {
1062*2e9d4914SAndroid Build Coastguard Worker return(config_setting_source_line(_setting));
1063*2e9d4914SAndroid Build Coastguard Worker }
1064*2e9d4914SAndroid Build Coastguard Worker
1065*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
1066*2e9d4914SAndroid Build Coastguard Worker
getSourceFile() const1067*2e9d4914SAndroid Build Coastguard Worker const char *Setting::getSourceFile() const
1068*2e9d4914SAndroid Build Coastguard Worker {
1069*2e9d4914SAndroid Build Coastguard Worker return(config_setting_source_file(_setting));
1070*2e9d4914SAndroid Build Coastguard Worker }
1071*2e9d4914SAndroid Build Coastguard Worker
1072*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
1073*2e9d4914SAndroid Build Coastguard Worker
isRoot() const1074*2e9d4914SAndroid Build Coastguard Worker bool Setting::isRoot() const
1075*2e9d4914SAndroid Build Coastguard Worker {
1076*2e9d4914SAndroid Build Coastguard Worker return(config_setting_is_root(_setting));
1077*2e9d4914SAndroid Build Coastguard Worker }
1078*2e9d4914SAndroid Build Coastguard Worker
1079*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
1080*2e9d4914SAndroid Build Coastguard Worker
getIndex() const1081*2e9d4914SAndroid Build Coastguard Worker int Setting::getIndex() const
1082*2e9d4914SAndroid Build Coastguard Worker {
1083*2e9d4914SAndroid Build Coastguard Worker return(config_setting_index(_setting));
1084*2e9d4914SAndroid Build Coastguard Worker }
1085*2e9d4914SAndroid Build Coastguard Worker
1086*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
1087*2e9d4914SAndroid Build Coastguard Worker
remove(const char * name)1088*2e9d4914SAndroid Build Coastguard Worker void Setting::remove(const char *name)
1089*2e9d4914SAndroid Build Coastguard Worker {
1090*2e9d4914SAndroid Build Coastguard Worker assertType(TypeGroup);
1091*2e9d4914SAndroid Build Coastguard Worker
1092*2e9d4914SAndroid Build Coastguard Worker if(! config_setting_remove(_setting, name))
1093*2e9d4914SAndroid Build Coastguard Worker throw SettingNotFoundException(*this, name);
1094*2e9d4914SAndroid Build Coastguard Worker }
1095*2e9d4914SAndroid Build Coastguard Worker
1096*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
1097*2e9d4914SAndroid Build Coastguard Worker
remove(unsigned int idx)1098*2e9d4914SAndroid Build Coastguard Worker void Setting::remove(unsigned int idx)
1099*2e9d4914SAndroid Build Coastguard Worker {
1100*2e9d4914SAndroid Build Coastguard Worker if((_type != TypeArray) && (_type != TypeGroup) && (_type != TypeList))
1101*2e9d4914SAndroid Build Coastguard Worker throw SettingTypeException(*this, idx);
1102*2e9d4914SAndroid Build Coastguard Worker
1103*2e9d4914SAndroid Build Coastguard Worker if(! config_setting_remove_elem(_setting, idx))
1104*2e9d4914SAndroid Build Coastguard Worker throw SettingNotFoundException(*this, idx);
1105*2e9d4914SAndroid Build Coastguard Worker }
1106*2e9d4914SAndroid Build Coastguard Worker
1107*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
1108*2e9d4914SAndroid Build Coastguard Worker
add(const char * name,Setting::Type type)1109*2e9d4914SAndroid Build Coastguard Worker Setting & Setting::add(const char *name, Setting::Type type)
1110*2e9d4914SAndroid Build Coastguard Worker {
1111*2e9d4914SAndroid Build Coastguard Worker assertType(TypeGroup);
1112*2e9d4914SAndroid Build Coastguard Worker
1113*2e9d4914SAndroid Build Coastguard Worker int typecode = __toTypeCode(type);
1114*2e9d4914SAndroid Build Coastguard Worker
1115*2e9d4914SAndroid Build Coastguard Worker if(typecode == CONFIG_TYPE_NONE)
1116*2e9d4914SAndroid Build Coastguard Worker throw SettingTypeException(*this, name);
1117*2e9d4914SAndroid Build Coastguard Worker
1118*2e9d4914SAndroid Build Coastguard Worker config_setting_t *setting = config_setting_add(_setting, name, typecode);
1119*2e9d4914SAndroid Build Coastguard Worker
1120*2e9d4914SAndroid Build Coastguard Worker if(! setting)
1121*2e9d4914SAndroid Build Coastguard Worker throw SettingNameException(*this, name);
1122*2e9d4914SAndroid Build Coastguard Worker
1123*2e9d4914SAndroid Build Coastguard Worker return(wrapSetting(setting));
1124*2e9d4914SAndroid Build Coastguard Worker }
1125*2e9d4914SAndroid Build Coastguard Worker
1126*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
1127*2e9d4914SAndroid Build Coastguard Worker
add(Setting::Type type)1128*2e9d4914SAndroid Build Coastguard Worker Setting & Setting::add(Setting::Type type)
1129*2e9d4914SAndroid Build Coastguard Worker {
1130*2e9d4914SAndroid Build Coastguard Worker if((_type != TypeArray) && (_type != TypeList))
1131*2e9d4914SAndroid Build Coastguard Worker throw SettingTypeException(*this);
1132*2e9d4914SAndroid Build Coastguard Worker
1133*2e9d4914SAndroid Build Coastguard Worker if(_type == TypeArray)
1134*2e9d4914SAndroid Build Coastguard Worker {
1135*2e9d4914SAndroid Build Coastguard Worker int idx = getLength();
1136*2e9d4914SAndroid Build Coastguard Worker
1137*2e9d4914SAndroid Build Coastguard Worker if(idx > 0)
1138*2e9d4914SAndroid Build Coastguard Worker {
1139*2e9d4914SAndroid Build Coastguard Worker Setting::Type atype = operator[](0).getType();
1140*2e9d4914SAndroid Build Coastguard Worker if(type != atype)
1141*2e9d4914SAndroid Build Coastguard Worker throw SettingTypeException(*this, idx);
1142*2e9d4914SAndroid Build Coastguard Worker }
1143*2e9d4914SAndroid Build Coastguard Worker else
1144*2e9d4914SAndroid Build Coastguard Worker {
1145*2e9d4914SAndroid Build Coastguard Worker if((type != TypeInt) && (type != TypeInt64) && (type != TypeFloat)
1146*2e9d4914SAndroid Build Coastguard Worker && (type != TypeString) && (type != TypeBoolean))
1147*2e9d4914SAndroid Build Coastguard Worker throw SettingTypeException(*this, idx);
1148*2e9d4914SAndroid Build Coastguard Worker }
1149*2e9d4914SAndroid Build Coastguard Worker }
1150*2e9d4914SAndroid Build Coastguard Worker
1151*2e9d4914SAndroid Build Coastguard Worker int typecode = __toTypeCode(type);
1152*2e9d4914SAndroid Build Coastguard Worker config_setting_t *s = config_setting_add(_setting, NULL, typecode);
1153*2e9d4914SAndroid Build Coastguard Worker
1154*2e9d4914SAndroid Build Coastguard Worker Setting &ns = wrapSetting(s);
1155*2e9d4914SAndroid Build Coastguard Worker
1156*2e9d4914SAndroid Build Coastguard Worker switch(type)
1157*2e9d4914SAndroid Build Coastguard Worker {
1158*2e9d4914SAndroid Build Coastguard Worker case TypeInt:
1159*2e9d4914SAndroid Build Coastguard Worker ns = 0;
1160*2e9d4914SAndroid Build Coastguard Worker break;
1161*2e9d4914SAndroid Build Coastguard Worker
1162*2e9d4914SAndroid Build Coastguard Worker case TypeInt64:
1163*2e9d4914SAndroid Build Coastguard Worker ns = INT64_CONST(0);
1164*2e9d4914SAndroid Build Coastguard Worker break;
1165*2e9d4914SAndroid Build Coastguard Worker
1166*2e9d4914SAndroid Build Coastguard Worker case TypeFloat:
1167*2e9d4914SAndroid Build Coastguard Worker ns = 0.0;
1168*2e9d4914SAndroid Build Coastguard Worker break;
1169*2e9d4914SAndroid Build Coastguard Worker
1170*2e9d4914SAndroid Build Coastguard Worker case TypeString:
1171*2e9d4914SAndroid Build Coastguard Worker ns = (char *)NULL;
1172*2e9d4914SAndroid Build Coastguard Worker break;
1173*2e9d4914SAndroid Build Coastguard Worker
1174*2e9d4914SAndroid Build Coastguard Worker case TypeBoolean:
1175*2e9d4914SAndroid Build Coastguard Worker ns = false;
1176*2e9d4914SAndroid Build Coastguard Worker break;
1177*2e9d4914SAndroid Build Coastguard Worker
1178*2e9d4914SAndroid Build Coastguard Worker default:
1179*2e9d4914SAndroid Build Coastguard Worker // won't happen
1180*2e9d4914SAndroid Build Coastguard Worker break;
1181*2e9d4914SAndroid Build Coastguard Worker }
1182*2e9d4914SAndroid Build Coastguard Worker
1183*2e9d4914SAndroid Build Coastguard Worker return(ns);
1184*2e9d4914SAndroid Build Coastguard Worker }
1185*2e9d4914SAndroid Build Coastguard Worker
1186*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
1187*2e9d4914SAndroid Build Coastguard Worker
assertType(Setting::Type type) const1188*2e9d4914SAndroid Build Coastguard Worker void Setting::assertType(Setting::Type type) const
1189*2e9d4914SAndroid Build Coastguard Worker {
1190*2e9d4914SAndroid Build Coastguard Worker if(type != _type)
1191*2e9d4914SAndroid Build Coastguard Worker {
1192*2e9d4914SAndroid Build Coastguard Worker if(!(isNumber() && config_get_auto_convert(_setting->config)
1193*2e9d4914SAndroid Build Coastguard Worker && ((type == TypeInt) || (type == TypeInt64) || (type == TypeFloat))))
1194*2e9d4914SAndroid Build Coastguard Worker throw SettingTypeException(*this);
1195*2e9d4914SAndroid Build Coastguard Worker }
1196*2e9d4914SAndroid Build Coastguard Worker }
1197*2e9d4914SAndroid Build Coastguard Worker
1198*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
1199*2e9d4914SAndroid Build Coastguard Worker
wrapSetting(config_setting_t * s)1200*2e9d4914SAndroid Build Coastguard Worker Setting & Setting::wrapSetting(config_setting_t *s)
1201*2e9d4914SAndroid Build Coastguard Worker {
1202*2e9d4914SAndroid Build Coastguard Worker Setting *setting = NULL;
1203*2e9d4914SAndroid Build Coastguard Worker
1204*2e9d4914SAndroid Build Coastguard Worker void *hook = config_setting_get_hook(s);
1205*2e9d4914SAndroid Build Coastguard Worker if(! hook)
1206*2e9d4914SAndroid Build Coastguard Worker {
1207*2e9d4914SAndroid Build Coastguard Worker setting = new Setting(s);
1208*2e9d4914SAndroid Build Coastguard Worker config_setting_set_hook(s, reinterpret_cast<void *>(setting));
1209*2e9d4914SAndroid Build Coastguard Worker }
1210*2e9d4914SAndroid Build Coastguard Worker else
1211*2e9d4914SAndroid Build Coastguard Worker setting = reinterpret_cast<Setting *>(hook);
1212*2e9d4914SAndroid Build Coastguard Worker
1213*2e9d4914SAndroid Build Coastguard Worker return(*setting);
1214*2e9d4914SAndroid Build Coastguard Worker }
1215*2e9d4914SAndroid Build Coastguard Worker
1216*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
1217*2e9d4914SAndroid Build Coastguard Worker
begin()1218*2e9d4914SAndroid Build Coastguard Worker Setting::iterator Setting::begin()
1219*2e9d4914SAndroid Build Coastguard Worker { return(iterator(*this)); }
1220*2e9d4914SAndroid Build Coastguard Worker
1221*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
1222*2e9d4914SAndroid Build Coastguard Worker
end()1223*2e9d4914SAndroid Build Coastguard Worker Setting::iterator Setting::end()
1224*2e9d4914SAndroid Build Coastguard Worker { return(iterator(*this, true)); }
1225*2e9d4914SAndroid Build Coastguard Worker
1226*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
1227*2e9d4914SAndroid Build Coastguard Worker
begin() const1228*2e9d4914SAndroid Build Coastguard Worker Setting::const_iterator Setting::begin() const
1229*2e9d4914SAndroid Build Coastguard Worker { return(const_iterator(*this)); }
1230*2e9d4914SAndroid Build Coastguard Worker
1231*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
1232*2e9d4914SAndroid Build Coastguard Worker
end() const1233*2e9d4914SAndroid Build Coastguard Worker Setting::const_iterator Setting::end() const
1234*2e9d4914SAndroid Build Coastguard Worker { return(const_iterator(*this, true)); }
1235*2e9d4914SAndroid Build Coastguard Worker
1236*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
1237*2e9d4914SAndroid Build Coastguard Worker
SettingIterator(Setting & setting,bool endIterator)1238*2e9d4914SAndroid Build Coastguard Worker SettingIterator::SettingIterator(Setting& setting, bool endIterator)
1239*2e9d4914SAndroid Build Coastguard Worker : _setting(&setting),
1240*2e9d4914SAndroid Build Coastguard Worker _count(setting.getLength()),
1241*2e9d4914SAndroid Build Coastguard Worker _idx(endIterator ? _count : 0)
1242*2e9d4914SAndroid Build Coastguard Worker {
1243*2e9d4914SAndroid Build Coastguard Worker if(!setting.isAggregate())
1244*2e9d4914SAndroid Build Coastguard Worker throw SettingTypeException(setting);
1245*2e9d4914SAndroid Build Coastguard Worker }
1246*2e9d4914SAndroid Build Coastguard Worker
1247*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
1248*2e9d4914SAndroid Build Coastguard Worker
SettingIterator(const SettingIterator & other)1249*2e9d4914SAndroid Build Coastguard Worker SettingIterator::SettingIterator(const SettingIterator &other)
1250*2e9d4914SAndroid Build Coastguard Worker : _setting(other._setting),
1251*2e9d4914SAndroid Build Coastguard Worker _count(other._count),
1252*2e9d4914SAndroid Build Coastguard Worker _idx(other._idx)
1253*2e9d4914SAndroid Build Coastguard Worker {
1254*2e9d4914SAndroid Build Coastguard Worker }
1255*2e9d4914SAndroid Build Coastguard Worker
1256*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
1257*2e9d4914SAndroid Build Coastguard Worker
operator =(const SettingIterator & other)1258*2e9d4914SAndroid Build Coastguard Worker SettingIterator& SettingIterator::operator=(const SettingIterator &other)
1259*2e9d4914SAndroid Build Coastguard Worker {
1260*2e9d4914SAndroid Build Coastguard Worker _setting = other._setting;
1261*2e9d4914SAndroid Build Coastguard Worker _count = other._count;
1262*2e9d4914SAndroid Build Coastguard Worker _idx = other._idx;
1263*2e9d4914SAndroid Build Coastguard Worker
1264*2e9d4914SAndroid Build Coastguard Worker return(*this);
1265*2e9d4914SAndroid Build Coastguard Worker }
1266*2e9d4914SAndroid Build Coastguard Worker
1267*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
1268*2e9d4914SAndroid Build Coastguard Worker
operator ++()1269*2e9d4914SAndroid Build Coastguard Worker SettingIterator& SettingIterator::operator++()
1270*2e9d4914SAndroid Build Coastguard Worker {
1271*2e9d4914SAndroid Build Coastguard Worker ++_idx;
1272*2e9d4914SAndroid Build Coastguard Worker
1273*2e9d4914SAndroid Build Coastguard Worker return(*this);
1274*2e9d4914SAndroid Build Coastguard Worker }
1275*2e9d4914SAndroid Build Coastguard Worker
1276*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
1277*2e9d4914SAndroid Build Coastguard Worker
operator ++(int)1278*2e9d4914SAndroid Build Coastguard Worker SettingIterator SettingIterator::operator++(int)
1279*2e9d4914SAndroid Build Coastguard Worker {
1280*2e9d4914SAndroid Build Coastguard Worker SettingIterator tmp(*this);
1281*2e9d4914SAndroid Build Coastguard Worker ++_idx;
1282*2e9d4914SAndroid Build Coastguard Worker
1283*2e9d4914SAndroid Build Coastguard Worker return(tmp);
1284*2e9d4914SAndroid Build Coastguard Worker }
1285*2e9d4914SAndroid Build Coastguard Worker
1286*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
1287*2e9d4914SAndroid Build Coastguard Worker
operator --()1288*2e9d4914SAndroid Build Coastguard Worker SettingIterator& SettingIterator::operator--()
1289*2e9d4914SAndroid Build Coastguard Worker {
1290*2e9d4914SAndroid Build Coastguard Worker --_idx;
1291*2e9d4914SAndroid Build Coastguard Worker
1292*2e9d4914SAndroid Build Coastguard Worker return(*this);
1293*2e9d4914SAndroid Build Coastguard Worker }
1294*2e9d4914SAndroid Build Coastguard Worker
1295*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
1296*2e9d4914SAndroid Build Coastguard Worker
operator --(int)1297*2e9d4914SAndroid Build Coastguard Worker SettingIterator SettingIterator::operator--(int)
1298*2e9d4914SAndroid Build Coastguard Worker {
1299*2e9d4914SAndroid Build Coastguard Worker SettingIterator tmp(*this);
1300*2e9d4914SAndroid Build Coastguard Worker --_idx;
1301*2e9d4914SAndroid Build Coastguard Worker
1302*2e9d4914SAndroid Build Coastguard Worker return(tmp);
1303*2e9d4914SAndroid Build Coastguard Worker }
1304*2e9d4914SAndroid Build Coastguard Worker
1305*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
1306*2e9d4914SAndroid Build Coastguard Worker
operator +(int offset) const1307*2e9d4914SAndroid Build Coastguard Worker SettingIterator SettingIterator::operator+(int offset) const
1308*2e9d4914SAndroid Build Coastguard Worker {
1309*2e9d4914SAndroid Build Coastguard Worker SettingIterator copy(*this);
1310*2e9d4914SAndroid Build Coastguard Worker copy += offset;
1311*2e9d4914SAndroid Build Coastguard Worker
1312*2e9d4914SAndroid Build Coastguard Worker return(copy);
1313*2e9d4914SAndroid Build Coastguard Worker }
1314*2e9d4914SAndroid Build Coastguard Worker
1315*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
1316*2e9d4914SAndroid Build Coastguard Worker
operator +=(int offset)1317*2e9d4914SAndroid Build Coastguard Worker SettingIterator& SettingIterator::operator+=(int offset)
1318*2e9d4914SAndroid Build Coastguard Worker {
1319*2e9d4914SAndroid Build Coastguard Worker _idx += offset;
1320*2e9d4914SAndroid Build Coastguard Worker
1321*2e9d4914SAndroid Build Coastguard Worker return(*this);
1322*2e9d4914SAndroid Build Coastguard Worker }
1323*2e9d4914SAndroid Build Coastguard Worker
1324*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
1325*2e9d4914SAndroid Build Coastguard Worker
operator +(int offset,SettingIterator & si)1326*2e9d4914SAndroid Build Coastguard Worker SettingIterator operator+(int offset, SettingIterator& si)
1327*2e9d4914SAndroid Build Coastguard Worker {
1328*2e9d4914SAndroid Build Coastguard Worker SettingIterator copy(si);
1329*2e9d4914SAndroid Build Coastguard Worker copy += offset;
1330*2e9d4914SAndroid Build Coastguard Worker
1331*2e9d4914SAndroid Build Coastguard Worker return(copy);
1332*2e9d4914SAndroid Build Coastguard Worker }
1333*2e9d4914SAndroid Build Coastguard Worker
1334*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
1335*2e9d4914SAndroid Build Coastguard Worker
operator -(int offset) const1336*2e9d4914SAndroid Build Coastguard Worker SettingIterator SettingIterator::operator-(int offset) const
1337*2e9d4914SAndroid Build Coastguard Worker {
1338*2e9d4914SAndroid Build Coastguard Worker SettingIterator copy(*this);
1339*2e9d4914SAndroid Build Coastguard Worker copy._idx -= offset;
1340*2e9d4914SAndroid Build Coastguard Worker
1341*2e9d4914SAndroid Build Coastguard Worker return(copy);
1342*2e9d4914SAndroid Build Coastguard Worker }
1343*2e9d4914SAndroid Build Coastguard Worker
1344*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
1345*2e9d4914SAndroid Build Coastguard Worker
operator -=(int offset)1346*2e9d4914SAndroid Build Coastguard Worker SettingIterator& SettingIterator::operator-=(int offset)
1347*2e9d4914SAndroid Build Coastguard Worker {
1348*2e9d4914SAndroid Build Coastguard Worker _idx -= offset;
1349*2e9d4914SAndroid Build Coastguard Worker
1350*2e9d4914SAndroid Build Coastguard Worker return(*this);
1351*2e9d4914SAndroid Build Coastguard Worker }
1352*2e9d4914SAndroid Build Coastguard Worker
1353*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
1354*2e9d4914SAndroid Build Coastguard Worker
operator -(SettingIterator const & other) const1355*2e9d4914SAndroid Build Coastguard Worker int SettingIterator::operator-(SettingIterator const &other) const
1356*2e9d4914SAndroid Build Coastguard Worker {
1357*2e9d4914SAndroid Build Coastguard Worker return(_idx - other._idx);
1358*2e9d4914SAndroid Build Coastguard Worker }
1359*2e9d4914SAndroid Build Coastguard Worker
1360*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
1361*2e9d4914SAndroid Build Coastguard Worker
SettingConstIterator(const Setting & setting,bool endIterator)1362*2e9d4914SAndroid Build Coastguard Worker SettingConstIterator::SettingConstIterator(const Setting &setting,
1363*2e9d4914SAndroid Build Coastguard Worker bool endIterator)
1364*2e9d4914SAndroid Build Coastguard Worker : _setting(&setting),
1365*2e9d4914SAndroid Build Coastguard Worker _count(setting.getLength()),
1366*2e9d4914SAndroid Build Coastguard Worker _idx(endIterator ? _count : 0)
1367*2e9d4914SAndroid Build Coastguard Worker {
1368*2e9d4914SAndroid Build Coastguard Worker if(!setting.isAggregate())
1369*2e9d4914SAndroid Build Coastguard Worker throw SettingTypeException(setting);
1370*2e9d4914SAndroid Build Coastguard Worker }
1371*2e9d4914SAndroid Build Coastguard Worker
1372*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
1373*2e9d4914SAndroid Build Coastguard Worker
SettingConstIterator(const SettingConstIterator & other)1374*2e9d4914SAndroid Build Coastguard Worker SettingConstIterator::SettingConstIterator(const SettingConstIterator &other)
1375*2e9d4914SAndroid Build Coastguard Worker : _setting(other._setting),
1376*2e9d4914SAndroid Build Coastguard Worker _count(other._count),
1377*2e9d4914SAndroid Build Coastguard Worker _idx(other._idx)
1378*2e9d4914SAndroid Build Coastguard Worker {
1379*2e9d4914SAndroid Build Coastguard Worker }
1380*2e9d4914SAndroid Build Coastguard Worker
1381*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
1382*2e9d4914SAndroid Build Coastguard Worker
operator =(const SettingConstIterator & other)1383*2e9d4914SAndroid Build Coastguard Worker SettingConstIterator& SettingConstIterator::operator=(
1384*2e9d4914SAndroid Build Coastguard Worker const SettingConstIterator &other)
1385*2e9d4914SAndroid Build Coastguard Worker {
1386*2e9d4914SAndroid Build Coastguard Worker _setting = other._setting;
1387*2e9d4914SAndroid Build Coastguard Worker _count = other._count;
1388*2e9d4914SAndroid Build Coastguard Worker _idx = other._idx;
1389*2e9d4914SAndroid Build Coastguard Worker return(*this);
1390*2e9d4914SAndroid Build Coastguard Worker }
1391*2e9d4914SAndroid Build Coastguard Worker
1392*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
1393*2e9d4914SAndroid Build Coastguard Worker
operator ++()1394*2e9d4914SAndroid Build Coastguard Worker SettingConstIterator& SettingConstIterator::operator++()
1395*2e9d4914SAndroid Build Coastguard Worker {
1396*2e9d4914SAndroid Build Coastguard Worker ++_idx;
1397*2e9d4914SAndroid Build Coastguard Worker
1398*2e9d4914SAndroid Build Coastguard Worker return(*this);
1399*2e9d4914SAndroid Build Coastguard Worker }
1400*2e9d4914SAndroid Build Coastguard Worker
1401*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
1402*2e9d4914SAndroid Build Coastguard Worker
operator ++(int)1403*2e9d4914SAndroid Build Coastguard Worker SettingConstIterator SettingConstIterator::operator++(int)
1404*2e9d4914SAndroid Build Coastguard Worker {
1405*2e9d4914SAndroid Build Coastguard Worker SettingConstIterator tmp(*this);
1406*2e9d4914SAndroid Build Coastguard Worker ++_idx;
1407*2e9d4914SAndroid Build Coastguard Worker
1408*2e9d4914SAndroid Build Coastguard Worker return(tmp);
1409*2e9d4914SAndroid Build Coastguard Worker }
1410*2e9d4914SAndroid Build Coastguard Worker
1411*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
1412*2e9d4914SAndroid Build Coastguard Worker
operator --()1413*2e9d4914SAndroid Build Coastguard Worker SettingConstIterator& SettingConstIterator::operator--()
1414*2e9d4914SAndroid Build Coastguard Worker {
1415*2e9d4914SAndroid Build Coastguard Worker --_idx;
1416*2e9d4914SAndroid Build Coastguard Worker
1417*2e9d4914SAndroid Build Coastguard Worker return(*this);
1418*2e9d4914SAndroid Build Coastguard Worker }
1419*2e9d4914SAndroid Build Coastguard Worker
1420*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
1421*2e9d4914SAndroid Build Coastguard Worker
operator --(int)1422*2e9d4914SAndroid Build Coastguard Worker SettingConstIterator SettingConstIterator::operator--(int)
1423*2e9d4914SAndroid Build Coastguard Worker {
1424*2e9d4914SAndroid Build Coastguard Worker SettingConstIterator tmp(*this);
1425*2e9d4914SAndroid Build Coastguard Worker --_idx;
1426*2e9d4914SAndroid Build Coastguard Worker
1427*2e9d4914SAndroid Build Coastguard Worker return(tmp);
1428*2e9d4914SAndroid Build Coastguard Worker }
1429*2e9d4914SAndroid Build Coastguard Worker
1430*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
1431*2e9d4914SAndroid Build Coastguard Worker
operator +(int offset) const1432*2e9d4914SAndroid Build Coastguard Worker SettingConstIterator SettingConstIterator::operator+(int offset) const
1433*2e9d4914SAndroid Build Coastguard Worker {
1434*2e9d4914SAndroid Build Coastguard Worker SettingConstIterator copy(*this);
1435*2e9d4914SAndroid Build Coastguard Worker copy += offset;
1436*2e9d4914SAndroid Build Coastguard Worker
1437*2e9d4914SAndroid Build Coastguard Worker return(copy);
1438*2e9d4914SAndroid Build Coastguard Worker }
1439*2e9d4914SAndroid Build Coastguard Worker
1440*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
1441*2e9d4914SAndroid Build Coastguard Worker
operator +=(int offset)1442*2e9d4914SAndroid Build Coastguard Worker SettingConstIterator& SettingConstIterator::operator+=(int offset)
1443*2e9d4914SAndroid Build Coastguard Worker {
1444*2e9d4914SAndroid Build Coastguard Worker _idx += offset;
1445*2e9d4914SAndroid Build Coastguard Worker
1446*2e9d4914SAndroid Build Coastguard Worker return(*this);
1447*2e9d4914SAndroid Build Coastguard Worker }
1448*2e9d4914SAndroid Build Coastguard Worker
1449*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
1450*2e9d4914SAndroid Build Coastguard Worker
operator +(int offset,SettingConstIterator & si)1451*2e9d4914SAndroid Build Coastguard Worker SettingConstIterator operator+(int offset, SettingConstIterator &si)
1452*2e9d4914SAndroid Build Coastguard Worker {
1453*2e9d4914SAndroid Build Coastguard Worker SettingConstIterator copy(si);
1454*2e9d4914SAndroid Build Coastguard Worker copy += offset;
1455*2e9d4914SAndroid Build Coastguard Worker
1456*2e9d4914SAndroid Build Coastguard Worker return(copy);
1457*2e9d4914SAndroid Build Coastguard Worker }
1458*2e9d4914SAndroid Build Coastguard Worker
1459*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
1460*2e9d4914SAndroid Build Coastguard Worker
operator -(int offset) const1461*2e9d4914SAndroid Build Coastguard Worker SettingConstIterator SettingConstIterator::operator-(int offset) const
1462*2e9d4914SAndroid Build Coastguard Worker {
1463*2e9d4914SAndroid Build Coastguard Worker SettingConstIterator copy(*this);
1464*2e9d4914SAndroid Build Coastguard Worker copy -= offset;
1465*2e9d4914SAndroid Build Coastguard Worker
1466*2e9d4914SAndroid Build Coastguard Worker return(copy);
1467*2e9d4914SAndroid Build Coastguard Worker }
1468*2e9d4914SAndroid Build Coastguard Worker
1469*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
1470*2e9d4914SAndroid Build Coastguard Worker
operator -=(int offset)1471*2e9d4914SAndroid Build Coastguard Worker SettingConstIterator& SettingConstIterator::operator-=(int offset)
1472*2e9d4914SAndroid Build Coastguard Worker {
1473*2e9d4914SAndroid Build Coastguard Worker _idx -= offset;
1474*2e9d4914SAndroid Build Coastguard Worker
1475*2e9d4914SAndroid Build Coastguard Worker return(*this);
1476*2e9d4914SAndroid Build Coastguard Worker }
1477*2e9d4914SAndroid Build Coastguard Worker
1478*2e9d4914SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
1479*2e9d4914SAndroid Build Coastguard Worker
operator -(SettingConstIterator const & other) const1480*2e9d4914SAndroid Build Coastguard Worker int SettingConstIterator::operator-(SettingConstIterator const &other) const
1481*2e9d4914SAndroid Build Coastguard Worker {
1482*2e9d4914SAndroid Build Coastguard Worker return(_idx - other._idx);
1483*2e9d4914SAndroid Build Coastguard Worker }
1484*2e9d4914SAndroid Build Coastguard Worker
1485*2e9d4914SAndroid Build Coastguard Worker
1486*2e9d4914SAndroid Build Coastguard Worker } // namespace libconfig
1487*2e9d4914SAndroid Build Coastguard Worker
1488