#pragma once

class CConfig;
class CConfigAccess
{
public:
	CConfigAccess();
	CConfigAccess(CConfig *root,CString path="");
	~CConfigAccess(void);

	void SetConfig(CString key, CString data);								//	データの設定
	void SetConfig(CString key, int data);									//	データの設定
	void SetConfig(CString key, UINT data);									//	データの設定
	void SetConfig(CString key, __int64 data);								//	データの設定

	CString GetConfig(CString key, CString defaultData,int noCase=FALSE);	//	データの取得
	int GetConfig(CString key, int defaultData,int noCase=FALSE);			//	データの取得
	UINT GetConfig(CString key, UINT defaultData,int noCase=FALSE);			//	データの取得
	__int64 GetConfig(CString key, __int64 defaultData,int noCase=FALSE);	//	データの取得


	int GetAllKey(CStringArray &list);										//	全てのキーを取得
	int GetAllSubNode(CStringArray &list);									//	全てのサブノードを取得
	CConfigAccess GetAccess(CString subPath);								//	アクセスクラス取得
	CConfig * GetRoot();													//	CConfig取得
	void Clear();															//	クリア
	void DeleteNode(CString name);											//	ノード削除
	void DeleteKey(CString name);											//	キー削除
	void Copy(CConfigAccess &other);										//	複製
	int GetKeyCount();														//	全てのキー数を取得
	int GetSubNodeCount();													//	全てのサブノードを数取得
	CString GetKeySwapString(CString str,CString noData="");				//	キー名で置き換えた文字列を取得


private:
	CString		m_path;
	CConfig		*m_root;

};
