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

#if !defined( KEYWORDLIST_CPP_H_INCLUDED_ )
#define KEYWORDLIST_CPP_H_INCLUDED_

#include <vector>
#include <string>

namespace NLangExt {

namespace NLangExt_cpp {

// キーワードのリストを管理する
class CKeywordList_cpp
{
public:
	CKeywordList_cpp()
	{
		// キーワードと候補配列のテンプレートを用意する
		const wchar_t *Keywords[] = {
			L"asm", L"bool", L"char", L"continue", L"double", L"except", L"finally", L"goto", L"long", L"operator",
			L"register", L"signed", L"struct", L"throw", L"typedef", L"unsigned", L"volatile", L"auto", L"break",
			L"class", L"default", L"dynamic_cast", L"explicit", L"float", L"if", L"mutable", L"private", L"reinterpret_cast",
			L"sizeof", L"switch", L"true", L"typeid", L"using", L"while", L"bad_cast", L"case", L"const", L"delete",
			L"else", L"extern", L"for", L"inline", L"namespace", L"protected", L"return", L"static", L"template",
			L"try", L"typename", L"virtual", L"bad_typeid", L"catch", L"const_cast", L"do", L"enum", L"false",
			L"friend", L"int", L"new", L"public", L"short", L"static_cast", L"this", L"type_info", L"union", L"void",
			L"define", L"error", L"import", L"undef", L"elif", L"if", L"include", L"else", L"ifdef", L"line", L"endif",
			L"ifndef", L"pragma", L"defined"
		};
		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_cpp

} // namespace NLangExt

#endif // KEYWORDLIST_CPP_H_INCLUDED_

