|
|
1.1 ! root 1: // ! 2: // nono ! 3: // Copyright (C) 2018 [email protected] ! 4: // ! 5: ! 6: #pragma once ! 7: ! 8: #include "header.h" ! 9: #include <unordered_map> ! 10: ! 11: class Config ! 12: { ! 13: public: ! 14: Config(const std::string& dir); ! 15: virtual ~Config(); ! 16: ! 17: // 設定ファイルのロード、セーブ ! 18: bool Load(); ! 19: bool Save(); ! 20: ! 21: // 設定ファイル自身のパス名を取得 ! 22: std::string GetFilename() const { return filename; } ! 23: ! 24: // 設定ファイルのあるディレクトリパスを取得。 ! 25: // ディレクトリパスは必ず "/" で終わっている。 ! 26: // 絶対パスか相対パスかは不明? ! 27: std::string GetConfigDir() const { return dirname; } ! 28: ! 29: // 関連するファイルのパスを取得。 ! 30: // ROM イメージなどはファイル名が固定で、以下の順でディレクトリを探索する。 ! 31: // 1. 設定ファイルディレクトリ ! 32: // 2. 共通ディレクトリ(?) ! 33: // 優先度の高いディレクトリに存在したファイルだけをターゲットにする。 ! 34: // ファイルがあるかどうかを調べるだけで、存在したけどそれに何らか ! 35: // 不都合があったら次を試すとかはしない。 ! 36: std::string SearchFile(const char *filename) const; ! 37: ! 38: // 値の読み出し (整数) ! 39: int ReadInt(const std::string& key) { ! 40: return ReadInt(key.c_str(), 0); ! 41: } ! 42: int ReadInt(const char *key) { ! 43: return ReadInt(key, 0); ! 44: } ! 45: int ReadInt(const std::string& key, int defaultvalue) { ! 46: return ReadInt(key.c_str(), defaultvalue); ! 47: } ! 48: int ReadInt(const char *key, int defaultvalue); ! 49: ! 50: // 値の読み出し (文字列) ! 51: std::string ReadStr(const std::string& key) { ! 52: return ReadStr(key.c_str(), ""); ! 53: } ! 54: std::string ReadStr(const char *key) { ! 55: return ReadStr(key, ""); ! 56: } ! 57: std::string ReadStr(const std::string& key, const std::string& defaultvalue) ! 58: { ! 59: return ReadStr(key.c_str(), defaultvalue); ! 60: } ! 61: std::string ReadStr(const char *key, const std::string& defaultvalue); ! 62: ! 63: // 値の書き込み (整数) ! 64: void Write(std::string& key, int value) { ! 65: Write(key.c_str(), value); ! 66: } ! 67: void Write(const char *key, int value); ! 68: ! 69: // 値の書き込み (文字列) ! 70: void Write(std::string& key, std::string& value) { ! 71: Write(key.c_str(), value.c_str()); ! 72: } ! 73: void Write(std::string& key, const char *value) { ! 74: Write(key.c_str(), value); ! 75: } ! 76: void Write(const char *key, std::string& value) { ! 77: Write(key, value.c_str()); ! 78: } ! 79: void Write(const char *key, const char *value); ! 80: ! 81: // エラー表示 ! 82: void Err(const std::string& key, const char *fmt, ...) __printflike(3, 4); ! 83: void Err(const char *key, const char *fmt, ...) __printflike(3, 4); ! 84: void Errv(const char *key, const char *fmt, va_list ap) __printflike(3, 0); ! 85: ! 86: private: ! 87: // ファイル名 ! 88: std::string filename; ! 89: ! 90: // ファイルのあるディレクトリパス ! 91: std::string dirname; ! 92: ! 93: // key = value が順不同で格納されている ! 94: std::unordered_map<std::string, std::string> map; ! 95: }; ! 96: ! 97: extern Config *gConfig;
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.