///////////////////////////////////////////////////////////////////////////
// KeywordList_cs.h
// C#のキーワードのリストを保持するクラス
///////////////////////////////////////////////////////////////////////////

#if !defined( KEYWORDLIST_CS_H_INCLUDED_ )
#define KEYWORDLIST_CS_H_INCLUDED_

#include <vector>

namespace NLangExt {

namespace NLangExt_cs {

// キーワードのリストを管理する
class CKeywordList_cs
{
public:
	CKeywordList_cs()
	{
		// キーワードと候補配列のテンプレートを用意する
		const wchar_t *Keywords[] = {
			L"abstract",
			L"as",
			L"base",
			L"bool",
			L"break",
			L"byte",
			L"case",
			L"catch",
			L"char",
			L"checked",
			L"class",
			L"const",
			L"continue",
			L"decimal",
			L"default",
			L"delegate",
			L"do",
			L"double",
			L"else",
			L"enum",
			L"event",
			L"explicit",
			L"extern",
			L"false",
			L"finally",
			L"fixed",
			L"float",
			L"for",
			L"foreach",
			L"goto",
			L"if",
			L"implicit",
			L"in",
			L"int",
			L"interface",
			L"internal",
			L"is",
			L"lock",
			L"long",
			L"namespace",
			L"new",
			L"null",
			L"object",
			L"operator",
			L"out",
			L"override",
			L"params",
			L"private",
			L"protected",
			L"public",
			L"readonly",
			L"ref",
			L"return",
			L"sbyte",
			L"sealed",
			L"short",
			L"sizeof",
			L"stackalloc",
			L"static",
			L"string",
			L"struct",
			L"switch",
			L"this",
			L"throw",
			L"true",
			L"try",
			L"typedef",
			L"uint",
			L"ulong",
			L"unchecked",
			L"unsafe",
			L"ushort",
			L"using",
			L"virtual",
			L"void",
			L"volatile",
			L"while",
			L"define",
			L"undef",
			L"elif",
			L"endif",
			L"line",
			L"error",
			L"warning"
			L"region",
			L"endregion",
			L"field",
			L"method",
			L"param",
			L"property",
			L"type",
			L"Obsolete",
			L"Conditional",
			L"AttributeUsage",
			L"AllowMultiple",
			L"Inherited"
		};
		static const int KeywordCnt = sizeof( Keywords ) / sizeof( Keywords[0] );
		int i;

		if ( !vKeyword.empty() ) return ;

		// キーワードの配列に格納
		for ( i = 0; i < KeywordCnt; i++ )
			vKeyword.push_back( std::wstring( Keywords[i] ) );

		// アルファベット順に並び替える
		std::sort( vKeyword.begin(), vKeyword.end() );
	};

	// キーワードの配列を取得する
	const std::vector< std::wstring >& GetKeywordList() const
	{
		return vKeyword;
	};
protected:

	std::vector< std::wstring > vKeyword;	// キーワード
};


} // namespace NLangExt_cs

} // namespace NLangExt

#endif // KEYWORDLIST_CS_H_INCLUDED_

