///////////////////////////////////////////////////////////////////////////
// KeywordList_java.h
// Javaのキーワードのリストを保持するクラス
///////////////////////////////////////////////////////////////////////////

#if !defined( KEYWORDLIST_JAVA_H_INCLUDED_ )
#define KEYWORDLIST_JAVA_H_INCLUDED_

#include <vector>

namespace NLangExt {

namespace NLangExt_java {

// キーワードのリストを管理する
class CKeywordList_java
{
public:
	CKeywordList_java()
	{
		// キーワードと候補配列のテンプレートを用意する
		const wchar_t *Keywords[] = {
			L"abstract", L"boolean", L"break", L"byte", L"case", L"catch", L"char", L"class", L"const", L"continue",
			L"default", L"do", L"double", L"else", L"extends", L"final", L"finally", L"float", L"for",
			L"goto", L"if", L"implements", L"import", L"instanceof", L"int", L"interface", L"long", L"native",
			L"new", L"package", L"private", L"protected", L"public", L"return", L"short", L"static", L"strictfp", L"super",
			L"switch", L"synchronized", L"this", L"throw", L"throws", L"transient", L"try", L"void", L"volatile",
			L"while", L"widefp", L"true", L"false", L"null"
		};
		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_java

} // namespace NLangExt

#endif // KEYWORDLIST_JAVA_H_INCLUDED_

