--- nono/lib/config.h 2026/04/29 17:05:12 1.1.1.5 +++ nono/lib/config.h 2026/04/29 17:05:15 1.1.1.6 @@ -12,12 +12,13 @@ // アプリケーションが書き戻しを行わないためユーザが任意にコメント行を入れる // ことが出来る、タイプのもの。 // -// 設定(Config)は次の3段階によって確定する。 -// c1. 初期値 +// 設定(Config)は次の4段階によって確定する。 +// c0. 初期値 // 項目はそれぞれ固有の初期値を持っている。ここでいう初期値は単なるゼロ // クリアではなく、その項目に最も自然な、あるいは極力問題なく動作するよう // 選択した値のこと。 -// c2. 設定ファイル +// c1. ~/.nono.cfg +// c2. VM ディレクトリの設定ファイル // 設定ファイルで指定された値はそれを上書きする。 // c3. コマンドライン引数 // コマンドライン引数で指定された値はそれを上書きする。 @@ -66,6 +67,11 @@ class ConfigItem // 数値として評価出来ないときは false を返す。 bool TryInt(int *val) const; + // 値を double 値として取得する。 + // 変換できたら true を返す。 + // double 値として評価出来ないときは false を返す。 + bool TryDouble(double *val) const; + // デフォルト値を差し替える。 // この変数が FromInitial なら値(初期値)を val に差し替える。この時 // from は FromInitial のまま。 @@ -82,6 +88,9 @@ class ConfigItem // from を取得する from_t GetFrom() const { return from; } + // where を取得する + const std::string& GetWhere() const { return where; } + // この項目で "invalid argument" を warnx() で出力する void Err() const; @@ -107,7 +116,8 @@ class ConfigItem VMCap vmcap {}; // from (と where) はこの変数の由来を示す。 - // o FromOption なら値は -V オプションで指定されたことを示す。 + // o FromOption なら値はコマンドラインオプションで指定されたことを示す。 + // この場合 where に "-V" とかが入っている。 // o FromConfig なら値は設定ファイルで指定されたことを示す。 // この場合 where に "ファイルパス:行番号" が入っている。 // o FromInitial なら値は初期値のままであることを示す。引数や @@ -122,7 +132,7 @@ class ConfigFile { public: ConfigFile(const std::string& filepath_); - virtual ~ConfigFile(); + ~ConfigFile(); // ファイルの読み込み。 // 成功すれば true を返す。失敗すればエラーを表示して false を返す。 @@ -143,13 +153,13 @@ class Config { public: Config(); - virtual ~Config(); + ~Config(); // 設定ファイルの内容で上書きする bool Update(const ConfigFile& file); // コマンドライン引数の内容で上書きする - bool Update(const std::vector& options); + bool Update(const std::string& line, const std::string& optname); // 内容を表示する void Show(bool all) const; @@ -173,7 +183,7 @@ class Config void Delete(const std::string& key); // 以降書き込み禁止にする (プログラムミスを避けるため) - void Fix(); + bool Fix(); private: // key から ConfigItem を返す。見付からなければ NULL を返す。