-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathConfigSection.h
184 lines (139 loc) · 5.13 KB
/
ConfigSection.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
/*------------------------------------------------------------------------------
Copyright (c) 2000-2007 Tyrell Corporation. All rights reserved.
Tyrell ConfigSection
File : ConfigSection.h
Version : $Revision$
Author : $Author$
Location : $HeadURL$
Copyright notice:
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 3
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
------------------------------------------------------------------------------*/
#ifndef CONFIG_SECTION_H
#define CONFIG_SECTION_H
#ifndef __cplusplus
#error This is a C++ include file
#endif
/* ============================================================ include files */
#include <map>
#include <string>
#include "Referable.h"
/* ================================================================ constants */
/* =================================================================== macros */
/* =============================================================== data types */
/**
* A configuration file representation. The file is of the syntax:
*
* <pre>
* # this is a whole line comment
* key = value
* an ugly key name = long value # this end is a comment too
* </pre>
*
* also empty lines are ignored and all white space is removed
* from the front and end of keys / values
*
* Knwon problem: you can't use '#' in any part of a key / value pair
*
* @author $Author$
* @version $Revision$
*/
class ConfigSection : public virtual Referable
{
private:
/**
* Type of the hash table used in this class.
*/
typedef std::map<std::string, std::string> TableType;
/**
* Hash table holding the configuration information.
*/
TableType table;
protected:
public:
/**
* Default constructor.
*
* @exception Exception
*/
inline
ConfigSection ( void ) throw ( Exception )
{
}
/**
* Destructor.
*
* @exception Exception
*/
inline virtual
~ConfigSection ( void ) throw ( Exception )
{
}
/* TODO
inline
ConfigSection ( const ConfigSection & di ) throw ( Exception )
{
}
inline ConfigSection &
operator= ( const ConfigSection * di ) throw ( Exception )
{
}
*/
/**
* Add a key / value pair to the configuration information.
*
* @param key the key to add the value by
* @param value the value to add for the key
* @return true if adding was successful, false otherwise
* @exception Exception
*/
virtual bool
add ( const char * key,
const char * value ) throw ( Exception );
/**
* Get a value for a key.
*
* @param key the key to get the value for
* @return the value for the key, or NULL if the key doesn't exist.
* @exception Exception
*/
virtual const char *
get ( const char * key ) const throw ( Exception );
/**
* Get a value for a key, or throw an Exception.
*
* @param key the key to get the value for
* @param message1 message part 1 of the Exception to be thrown.
* @param message2 message part 2 of the Exception to be thrown.
* @param code error code of the Exception to be thrown.
* @return the value for the key. The return value is never NULL.
* @exception Exception
*/
virtual const char *
getForSure ( const char * key,
const char * message1 = 0,
const char * message2 = 0,
int code = 0 ) const
throw ( Exception );
/**
* Add a line of configuration information.
*
* @param line the line to add.
* @return true if a new key was added, false otherwise.
* @exception Exception
*/
virtual bool
addLine ( const char * line ) throw ( Exception );
};
/* ================================================= external data structures */
/* ====================================================== function prototypes */
#endif /* CONFIG_SECTION_H */