root/doc/html/libconfig_8h_09_09-source.html @ 259

Revision 259, 44.7 kB (checked in by smidl, 15 years ago)

doc

Line 
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
3<title>mixpp: work/git/mixpp/bdm/libconfig/libconfig.h++ Source File</title>
4<link href="doxygen.css" rel="stylesheet" type="text/css">
5<link href="tabs.css" rel="stylesheet" type="text/css">
6</head><body>
7<!-- Generated by Doxygen 1.5.6 -->
8<div class="navigation" id="top">
9  <div class="tabs">
10    <ul>
11      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
12      <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
13      <li><a href="modules.html"><span>Modules</span></a></li>
14      <li><a href="annotated.html"><span>Classes</span></a></li>
15      <li class="current"><a href="files.html"><span>Files</span></a></li>
16    </ul>
17  </div>
18<h1>work/git/mixpp/bdm/libconfig/libconfig.h++</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* ----------------------------------------------------------------------------</span>
19<a name="l00002"></a>00002 <span class="comment">   libconfig - A library for processing structured configuration files</span>
20<a name="l00003"></a>00003 <span class="comment">   Copyright (C) 2005-2008  Mark A Lindner</span>
21<a name="l00004"></a>00004 <span class="comment"> </span>
22<a name="l00005"></a>00005 <span class="comment">   This file is part of libconfig.</span>
23<a name="l00006"></a>00006 <span class="comment">    </span>
24<a name="l00007"></a>00007 <span class="comment">   This library is free software; you can redistribute it and/or</span>
25<a name="l00008"></a>00008 <span class="comment">   modify it under the terms of the GNU Lesser General Public License</span>
26<a name="l00009"></a>00009 <span class="comment">   as published by the Free Software Foundation; either version 2.1 of</span>
27<a name="l00010"></a>00010 <span class="comment">   the License, or (at your option) any later version.</span>
28<a name="l00011"></a>00011 <span class="comment">    </span>
29<a name="l00012"></a>00012 <span class="comment">   This library is distributed in the hope that it will be useful, but</span>
30<a name="l00013"></a>00013 <span class="comment">   WITHOUT ANY WARRANTY; without even the implied warranty of</span>
31<a name="l00014"></a>00014 <span class="comment">   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
32<a name="l00015"></a>00015 <span class="comment">   Lesser General Public License for more details.</span>
33<a name="l00016"></a>00016 <span class="comment">    </span>
34<a name="l00017"></a>00017 <span class="comment">   You should have received a copy of the GNU Library General Public</span>
35<a name="l00018"></a>00018 <span class="comment">   License along with this library; if not, see</span>
36<a name="l00019"></a>00019 <span class="comment">   &lt;http://www.gnu.org/licenses/&gt;.</span>
37<a name="l00020"></a>00020 <span class="comment">   ----------------------------------------------------------------------------</span>
38<a name="l00021"></a>00021 <span class="comment">*/</span>
39<a name="l00022"></a>00022
40<a name="l00023"></a>00023 <span class="preprocessor">#ifndef __libconfig_hpp</span>
41<a name="l00024"></a>00024 <span class="preprocessor"></span><span class="preprocessor">#define __libconfig_hpp</span>
42<a name="l00025"></a>00025 <span class="preprocessor"></span>
43<a name="l00026"></a>00026 <span class="preprocessor">#include &lt;stdio.h&gt;</span>
44<a name="l00027"></a>00027 <span class="preprocessor">#include &lt;string&gt;</span>
45<a name="l00028"></a>00028 <span class="preprocessor">#include &lt;map&gt;</span>
46<a name="l00029"></a>00029
47<a name="l00030"></a>00030 <span class="keyword">namespace </span>libconfig
48<a name="l00031"></a>00031 {
49<a name="l00032"></a>00032
50<a name="l00033"></a>00033 <span class="preprocessor">#include "libconfig.h"</span>
51<a name="l00034"></a>00034
52<a name="l00035"></a>00035   <span class="keyword">class </span>LIBCONFIG_API ConfigException : <span class="keyword">public</span> std::exception { };
53<a name="l00036"></a>00036
54<a name="l00037"></a>00037   <span class="keyword">class </span>Setting; <span class="comment">// fwd decl</span>
55<a name="l00038"></a>00038
56<a name="l00039"></a>00039   <span class="keyword">class </span>LIBCONFIG_API SettingException : <span class="keyword">public</span> ConfigException
57<a name="l00040"></a>00040   {
58<a name="l00041"></a>00041     <span class="keyword">friend</span> <span class="keyword">class </span>Config;
59<a name="l00042"></a>00042
60<a name="l00043"></a>00043     <span class="keyword">public</span>:
61<a name="l00044"></a>00044
62<a name="l00045"></a>00045     SettingException(<span class="keyword">const</span> SettingException &amp;other);
63<a name="l00046"></a>00046     SettingException&amp; operator=(<span class="keyword">const</span> SettingException &amp;other);
64<a name="l00047"></a>00047     
65<a name="l00048"></a>00048     <span class="keyword">virtual</span> ~SettingException() throw();
66<a name="l00049"></a>00049
67<a name="l00050"></a>00050     const <span class="keywordtype">char</span> *getPath() const;
68<a name="l00051"></a>00051
69<a name="l00052"></a>00052     virtual const <span class="keywordtype">char</span> *what() const throw();
70<a name="l00053"></a>00053     
71<a name="l00054"></a>00054     protected:
72<a name="l00055"></a>00055
73<a name="l00056"></a>00056     SettingException(const Setting &amp;setting);
74<a name="l00057"></a>00057     SettingException(const Setting &amp;setting, <span class="keywordtype">int</span> idx);
75<a name="l00058"></a>00058     SettingException(const Setting &amp;setting, const <span class="keywordtype">char</span> *name);
76<a name="l00059"></a>00059     SettingException(const <span class="keywordtype">char</span> *path);
77<a name="l00060"></a>00060
78<a name="l00061"></a>00061     private:
79<a name="l00062"></a>00062
80<a name="l00063"></a>00063     <span class="keywordtype">char</span> *_path;
81<a name="l00064"></a>00064   };
82<a name="l00065"></a>00065   
83<a name="l00066"></a>00066   class LIBCONFIG_API SettingTypeException : public SettingException
84<a name="l00067"></a>00067   {
85<a name="l00068"></a>00068     <span class="keyword">friend</span> <span class="keyword">class </span>Config;
86<a name="l00069"></a>00069     <span class="keyword">friend</span> <span class="keyword">class </span>Setting;
87<a name="l00070"></a>00070
88<a name="l00071"></a>00071     <span class="keyword">const</span> <span class="keywordtype">char</span> *what() <span class="keyword">const</span> throw();
89<a name="l00072"></a>00072     
90<a name="l00073"></a>00073     private:
91<a name="l00074"></a>00074
92<a name="l00075"></a>00075     SettingTypeException(const Setting &amp;setting);
93<a name="l00076"></a>00076     SettingTypeException(const Setting &amp;setting, <span class="keywordtype">int</span> idx);
94<a name="l00077"></a>00077     SettingTypeException(const Setting &amp;setting, const <span class="keywordtype">char</span> *name);
95<a name="l00078"></a>00078   };
96<a name="l00079"></a>00079
97<a name="l00080"></a>00080   class LIBCONFIG_API SettingNotFoundException : public SettingException
98<a name="l00081"></a>00081   {
99<a name="l00082"></a>00082     <span class="keyword">friend</span> <span class="keyword">class </span>Config;
100<a name="l00083"></a>00083     <span class="keyword">friend</span> <span class="keyword">class </span>Setting;
101<a name="l00084"></a>00084
102<a name="l00085"></a>00085     <span class="keyword">const</span> <span class="keywordtype">char</span> *what() <span class="keyword">const</span> throw();
103<a name="l00086"></a>00086     
104<a name="l00087"></a>00087     private:
105<a name="l00088"></a>00088
106<a name="l00089"></a>00089     SettingNotFoundException(const Setting &amp;setting, <span class="keywordtype">int</span> idx);
107<a name="l00090"></a>00090     SettingNotFoundException(const Setting &amp;setting, const <span class="keywordtype">char</span> *name);
108<a name="l00091"></a>00091     SettingNotFoundException(const <span class="keywordtype">char</span> *path);
109<a name="l00092"></a>00092   };
110<a name="l00093"></a>00093
111<a name="l00094"></a>00094   class LIBCONFIG_API SettingNameException : public SettingException
112<a name="l00095"></a>00095   {
113<a name="l00096"></a>00096     <span class="keyword">friend</span> <span class="keyword">class </span>Config;
114<a name="l00097"></a>00097     <span class="keyword">friend</span> <span class="keyword">class </span>Setting;
115<a name="l00098"></a>00098
116<a name="l00099"></a>00099     <span class="keyword">const</span> <span class="keywordtype">char</span> *what() <span class="keyword">const</span> throw();
117<a name="l00100"></a>00100     
118<a name="l00101"></a>00101     private:
119<a name="l00102"></a>00102
120<a name="l00103"></a>00103     SettingNameException(const Setting &amp;setting, const <span class="keywordtype">char</span> *name);
121<a name="l00104"></a>00104   };
122<a name="l00105"></a>00105
123<a name="l00106"></a>00106   class LIBCONFIG_API FileIOException : public ConfigException
124<a name="l00107"></a>00107   {
125<a name="l00108"></a>00108     <span class="keyword">const</span> <span class="keywordtype">char</span> *what() <span class="keyword">const</span> throw();
126<a name="l00109"></a>00109   };
127<a name="l00110"></a>00110
128<a name="l00111"></a>00111   class LIBCONFIG_API ParseException : public ConfigException
129<a name="l00112"></a>00112   {
130<a name="l00113"></a>00113     <span class="keyword">friend</span> <span class="keyword">class </span>Config;
131<a name="l00114"></a>00114     
132<a name="l00115"></a>00115     <span class="keyword">public</span>:
133<a name="l00116"></a>00116
134<a name="l00117"></a>00117     <span class="keyword">virtual</span> ~ParseException() throw();
135<a name="l00118"></a>00118
136<a name="l00119"></a>00119     inline <span class="keywordtype">int</span> getLine() throw()
137<a name="l00120"></a>00120     { <span class="keywordflow">return</span>(_line); }
138<a name="l00121"></a>00121
139<a name="l00122"></a>00122     <span class="keyword">inline</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *getError() throw()
140<a name="l00123"></a>00123     { <span class="keywordflow">return</span>(_error); }
141<a name="l00124"></a>00124
142<a name="l00125"></a>00125     <span class="keyword">const</span> <span class="keywordtype">char</span> *what() <span class="keyword">const</span> throw();
143<a name="l00126"></a>00126     
144<a name="l00127"></a>00127     private:
145<a name="l00128"></a>00128
146<a name="l00129"></a>00129     ParseException(<span class="keywordtype">int</span> line, const <span class="keywordtype">char</span> *error);
147<a name="l00130"></a>00130
148<a name="l00131"></a>00131     <span class="keywordtype">int</span> _line;
149<a name="l00132"></a>00132     const <span class="keywordtype">char</span> *_error;
150<a name="l00133"></a>00133   };
151<a name="l00134"></a>00134
152<a name="l00135"></a>00135   class LIBCONFIG_API Setting
153<a name="l00136"></a>00136   {
154<a name="l00137"></a>00137     <span class="keyword">friend</span> <span class="keyword">class </span>Config;
155<a name="l00138"></a>00138
156<a name="l00139"></a>00139     <span class="keyword">public</span>:
157<a name="l00140"></a>00140     
158<a name="l00141"></a>00141     <span class="keyword">enum</span> Type
159<a name="l00142"></a>00142     {
160<a name="l00143"></a>00143       TypeNone = 0,
161<a name="l00144"></a>00144       <span class="comment">// scalar types</span>
162<a name="l00145"></a>00145       TypeInt,
163<a name="l00146"></a>00146       TypeInt64,
164<a name="l00147"></a>00147       TypeFloat,
165<a name="l00148"></a>00148       TypeString,
166<a name="l00149"></a>00149       TypeBoolean,
167<a name="l00150"></a>00150       <span class="comment">// aggregate types</span>
168<a name="l00151"></a>00151       TypeGroup,
169<a name="l00152"></a>00152       TypeArray,
170<a name="l00153"></a>00153       TypeList
171<a name="l00154"></a>00154     };
172<a name="l00155"></a>00155
173<a name="l00156"></a>00156     <span class="keyword">enum</span> Format
174<a name="l00157"></a>00157     {
175<a name="l00158"></a>00158       FormatDefault = 0,
176<a name="l00159"></a>00159       FormatHex = 1
177<a name="l00160"></a>00160     };
178<a name="l00161"></a>00161     
179<a name="l00162"></a>00162     <span class="keyword">private</span>:
180<a name="l00163"></a>00163
181<a name="l00164"></a>00164     config_setting_t *_setting;
182<a name="l00165"></a>00165     Type _type;
183<a name="l00166"></a>00166     Format _format;
184<a name="l00167"></a>00167
185<a name="l00168"></a>00168     Setting(config_setting_t *setting);
186<a name="l00169"></a>00169
187<a name="l00170"></a>00170     <span class="keywordtype">void</span> assertType(Type type) <span class="keyword">const</span>
188<a name="l00171"></a>00171       <span class="keywordflow">throw</span>(SettingTypeException);
189<a name="l00172"></a>00172     <span class="keyword">static</span> Setting &amp; wrapSetting(config_setting_t *setting);
190<a name="l00173"></a>00173
191<a name="l00174"></a>00174     Setting(<span class="keyword">const</span> Setting&amp; other); <span class="comment">// not supported</span>
192<a name="l00175"></a>00175     Setting&amp; operator=(<span class="keyword">const</span> Setting&amp; other); <span class="comment">// not supported</span>
193<a name="l00176"></a>00176     
194<a name="l00177"></a>00177     <span class="keyword">public</span>:
195<a name="l00178"></a>00178
196<a name="l00179"></a>00179     <span class="keyword">virtual</span> ~Setting() throw();
197<a name="l00180"></a>00180   
198<a name="l00181"></a>00181     inline Type getType() const throw() { <span class="keywordflow">return</span>(_type); }
199<a name="l00182"></a>00182
200<a name="l00183"></a>00183     <span class="keyword">inline</span> Format getFormat() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span>(_format); }
201<a name="l00184"></a>00184     <span class="keywordtype">void</span> setFormat(Format format) <span class="keywordflow">throw</span>();
202<a name="l00185"></a>00185
203<a name="l00186"></a>00186     operator bool() <span class="keyword">const</span> throw(SettingTypeException);
204<a name="l00187"></a>00187     operator <span class="keywordtype">long</span>() const throw(SettingTypeException);
205<a name="l00188"></a>00188     operator <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>() const throw(SettingTypeException);
206<a name="l00189"></a>00189     operator <span class="keywordtype">int</span>() const throw(SettingTypeException);
207<a name="l00190"></a>00190     operator <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>() const throw(SettingTypeException);
208<a name="l00191"></a>00191     operator <span class="keywordtype">long</span> <span class="keywordtype">long</span>() const throw(SettingTypeException);
209<a name="l00192"></a>00192     operator <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span>() const throw(SettingTypeException);
210<a name="l00193"></a>00193     operator <span class="keywordtype">double</span>() const throw(SettingTypeException);
211<a name="l00194"></a>00194     operator <span class="keywordtype">float</span>() const throw(SettingTypeException);
212<a name="l00195"></a>00195     operator const <span class="keywordtype">char</span> *() const throw(SettingTypeException);
213<a name="l00196"></a>00196     operator std::<span class="keywordtype">string</span>() const throw(SettingTypeException);
214<a name="l00197"></a>00197
215<a name="l00198"></a>00198     Setting &amp; operator=(<span class="keywordtype">bool</span> value) throw(SettingTypeException);
216<a name="l00199"></a>00199     Setting &amp; operator=(<span class="keywordtype">long</span> value) throw(SettingTypeException);
217<a name="l00200"></a>00200     Setting &amp; operator=(<span class="keywordtype">int</span> value) throw(SettingTypeException);
218<a name="l00201"></a>00201     Setting &amp; operator=(const <span class="keywordtype">long</span> <span class="keywordtype">long</span> &amp;value) throw(SettingTypeException);
219<a name="l00202"></a>00202     Setting &amp; operator=(const <span class="keywordtype">double</span> &amp;value) throw(SettingTypeException);
220<a name="l00203"></a>00203     Setting &amp; operator=(<span class="keywordtype">float</span> value) throw(SettingTypeException);
221<a name="l00204"></a>00204     Setting &amp; operator=(const <span class="keywordtype">char</span> *value) throw(SettingTypeException);
222<a name="l00205"></a>00205     Setting &amp; operator=(const std::<span class="keywordtype">string</span> &amp;value) throw(SettingTypeException);
223<a name="l00206"></a>00206
224<a name="l00207"></a>00207     Setting &amp; operator[](const <span class="keywordtype">char</span> * key) const
225<a name="l00208"></a>00208       throw(SettingTypeException, SettingNotFoundException);
226<a name="l00209"></a>00209
227<a name="l00210"></a>00210     inline Setting &amp; operator[](const std::<span class="keywordtype">string</span> &amp; key) const
228<a name="l00211"></a>00211       throw(SettingTypeException, SettingNotFoundException)
229<a name="l00212"></a>00212     { <span class="keywordflow">return</span>(<span class="keyword">operator</span>[](key.c_str())); }
230<a name="l00213"></a>00213
231<a name="l00214"></a>00214     Setting &amp; operator[](<span class="keywordtype">int</span> index) <span class="keyword">const</span>
232<a name="l00215"></a>00215       <span class="keywordflow">throw</span>(SettingTypeException, SettingNotFoundException);
233<a name="l00216"></a>00216
234<a name="l00217"></a>00217     <span class="keywordtype">bool</span> lookupValue(<span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keywordtype">bool</span> &amp;value) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
235<a name="l00218"></a>00218     <span class="keywordtype">bool</span> lookupValue(<span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keywordtype">long</span> &amp;value) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
236<a name="l00219"></a>00219     <span class="keywordtype">bool</span> lookupValue(<span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> &amp;value) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
237<a name="l00220"></a>00220     <span class="keywordtype">bool</span> lookupValue(<span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keywordtype">int</span> &amp;value) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
238<a name="l00221"></a>00221     <span class="keywordtype">bool</span> lookupValue(<span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &amp;value) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
239<a name="l00222"></a>00222     <span class="keywordtype">bool</span> lookupValue(<span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keywordtype">long</span> <span class="keywordtype">long</span> &amp;value) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
240<a name="l00223"></a>00223     <span class="keywordtype">bool</span> lookupValue(<span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> &amp;value)
241<a name="l00224"></a>00224       <span class="keyword">const</span> <span class="keywordflow">throw</span>();
242<a name="l00225"></a>00225     <span class="keywordtype">bool</span> lookupValue(<span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keywordtype">double</span> &amp;value) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
243<a name="l00226"></a>00226     <span class="keywordtype">bool</span> lookupValue(<span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keywordtype">float</span> &amp;value) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
244<a name="l00227"></a>00227     <span class="keywordtype">bool</span> lookupValue(<span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keyword">const</span> <span class="keywordtype">char</span> *&amp;value) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
245<a name="l00228"></a>00228     <span class="keywordtype">bool</span> lookupValue(<span class="keyword">const</span> <span class="keywordtype">char</span> *name, std::string &amp;value) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
246<a name="l00229"></a>00229
247<a name="l00230"></a>00230     <span class="keyword">inline</span> <span class="keywordtype">bool</span> lookupValue(<span class="keyword">const</span> std::string &amp;name, <span class="keywordtype">bool</span> &amp;value)
248<a name="l00231"></a>00231       <span class="keyword">const</span> <span class="keywordflow">throw</span>()
249<a name="l00232"></a>00232     { <span class="keywordflow">return</span>(lookupValue(name.c_str(), value)); }
250<a name="l00233"></a>00233       
251<a name="l00234"></a>00234     <span class="keyword">inline</span> <span class="keywordtype">bool</span> lookupValue(<span class="keyword">const</span> std::string &amp;name, <span class="keywordtype">long</span> &amp;value)
252<a name="l00235"></a>00235       <span class="keyword">const</span> <span class="keywordflow">throw</span>()
253<a name="l00236"></a>00236     { <span class="keywordflow">return</span>(lookupValue(name.c_str(), value)); }
254<a name="l00237"></a>00237
255<a name="l00238"></a>00238     <span class="keyword">inline</span> <span class="keywordtype">bool</span> lookupValue(<span class="keyword">const</span> std::string &amp;name, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> &amp;value)
256<a name="l00239"></a>00239       <span class="keyword">const</span> <span class="keywordflow">throw</span>()
257<a name="l00240"></a>00240     { <span class="keywordflow">return</span>(lookupValue(name.c_str(), value)); }
258<a name="l00241"></a>00241
259<a name="l00242"></a>00242     <span class="keyword">inline</span> <span class="keywordtype">bool</span> lookupValue(<span class="keyword">const</span> std::string &amp;name, <span class="keywordtype">int</span> &amp;value) <span class="keyword">const</span> <span class="keywordflow">throw</span>()
260<a name="l00243"></a>00243     { <span class="keywordflow">return</span>(lookupValue(name.c_str(), value)); }
261<a name="l00244"></a>00244
262<a name="l00245"></a>00245     <span class="keyword">inline</span> <span class="keywordtype">bool</span> lookupValue(<span class="keyword">const</span> std::string &amp;name, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &amp;value)
263<a name="l00246"></a>00246       <span class="keyword">const</span> <span class="keywordflow">throw</span>()
264<a name="l00247"></a>00247     { <span class="keywordflow">return</span>(lookupValue(name.c_str(), value)); }
265<a name="l00248"></a>00248
266<a name="l00249"></a>00249     <span class="keyword">inline</span> <span class="keywordtype">bool</span> lookupValue(<span class="keyword">const</span> std::string &amp;name, <span class="keywordtype">long</span> <span class="keywordtype">long</span> &amp;value)
267<a name="l00250"></a>00250       <span class="keyword">const</span> <span class="keywordflow">throw</span>()
268<a name="l00251"></a>00251     { <span class="keywordflow">return</span>(lookupValue(name.c_str(), value)); }
269<a name="l00252"></a>00252     
270<a name="l00253"></a>00253     <span class="keyword">inline</span> <span class="keywordtype">bool</span> lookupValue(<span class="keyword">const</span> std::string &amp;name,
271<a name="l00254"></a>00254                             <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> &amp;value) <span class="keyword">const</span> <span class="keywordflow">throw</span>()
272<a name="l00255"></a>00255     { <span class="keywordflow">return</span>(lookupValue(name.c_str(), value)); }
273<a name="l00256"></a>00256     
274<a name="l00257"></a>00257     <span class="keyword">inline</span> <span class="keywordtype">bool</span> lookupValue(<span class="keyword">const</span> std::string &amp;name, <span class="keywordtype">double</span> &amp;value) <span class="keyword">const</span>
275<a name="l00258"></a>00258       <span class="keywordflow">throw</span>()
276<a name="l00259"></a>00259     { <span class="keywordflow">return</span>(lookupValue(name.c_str(), value)); }
277<a name="l00260"></a>00260
278<a name="l00261"></a>00261     <span class="keyword">inline</span> <span class="keywordtype">bool</span> lookupValue(<span class="keyword">const</span> std::string &amp;name, <span class="keywordtype">float</span> &amp;value) <span class="keyword">const</span>
279<a name="l00262"></a>00262       <span class="keywordflow">throw</span>()
280<a name="l00263"></a>00263     { <span class="keywordflow">return</span>(lookupValue(name.c_str(), value)); }
281<a name="l00264"></a>00264
282<a name="l00265"></a>00265     <span class="keyword">inline</span> <span class="keywordtype">bool</span> lookupValue(<span class="keyword">const</span> std::string &amp;name, <span class="keyword">const</span> <span class="keywordtype">char</span> *&amp;value) <span class="keyword">const</span>
283<a name="l00266"></a>00266       <span class="keywordflow">throw</span>()
284<a name="l00267"></a>00267     { <span class="keywordflow">return</span>(lookupValue(name.c_str(), value)); }
285<a name="l00268"></a>00268
286<a name="l00269"></a>00269     <span class="keyword">inline</span> <span class="keywordtype">bool</span> lookupValue(<span class="keyword">const</span> std::string &amp;name, std::string &amp;value) <span class="keyword">const</span>
287<a name="l00270"></a>00270       <span class="keywordflow">throw</span>()
288<a name="l00271"></a>00271     { <span class="keywordflow">return</span>(lookupValue(name.c_str(), value)); }
289<a name="l00272"></a>00272     
290<a name="l00273"></a>00273     <span class="keywordtype">void</span> <span class="keyword">remove</span>(<span class="keyword">const</span> <span class="keywordtype">char</span> *name)
291<a name="l00274"></a>00274       <span class="keywordflow">throw</span>(SettingTypeException, SettingNotFoundException);
292<a name="l00275"></a>00275
293<a name="l00276"></a>00276     <span class="keyword">inline</span> <span class="keywordtype">void</span> <span class="keyword">remove</span>(<span class="keyword">const</span> std::string &amp; name)
294<a name="l00277"></a>00277       <span class="keywordflow">throw</span>(SettingTypeException, SettingNotFoundException)
295<a name="l00278"></a>00278     { <span class="keyword">remove</span>(name.c_str()); }
296<a name="l00279"></a>00279
297<a name="l00280"></a>00280     <span class="keywordtype">void</span> <span class="keyword">remove</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> idx)
298<a name="l00281"></a>00281       <span class="keywordflow">throw</span>(SettingTypeException, SettingNotFoundException);
299<a name="l00282"></a>00282     
300<a name="l00283"></a>00283     <span class="keyword">inline</span> Setting &amp; <span class="keyword">add</span>(<span class="keyword">const</span> std::string &amp; name, Type type)
301<a name="l00284"></a>00284       <span class="keywordflow">throw</span>(SettingNameException, SettingTypeException)
302<a name="l00285"></a>00285     { <span class="keywordflow">return</span>(<span class="keyword">add</span>(name.c_str(), type)); }
303<a name="l00286"></a>00286   
304<a name="l00287"></a>00287     Setting &amp; <span class="keyword">add</span>(<span class="keyword">const</span> <span class="keywordtype">char</span> *name, Type type)
305<a name="l00288"></a>00288       <span class="keywordflow">throw</span>(SettingNameException, SettingTypeException);
306<a name="l00289"></a>00289     
307<a name="l00290"></a>00290     Setting &amp; <span class="keyword">add</span>(Type type)
308<a name="l00291"></a>00291       <span class="keywordflow">throw</span>(SettingTypeException);
309<a name="l00292"></a>00292
310<a name="l00293"></a>00293     <span class="keyword">inline</span> <span class="keywordtype">bool</span> exists(<span class="keyword">const</span> std::string &amp; name) <span class="keyword">const</span> <span class="keywordflow">throw</span>()
311<a name="l00294"></a>00294     { <span class="keywordflow">return</span>(exists(name.c_str())); }
312<a name="l00295"></a>00295
313<a name="l00296"></a>00296     <span class="keywordtype">bool</span> exists(<span class="keyword">const</span> <span class="keywordtype">char</span> *name) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
314<a name="l00297"></a>00297   
315<a name="l00298"></a>00298     <span class="keywordtype">int</span> getLength() <span class="keyword">const</span> throw();
316<a name="l00299"></a>00299     const <span class="keywordtype">char</span> *getName() const throw();
317<a name="l00300"></a>00300     std::<span class="keywordtype">string</span> getPath() const;
318<a name="l00301"></a>00301     <span class="keywordtype">int</span> getIndex() const throw();
319<a name="l00302"></a>00302
320<a name="l00303"></a>00303     const Setting &amp; getParent() const throw(SettingNotFoundException);
321<a name="l00304"></a>00304     Setting &amp; getParent() throw(SettingNotFoundException);
322<a name="l00305"></a>00305
323<a name="l00306"></a>00306     <span class="keywordtype">bool</span> isRoot() const throw();
324<a name="l00307"></a>00307     
325<a name="l00308"></a>00308     inline <span class="keywordtype">bool</span> isGroup() const throw()
326<a name="l00309"></a>00309     { <span class="keywordflow">return</span>(_type == TypeGroup); }
327<a name="l00310"></a>00310
328<a name="l00311"></a>00311     <span class="keyword">inline</span> <span class="keywordtype">bool</span> isArray() <span class="keyword">const</span> throw()
329<a name="l00312"></a>00312     { <span class="keywordflow">return</span>(_type == TypeArray); }
330<a name="l00313"></a>00313
331<a name="l00314"></a>00314     <span class="keyword">inline</span> <span class="keywordtype">bool</span> isList() <span class="keyword">const</span> throw()
332<a name="l00315"></a>00315     { <span class="keywordflow">return</span>(_type == TypeList); }
333<a name="l00316"></a>00316
334<a name="l00317"></a>00317     <span class="keyword">inline</span> <span class="keywordtype">bool</span> isAggregate() <span class="keyword">const</span> throw()
335<a name="l00318"></a>00318     { <span class="keywordflow">return</span>(_type &gt;= TypeGroup); }
336<a name="l00319"></a>00319
337<a name="l00320"></a>00320     <span class="keyword">inline</span> <span class="keywordtype">bool</span> isScalar() <span class="keyword">const</span> throw()
338<a name="l00321"></a>00321     { <span class="keywordflow">return</span>((_type &gt; TypeNone) &amp;&amp; (_type &lt; TypeGroup)); }
339<a name="l00322"></a>00322
340<a name="l00323"></a>00323     <span class="keyword">inline</span> <span class="keywordtype">bool</span> isNumber() <span class="keyword">const</span> throw()
341<a name="l00324"></a>00324     { <span class="keywordflow">return</span>((_type == TypeInt) || (_type == TypeInt64)
342<a name="l00325"></a>00325              || (_type == TypeFloat)); }
343<a name="l00326"></a>00326
344<a name="l00327"></a>00327     <span class="keyword">inline</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> getSourceLine() <span class="keyword">const</span> throw()
345<a name="l00328"></a>00328     { <span class="keywordflow">return</span>(config_setting_source_line(_setting)); }
346<a name="l00329"></a>00329
347<a name="l00330"></a>00330         <span class="keyword">inline</span> Setting&amp; lookup(<span class="keyword">const</span> <span class="keywordtype">char</span> *path) <span class="keyword">const</span>
348<a name="l00331"></a>00331   <span class="keywordflow">throw</span>(SettingNotFoundException)
349<a name="l00332"></a>00332 {
350<a name="l00333"></a>00333   config_setting_t *s = config_lookup(_setting-&gt;config, path);
351<a name="l00334"></a>00334   <span class="keywordflow">if</span>(! s)
352<a name="l00335"></a>00335     <span class="keywordflow">throw</span> SettingNotFoundException(path);
353<a name="l00336"></a>00336
354<a name="l00337"></a>00337   <span class="keywordflow">return</span>(Setting::wrapSetting(s));
355<a name="l00338"></a>00338 }
356<a name="l00339"></a>00339   };
357<a name="l00340"></a>00340
358<a name="l00341"></a>00341   <span class="keyword">class </span>LIBCONFIG_API Config
359<a name="l00342"></a>00342   {
360<a name="l00343"></a>00343     <span class="keyword">private</span>:
361<a name="l00344"></a>00344     
362<a name="l00345"></a>00345     config_t _config;
363<a name="l00346"></a>00346     
364<a name="l00347"></a>00347     <span class="keyword">static</span> <span class="keywordtype">void</span> ConfigDestructor(<span class="keywordtype">void</span> *arg);
365<a name="l00348"></a>00348     Config(<span class="keyword">const</span> Config&amp; other); <span class="comment">// not supported</span>
366<a name="l00349"></a>00349     Config&amp; operator=(<span class="keyword">const</span> Config&amp; other); <span class="comment">// not supported</span>
367<a name="l00350"></a>00350
368<a name="l00351"></a>00351     <span class="keyword">public</span>:
369<a name="l00352"></a>00352
370<a name="l00353"></a>00353     Config();
371<a name="l00354"></a>00354     <span class="keyword">virtual</span> ~Config();
372<a name="l00355"></a>00355
373<a name="l00356"></a>00356     <span class="keywordtype">void</span> setAutoConvert(<span class="keywordtype">bool</span> flag);
374<a name="l00357"></a>00357     <span class="keywordtype">bool</span> getAutoConvert() <span class="keyword">const</span>;
375<a name="l00358"></a>00358     
376<a name="l00359"></a>00359     <span class="keywordtype">void</span> read(FILE *stream) <span class="keywordflow">throw</span>(ParseException);
377<a name="l00360"></a>00360     <span class="keywordtype">void</span> write(FILE *stream) <span class="keyword">const</span>;
378<a name="l00361"></a>00361
379<a name="l00362"></a>00362     <span class="keywordtype">void</span> readFile(<span class="keyword">const</span> <span class="keywordtype">char</span> *filename) <span class="keywordflow">throw</span>(FileIOException, ParseException);
380<a name="l00363"></a>00363     <span class="keywordtype">void</span> writeFile(<span class="keyword">const</span> <span class="keywordtype">char</span> *filename) <span class="keywordflow">throw</span>(FileIOException);
381<a name="l00364"></a>00364
382<a name="l00365"></a>00365     <span class="keyword">inline</span> Setting &amp; lookup(<span class="keyword">const</span> std::string &amp;path) <span class="keyword">const</span>
383<a name="l00366"></a>00366       <span class="keywordflow">throw</span>(SettingNotFoundException)
384<a name="l00367"></a>00367     { <span class="keywordflow">return</span>(lookup(path.c_str())); }
385<a name="l00368"></a>00368     
386<a name="l00369"></a>00369     Setting &amp; lookup(<span class="keyword">const</span> <span class="keywordtype">char</span> *path) <span class="keyword">const</span>
387<a name="l00370"></a>00370       <span class="keywordflow">throw</span>(SettingNotFoundException);
388<a name="l00371"></a>00371
389<a name="l00372"></a>00372     <span class="keyword">inline</span> <span class="keywordtype">bool</span> exists(<span class="keyword">const</span> std::string &amp; path) <span class="keyword">const</span> <span class="keywordflow">throw</span>()
390<a name="l00373"></a>00373     { <span class="keywordflow">return</span>(exists(path.c_str())); }
391<a name="l00374"></a>00374
392<a name="l00375"></a>00375     <span class="keywordtype">bool</span> exists(<span class="keyword">const</span> <span class="keywordtype">char</span> *path) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
393<a name="l00376"></a>00376     
394<a name="l00377"></a>00377     <span class="keywordtype">bool</span> lookupValue(<span class="keyword">const</span> <span class="keywordtype">char</span> *path, <span class="keywordtype">bool</span> &amp;value) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
395<a name="l00378"></a>00378     <span class="keywordtype">bool</span> lookupValue(<span class="keyword">const</span> <span class="keywordtype">char</span> *path, <span class="keywordtype">long</span> &amp;value) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
396<a name="l00379"></a>00379     <span class="keywordtype">bool</span> lookupValue(<span class="keyword">const</span> <span class="keywordtype">char</span> *path, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> &amp;value) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
397<a name="l00380"></a>00380     <span class="keywordtype">bool</span> lookupValue(<span class="keyword">const</span> <span class="keywordtype">char</span> *path, <span class="keywordtype">int</span> &amp;value) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
398<a name="l00381"></a>00381     <span class="keywordtype">bool</span> lookupValue(<span class="keyword">const</span> <span class="keywordtype">char</span> *path, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &amp;value) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
399<a name="l00382"></a>00382     <span class="keywordtype">bool</span> lookupValue(<span class="keyword">const</span> <span class="keywordtype">char</span> *path, <span class="keywordtype">long</span> <span class="keywordtype">long</span> &amp;value) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
400<a name="l00383"></a>00383     <span class="keywordtype">bool</span> lookupValue(<span class="keyword">const</span> <span class="keywordtype">char</span> *path, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> &amp;value)
401<a name="l00384"></a>00384       <span class="keyword">const</span> <span class="keywordflow">throw</span>();
402<a name="l00385"></a>00385     <span class="keywordtype">bool</span> lookupValue(<span class="keyword">const</span> <span class="keywordtype">char</span> *path, <span class="keywordtype">double</span> &amp;value) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
403<a name="l00386"></a>00386     <span class="keywordtype">bool</span> lookupValue(<span class="keyword">const</span> <span class="keywordtype">char</span> *path, <span class="keywordtype">float</span> &amp;value) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
404<a name="l00387"></a>00387     <span class="keywordtype">bool</span> lookupValue(<span class="keyword">const</span> <span class="keywordtype">char</span> *path, <span class="keyword">const</span> <span class="keywordtype">char</span> *&amp;value) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
405<a name="l00388"></a>00388     <span class="keywordtype">bool</span> lookupValue(<span class="keyword">const</span> <span class="keywordtype">char</span> *path, std::string &amp;value) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
406<a name="l00389"></a>00389
407<a name="l00390"></a>00390     <span class="keyword">inline</span> <span class="keywordtype">bool</span> lookupValue(<span class="keyword">const</span> std::string &amp;path, <span class="keywordtype">bool</span> &amp;value)
408<a name="l00391"></a>00391       <span class="keyword">const</span> <span class="keywordflow">throw</span>()
409<a name="l00392"></a>00392     { <span class="keywordflow">return</span>(lookupValue(path.c_str(), value)); }
410<a name="l00393"></a>00393       
411<a name="l00394"></a>00394     <span class="keyword">inline</span> <span class="keywordtype">bool</span> lookupValue(<span class="keyword">const</span> std::string &amp;path, <span class="keywordtype">long</span> &amp;value)
412<a name="l00395"></a>00395       <span class="keyword">const</span> <span class="keywordflow">throw</span>()
413<a name="l00396"></a>00396     { <span class="keywordflow">return</span>(lookupValue(path.c_str(), value)); }
414<a name="l00397"></a>00397
415<a name="l00398"></a>00398     <span class="keyword">inline</span> <span class="keywordtype">bool</span> lookupValue(<span class="keyword">const</span> std::string &amp;path, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> &amp;value)
416<a name="l00399"></a>00399       <span class="keyword">const</span> <span class="keywordflow">throw</span>()
417<a name="l00400"></a>00400     { <span class="keywordflow">return</span>(lookupValue(path.c_str(), value)); }
418<a name="l00401"></a>00401
419<a name="l00402"></a>00402     <span class="keyword">inline</span> <span class="keywordtype">bool</span> lookupValue(<span class="keyword">const</span> std::string &amp;path, <span class="keywordtype">int</span> &amp;value) <span class="keyword">const</span> <span class="keywordflow">throw</span>()
420<a name="l00403"></a>00403     { <span class="keywordflow">return</span>(lookupValue(path.c_str(), value)); }
421<a name="l00404"></a>00404
422<a name="l00405"></a>00405     <span class="keyword">inline</span> <span class="keywordtype">bool</span> lookupValue(<span class="keyword">const</span> std::string &amp;path, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &amp;value)
423<a name="l00406"></a>00406       <span class="keyword">const</span> <span class="keywordflow">throw</span>()
424<a name="l00407"></a>00407     { <span class="keywordflow">return</span>(lookupValue(path.c_str(), value)); }
425<a name="l00408"></a>00408
426<a name="l00409"></a>00409     <span class="keyword">inline</span> <span class="keywordtype">bool</span> lookupValue(<span class="keyword">const</span> std::string &amp;path, <span class="keywordtype">long</span> <span class="keywordtype">long</span> &amp;value)
427<a name="l00410"></a>00410       <span class="keyword">const</span> <span class="keywordflow">throw</span>()
428<a name="l00411"></a>00411     { <span class="keywordflow">return</span>(lookupValue(path.c_str(), value)); }
429<a name="l00412"></a>00412
430<a name="l00413"></a>00413     <span class="keyword">inline</span> <span class="keywordtype">bool</span> lookupValue(<span class="keyword">const</span> std::string &amp;path,
431<a name="l00414"></a>00414                             <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> &amp;value) <span class="keyword">const</span> <span class="keywordflow">throw</span>()
432<a name="l00415"></a>00415     { <span class="keywordflow">return</span>(lookupValue(path.c_str(), value)); }
433<a name="l00416"></a>00416     
434<a name="l00417"></a>00417     <span class="keyword">inline</span> <span class="keywordtype">bool</span> lookupValue(<span class="keyword">const</span> std::string &amp;path, <span class="keywordtype">double</span> &amp;value) <span class="keyword">const</span>
435<a name="l00418"></a>00418       <span class="keywordflow">throw</span>()
436<a name="l00419"></a>00419     { <span class="keywordflow">return</span>(lookupValue(path.c_str(), value)); }
437<a name="l00420"></a>00420
438<a name="l00421"></a>00421     <span class="keyword">inline</span> <span class="keywordtype">bool</span> lookupValue(<span class="keyword">const</span> std::string &amp;path, <span class="keywordtype">float</span> &amp;value) <span class="keyword">const</span>
439<a name="l00422"></a>00422       <span class="keywordflow">throw</span>()
440<a name="l00423"></a>00423     { <span class="keywordflow">return</span>(lookupValue(path.c_str(), value)); }
441<a name="l00424"></a>00424
442<a name="l00425"></a>00425     <span class="keyword">inline</span> <span class="keywordtype">bool</span> lookupValue(<span class="keyword">const</span> std::string &amp;path, <span class="keyword">const</span> <span class="keywordtype">char</span> *&amp;value) <span class="keyword">const</span>
443<a name="l00426"></a>00426       <span class="keywordflow">throw</span>()
444<a name="l00427"></a>00427     { <span class="keywordflow">return</span>(lookupValue(path.c_str(), value)); }
445<a name="l00428"></a>00428
446<a name="l00429"></a>00429     <span class="keyword">inline</span> <span class="keywordtype">bool</span> lookupValue(<span class="keyword">const</span> std::string &amp;path, std::string &amp;value) <span class="keyword">const</span>
447<a name="l00430"></a>00430       <span class="keywordflow">throw</span>()
448<a name="l00431"></a>00431     { <span class="keywordflow">return</span>(lookupValue(path.c_str(), value)); }
449<a name="l00432"></a>00432     
450<a name="l00433"></a>00433     Setting &amp; getRoot() <span class="keyword">const</span>;   
451<a name="l00434"></a>00434   };
452<a name="l00435"></a>00435
453<a name="l00436"></a>00436 } <span class="comment">// namespace libconfig</span>
454<a name="l00437"></a>00437
455<a name="l00438"></a>00438 <span class="preprocessor">#endif // __libconfig_hpp</span>
456</pre></div></div>
457<hr size="1"><address style="text-align: right;"><small>Generated on Tue Jan 27 16:29:52 2009 for mixpp by&nbsp;
458<a href="http://www.doxygen.org/index.html">
459<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
460</body>
461</html>
Note: See TracBrowser for help on using the browser.