|
|
nono 0.0.1
//
// nono
// Copyright (C) 2018 [email protected]
//
#pragma once
#include "header.h"
#include <unordered_map>
class Config
{
public:
Config(const std::string& dir);
virtual ~Config();
// 設定ファイルのロード、セーブ
bool Load();
bool Save();
// 設定ファイル自身のパス名を取得
std::string GetFilename() const { return filename; }
// 設定ファイルのあるディレクトリパスを取得。
// ディレクトリパスは必ず "/" で終わっている。
// 絶対パスか相対パスかは不明?
std::string GetConfigDir() const { return dirname; }
// 関連するファイルのパスを取得。
// ROM イメージなどはファイル名が固定で、以下の順でディレクトリを探索する。
// 1. 設定ファイルディレクトリ
// 2. 共通ディレクトリ(?)
// 優先度の高いディレクトリに存在したファイルだけをターゲットにする。
// ファイルがあるかどうかを調べるだけで、存在したけどそれに何らか
// 不都合があったら次を試すとかはしない。
std::string SearchFile(const char *filename) const;
// 値の読み出し (整数)
int ReadInt(const std::string& key) {
return ReadInt(key.c_str(), 0);
}
int ReadInt(const char *key) {
return ReadInt(key, 0);
}
int ReadInt(const std::string& key, int defaultvalue) {
return ReadInt(key.c_str(), defaultvalue);
}
int ReadInt(const char *key, int defaultvalue);
// 値の読み出し (文字列)
std::string ReadStr(const std::string& key) {
return ReadStr(key.c_str(), "");
}
std::string ReadStr(const char *key) {
return ReadStr(key, "");
}
std::string ReadStr(const std::string& key, const std::string& defaultvalue)
{
return ReadStr(key.c_str(), defaultvalue);
}
std::string ReadStr(const char *key, const std::string& defaultvalue);
// 値の書き込み (整数)
void Write(std::string& key, int value) {
Write(key.c_str(), value);
}
void Write(const char *key, int value);
// 値の書き込み (文字列)
void Write(std::string& key, std::string& value) {
Write(key.c_str(), value.c_str());
}
void Write(std::string& key, const char *value) {
Write(key.c_str(), value);
}
void Write(const char *key, std::string& value) {
Write(key, value.c_str());
}
void Write(const char *key, const char *value);
// エラー表示
void Err(const std::string& key, const char *fmt, ...) __printflike(3, 4);
void Err(const char *key, const char *fmt, ...) __printflike(3, 4);
void Errv(const char *key, const char *fmt, va_list ap) __printflike(3, 0);
private:
// ファイル名
std::string filename;
// ファイルのあるディレクトリパス
std::string dirname;
// key = value が順不同で格納されている
std::unordered_map<std::string, std::string> map;
};
extern Config *gConfig;
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.