/********************************************************************************
*	ファイル名：IniFile.h														*
*	用　　　途：ＩＮＩ形式のファイル書式展開									*
*	備　　　考：																*
*	履　　　歴：																*
********************************************************************************/
/****************************
*	 コンパイル環境設定		*
****************************/
#pragma	once
/****************************
*	インクルードファイル	*
****************************/
#include "Section.h"
#include "Tools.h"
/****************************
*		 マクロ定数			*
****************************/

//アクセスフラグ
enum FLAG_ACCESS{
	FLAG_ACCESS_GET,
	FLAG_ACCESS_SET
};

/****************************
*		 構造体定義			*
****************************/
typedef	CArray<CSection, CSection> CSectionArray;		/*	セクション配列				*/

class CIniFile
{
public:
									CIniFile();
	virtual						   ~CIniFile();
			BOOL					Load(LPCTSTR szFile = 0);
			BOOL					Save(LPCTSTR szFile = 0);
			BOOL					SaveEx(LPCTSTR szFile = 0);
			void					SetFileName(LPCTSTR szFileName);
			BOOL					GetProfile(TCHAR *szSection, TCHAR *szKey, void *vpVal, INT32 nAttr, void *vpDefault = 0);
			BOOL					GetProfile(TCHAR *szSection, TCHAR *szKey, CString *szDst);
			BOOL					SetProfile(TCHAR *szSection, TCHAR *szKey, void *vpVal, INT32 nAttr);
			BOOL					SetProfile(TCHAR *szSection, TCHAR *szKey, TCHAR *szFormat, void  *vpVal, INT32 nAttr);
			BOOL					RemoveAll();
			BOOL					RemoveSection(TCHAR *szSection, BOOL bErrNotExist = FALSE);
			BOOL					RemoveKey(TCHAR *szSection, TCHAR *szKey, BOOL bErrNotExist = FALSE);

			BOOL					AccessProfile(FLAG_ACCESS eAccessFlag , TCHAR *szSection, TCHAR *szKey, void *vpVal,INT32 nAttr,void *vpDefault);

protected:
			INT_PTR					AddSection(LPCTSTR section);
			INT_PTR					LookUp(INT_PTR nSectionIndex, CString &strKey, CString *strVal = 0);
			BOOL					SetAt(INT_PTR nSectionIndex, CString &strKey, CString &strVal);
			int						Parse(CString *keyword, CString *value, CString &src, BOOL bOmitValue = FALSE);
			BOOL					ReadFileString(FILE *tpFile, CString *pString);

protected:
			CString					m_FileName;		/* ファイル名			*/
			CSectionArray			m_SectionArray;

			INT_PTR					m_nSearchIndex;
};

/****************************
*		 クラス定義			*
****************************/
/****************************
*		 関数　宣言			*
****************************/
/****************************
*		 変数　宣言			*
****************************/
