#ifndef CONFIG_H #define CONFIG_H #include #include /** 設定項目のキーの最大長 */ #define CONFIG_MAX_KEY_LENGTH 64 /** 設定項目の値の最大長 */ #define CONFIG_MAX_VALUE_LENGTH 64 /** * @brief 設定項目の構造体 * * キーと値のペアで1つの設定項目を表現する。 */ typedef struct ConfigItem { char key[CONFIG_MAX_KEY_LENGTH]; /**< 設定のキー */ char value[CONFIG_MAX_VALUE_LENGTH]; /**< 設定の値 */ } ConfigItem; /** * @brief 設定管理構造体 * * 全ての設定項目とその数を管理する。 */ typedef struct Config { ConfigItem *items; /**< 設定項目の配列 */ int count; /**< 設定項目の数 */ } Config; /** * @brief 設定ファイルの読み込み * * 指定されたファイルから設定を読み込む。ファイルが存在しない場合は * デフォルト値で新規作成する。各行は"キー=値"の形式である必要がある。 * * @param filename 設定ファイルのパス * @return Config* 読み込んだ設定へのポインタ、失敗時は`NULL` */ Config *loadConfig(const char *filename); /** * @brief 文字列値の取得 * * @param config 設定構造体 * @param key 検索するキー * @return const char* 見つかった値の文字列、見つからない場合は`NULL` */ const char *getConfigValue(const Config *config, const char *key); /** * @brief 整数値の取得 * * @param config 設定構造体 * @param key 検索するキー * @param target 解析した値を格納するポインタ * @return int 成功時は`0`、キーが見つからないまたは値が不正な場合は`1` */ int getConfigValueInt(const Config *config, const char *key, int *target); /** * @brief 長整数値の取得 * * @param config 設定構造体 * @param key 検索するキー * @param target 解析した値を格納するポインタ * @return int 成功時は0、キーが見つからないまたは値が不正な場合は1 */ int getConfigValueLong(const Config *config, const char *key, long *target); /** * @brief 浮動小数点値の取得 * * @param config 設定構造体 * @param key 検索するキー * @param target 解析した値を格納するポインタ * @return int 成功時は0、キーが見つからないまたは値が不正な場合は1 */ int getConfigValueDouble(const Config *config, const char *key, double *target); #endif