File:  [Isaki's NoNo m68k/m88k emulator] / nono / lib / configfile.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Wed Apr 29 17:04:28 2026 UTC (2 months, 3 weeks ago) by root
Branches: MAIN, Isaki
CVS tags: v002, v001, HEAD
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;

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.