/*
 *	clipenm.h
 *
 *	列挙定義
 *
 *	CLiP - Common Library for P/ECE
 *	Copyright (C) 2001-2016 Naoyuki Sawa
 *
 *	* Fri Jan 01 21:14:34 JST 2016 Naoyuki Sawa
 *	- 1st リリース。
 *	* Sat Jan 02 21:26:28 JST 2016 Naoyuki Sawa
 *	- 使用例を追記しました。
 *	* Wed May 11 21:35:57 JST 2016 Naoyuki Sawa
 *	- EnmDef_GetVal()を追加しました。
 *	* Thu May 12 22:56:34 JST 2016 Naoyuki Sawa
 *	- EnmDef_GetNum(),EnmDef_GetMin(),EnmDef_GetMax(),EnmDef_GetNth(),EnmDef_GetIdx()を追加しました。
 *	* Thu Jul 07 21:12:07 JST 2016 Naoyuki Sawa
 *	- EnmDef_IncVal(),EnmDef_DecVal()を追加しました。
 *	* Mon Aug 15 21:37:25 JST 2016 Naoyuki Sawa
 *	- 列挙型の名前の比較関数を用いて、列挙型の名前の文字列から列挙型の値を逆引きするユーティリティ関数群を追加しました。
 *	  詳細は、EnmDef_GetVal_UseCompar(),EnmDef_GetCanonicalNameCompar(),EnmDef_IsSuitableNameCompar()のコメントを参照して下さい。
 */
#ifndef __CLIP_ENM_H__
#define __CLIP_ENM_H__
#ifdef  __cplusplus
extern "C" {
#endif//__cplusplus
/****************************************************************************
 *	
 ****************************************************************************/
//当モジュールの内部処理と、/tool/dEnmDefC/の実装が参照する、レジストリのキーの名前,及び,値の名前です。
//当モジュールの内部処理と、/tool/dEnmDefC/の実装で、一致している必要があるため、ここで定義しています。
//アプリケーションが、下記の定数を意識する必要は有りません。
#define Enm_name	 1		//シンボルの名前
#define Enm_desc	 2		//シンボルの説明文
/*--------------------------------------------------------------------------*/
#if 0
EnmDef
	EnmDef_label
		label_symbol
			EnmDef_name	= "symbol"	#//名前の文字列は必須
			EnmDef_desc	= "desc"	#//説明文の文字列は省略可能
		end
		label_symbol
			EnmDef_name	= "symbol"	#//名前の文字列は必須
		end
		…
	end
	…
end
#endif
/****************************************************************************
 *	基本的な関数
 ****************************************************************************/
const char* EnmDef_GetName(const void* pEnmKey, int iEnmDef, int iVal);
const char* EnmDef_GetDesc(const void* pEnmKey, int iEnmDef, int iVal);
const char* EnmDef_ToStr(  const void* pEnmKey, int iEnmDef, int iVal);
/****************************************************************************
 *	ユーティリティ関数
 ****************************************************************************/
int EnmDef_GetNum(const void* pEnmKey, int iEnmDef);
int EnmDef_GetMin(const void* pEnmKey, int iEnmDef);
int EnmDef_GetMax(const void* pEnmKey, int iEnmDef);
int EnmDef_GetNth(const void* pEnmKey, int iEnmDef, int index);
int EnmDef_GetIdx(const void* pEnmKey, int iEnmDef, int iVal);
int EnmDef_GetVal(const void* pEnmKey, int iEnmDef, const char* pName);
int EnmDef_IncVal(const void* pEnmKey, int iEnmDef, int iVal);
int EnmDef_DecVal(const void* pEnmKey, int iEnmDef, int iVal);
//{{2016/08/15追加:列挙型の名前の比較関数を用いて、列挙型の名前の文字列から列挙型の値を逆引きするユーティリティ関数群を追加しました。
int EnmDef_GetVal_UseCompar(const void* pEnmKey, int iEnmDef, const char* pName, int (*compar)(const char*, const char*));
int (*EnmDef_GetCanonicalNameCompar(const void* pEnmKey, int iEnmDef))(const char*, const char*);
int EnmDef_IsSuitableNameCompar(const void* pEnmKey, int iEnmDef, int (*compar)(const char*, const char*));
//}}2016/08/15追加:列挙型の名前の比較関数を用いて、列挙型の名前の文字列から列挙型の値を逆引きするユーティリティ関数群を追加しました。
#ifdef  __cplusplus
}//extern "C"
#endif//__cplusplus
#endif//__CLIP_ENM_H__
