readconf  1.6
設定ファイル読み込みモジュール
 全て データ構造 ファイル 関数 変数 型定義 列挙型 列挙型の値 マクロ定義 グループ
readconf.h
説明を見る。
1 /**
2  * @file
3  * @brief 設定ファイル読み込み関数用構造体等定義ファイル。
4  * @author tsntsumi
5  * @version 1.6
6  * @since v1.0 2013/12
7  */
8 #ifndef READCONF_H
9 #define READCONF_H
10 
11 #if !defined(_MSC_VER)
12 #include <stdbool.h>
13 #elif !defined(bool)
14 #define bool int
15 #define true 1
16 #define false 0
17 #endif
18 
19 /**
20  * @defgroup ReadConf 設定ファイル読み込みモジュール
21  */
22 
23 /**
24  * @brief 設定項目の型ID。
25  * @ingroup ReadConf
26  */
27 typedef enum RCValueType
28 {
29  /** @brief 文字列型。 */
31  /** @brief 整数型(long)。 */
33  /** @brief 実数型(double)。 */
35  /** @brief 真偽値型(bool)。 */
37 } RCValueType;
38 
39 /**
40  * @brief 設定項目値の共用体。
41  * @ingroup ReadConf
42  */
43 typedef union RCConfValue
44 {
45  char *string;
46  long integer;
47  double real;
48  bool boolean;
49 } RCConfValue;
50 
51 /**
52  * @brief 設定項目値を検証する関数。
53  */
54 typedef bool (*RCValidator)(char *name, RCValueType type, RCConfValue value);
55 
56 /**
57  * @brief 設定項目値文字列を数値に変換する関数。
58  * @param[in] name 項目名。
59  * @param[in] type 型。
60  * @param[in] string 読み込んだ設定項目値文字列。
61  * @param[out] value 変換後の値を格納する変数へのポインタ。
62  * @return 変換に成功したら true 、失敗したら false 。
63  */
64 typedef bool (*RCConvertor)(const char *name,
65  RCValueType type,
66  const char *string,
67  RCConfValue *value);
68 
69 /**
70  * @brief 設定項目の構造体。
71  * @details
72  * この構造体は、 readconf() が読み込むべき設定項目の名前と
73  * デフォルト値を指定するのに、アプリケーションによって使用されます。
74  * また、読み込んだ設定項目の値を格納する場所としても
75  * readconf() によって使用されます。
76  * @ingroup ReadConf
77  */
78 typedef struct RCConfItem
79 {
80  /** @brief 項目名。 */
81  char *name;
82  /** @brief 項目の型。 */
84  /** @brief デフォルト値の文字列表現。 */
86  /** @brief 読み込んだ値を検証する関数。 */
88  /** @brief 読み込んだ値文字列を数値に変換する関数。 */
90  /** @brief デフォルト値。 */
92  /** @brief 読み込んだ値。 */
94  /** @brief 読み込んだ時の行番号。 */
95  size_t lineNo;
96 } RCConfItem;
97 
98 /**
99  * @defgroup ErrorInfo エラー情報
100  * @{
101  */
102 
103 /**
104  * @brief エラー番号。
105  */
106 typedef enum RCErrorNo
107 {
108  /** @brief エラー無し。 */
110  /** @brief 読み込み先の設定項目構造体が指定されませんでした。 */
112  /** @brief 読み込み先の設定項目構造体がNULLでした。 */
114  /** @brief 設定ファイルをオープンできませんでした。 */
116  /** @brief メモリを確保できませんでした。 */
118  /** @brief 読み込もうとした文字列が長すぎました。 */
120  /** @brief 読み込もうとした名前が長すぎました。 */
122  /** @brief 設定ファイルの構文誤りです。 */
124  /** @brief 設定項目の型が合っていません。 */
126  /** @brief 予期しない設定項目名が現れました。 */
128  /** @brief 設定項目が再定義されました。 */
130  /** @brief 数値の形式が間違っています。 */
132  /** @brief 検証に失敗しました。 */
134  /** @brief 真偽値の値が間違っています。 */
136  /** @brief 定数名を数値に変換できませんでした。 */
138 } RCErrorNo;
139 
140 /**
141  * @brief エラー情報格納構造体。
142  */
143 typedef struct RCError
144 {
145  /** @brief エラー番号。 */
147  /** @brief 発生した行番号。 */
148  size_t lineNo;
149  /** @brief 発生した理由。 */
150  char *reason;
151 } RCError;
152 
153 #ifdef __cplusplus
154 extern "C" {
155 #endif
156 
157 /**
158  * @brief エラー情報格納配列。
159  */
160 extern RCError *RCRaisedErrors;
161 
162 /**
163  * @brief エラー情報数。
164  */
165 extern size_t RCNumRaisedErrors;
166 
167 #ifdef __cplusplus
168 }
169 #endif
170 
171 /**
172  * @}
173  */
174 
175 /**
176  * @defgroup OptionParams オプションパラメータグローバル変数
177  * @{
178  */
179 
180 #ifdef __cplusplus
181 extern "C" {
182 #endif
183 
184 /**
185  * @brief 設定ファイルから項目名を読み込む際の最大の長さ。
186  */
187 extern size_t RCMaxNameLength;
188 
189 /**
190  * @brief 設定ファイルから文字列を読み込む際の最大の長さ。
191  */
192 extern size_t RCMaxStringLength;
193 
194 #ifdef __cplusplus
195 }
196 #endif
197 
198 /**
199  * @}
200  */
201 
202 #ifdef __cplusplus
203 extern "C" {
204 #endif
205 
206 /**
207  * @brief 指定の設定ファイルから設定を読み込み、指定された構造体配列に格納します。
208  * @details
209  * 設定ファイルから読み込みたい項目名と、
210  * 項目を読み込めなかった際のデフォルト値を指定して本関数を呼び出します。
211  * 本関数は設定ファイルを読み込んで、指定された項目に対応する値を設定します。
212  * @param[inout] items 読み込むべき設定項目の名前とデフォルト値を設定した
213  * 構造体配列へのポインタ。
214  * 読み込んだ設定項目の値を格納するのにも使用されます。
215  * @param[in] numItems 構造体配列 items の項目数。
216  * @param[in] confPath 読み込む設定ファイルへのパス。
217  * @return 読み込みに成功したら true、読み込み時にエラーがあったら false。
218  * @ingroup ReadConf
219  */
220 bool readconf(RCConfItem *items, size_t numItems, const char *confPath);
221 
222 /**
223  * @brief 指定された設定項目構造体配列の文字列を解放します。
224  * @details 設定項目構造体が表す型が文字列の場合に、文字列を解放します。
225  * 解放した後は NULL を設定します。
226  * @param[inout] items 解放すべき文字列が格納された設定項目構造体配列。
227  * @param[in] numItems 構造体配列 items の項目数。
228  * @ingroup ReadConf
229  */
230 void RCFreeStringValueInItems(RCConfItem *items, size_t numItems);
231 
232 /**
233  * @brief readconf() による読み込み処理で発生したエラー情報構造体配列を解放します。
234  * @ingroup ReadConf
235  */
236 void RCFreeRaisedErrors(void);
237 
238 /**
239  * @brief 指定された文字列を複製します。
240  * @param str 複製する文字列。
241  * @return 複製した文字列。
242  */
243 char *RCDuplicateString(const char *str);
244 
245 #ifdef __cplusplus
246 }
247 #endif
248 
249 #ifndef ELEMENTSOF
250 #define ELEMENTSOF(ARRAY) (sizeof(ARRAY)/sizeof(ARRAY[0]))
251 #endif
252 
253 #endif /* READCONF_H */
254 
255 /*
256  * Local variables: ***
257  * coding: utf-8-unix ***
258  * mode: C ***
259  * c-file-style: "gnu" ***
260  * tab-width: 8 ***
261  * indent-tabs-mode: nil ***
262  * End: ***
263  */
union RCConfValue RCConfValue
設定項目値の共用体。
実数型(double)。
Definition: readconf.h:34
RCConvertor convertor
読み込んだ値文字列を数値に変換する関数。
Definition: readconf.h:89
char * RCDuplicateString(const char *str)
指定された文字列を複製します。
Definition: readconf.c:159
設定項目の構造体。
Definition: readconf.h:78
bool(* RCConvertor)(const char *name, RCValueType type, const char *string, RCConfValue *value)
設定項目値文字列を数値に変換する関数。
Definition: readconf.h:64
size_t RCMaxStringLength
設定ファイルから文字列を読み込む際の最大の長さ。
Definition: readconf.c:40
設定項目が再定義されました。
Definition: readconf.h:129
struct RCError RCError
エラー情報格納構造体。
RCValueType type
項目の型。
Definition: readconf.h:83
定数名を数値に変換できませんでした。
Definition: readconf.h:137
設定項目の型が合っていません。
Definition: readconf.h:125
long integer
Definition: readconf.h:46
size_t lineNo
発生した行番号。
Definition: readconf.h:148
文字列型。
Definition: readconf.h:30
struct RCConfItem RCConfItem
設定項目の構造体。
RCErrorNo
エラー番号。
Definition: readconf.h:106
検証に失敗しました。
Definition: readconf.h:133
真偽値の値が間違っています。
Definition: readconf.h:135
真偽値型(bool)。
Definition: readconf.h:36
RCError * RCRaisedErrors
エラー情報格納配列。
Definition: readconf.c:38
char * string
Definition: readconf.h:45
RCConfValue value
読み込んだ値。
Definition: readconf.h:93
エラー情報格納構造体。
Definition: readconf.h:143
void RCFreeStringValueInItems(RCConfItem *items, size_t numItems)
指定された設定項目構造体配列の文字列を解放します。
Definition: readconf.c:129
予期しない設定項目名が現れました。
Definition: readconf.h:127
RCErrorNo errorNo
エラー番号。
Definition: readconf.h:146
size_t lineNo
読み込んだ時の行番号。
Definition: readconf.h:95
読み込み先の設定項目構造体が指定されませんでした。
Definition: readconf.h:111
double real
Definition: readconf.h:47
RCValueType
設定項目の型ID。
Definition: readconf.h:27
メモリを確保できませんでした。
Definition: readconf.h:117
読み込もうとした文字列が長すぎました。
Definition: readconf.h:119
char * name
項目名。
Definition: readconf.h:81
char * defaultAsString
デフォルト値の文字列表現。
Definition: readconf.h:85
設定項目値の共用体。
Definition: readconf.h:43
読み込もうとした名前が長すぎました。
Definition: readconf.h:121
RCValidator validator
読み込んだ値を検証する関数。
Definition: readconf.h:87
char * reason
発生した理由。
Definition: readconf.h:150
整数型(long)。
Definition: readconf.h:32
エラー無し。
Definition: readconf.h:109
bool readconf(RCConfItem *items, size_t numItems, const char *confPath)
指定の設定ファイルから設定を読み込み、指定された構造体配列に格納します。
Definition: readconf.c:96
読み込み先の設定項目構造体がNULLでした。
Definition: readconf.h:113
設定ファイルの構文誤りです。
Definition: readconf.h:123
bool(* RCValidator)(char *name, RCValueType type, RCConfValue value)
設定項目値を検証する関数。
Definition: readconf.h:54
RCConfValue defaultValue
デフォルト値。
Definition: readconf.h:91
void RCFreeRaisedErrors(void)
readconf() による読み込み処理で発生したエラー情報構造体配列を解放します。
Definition: readconf.c:145
設定ファイルをオープンできませんでした。
Definition: readconf.h:115
数値の形式が間違っています。
Definition: readconf.h:131
size_t RCNumRaisedErrors
エラー情報数。
Definition: readconf.c:37
size_t RCMaxNameLength
設定ファイルから項目名を読み込む際の最大の長さ。
Definition: readconf.c:39
bool boolean
Definition: readconf.h:48