///////////////////////////////////////////////////////////////////////////////
/// @file hlvm/%MODULE_PATH%/%SCHEMA_NAME%Tokenizer.cpp
/// @author %AUTHOR%
/// @date %DATE%
/// @brief Implements the functions of class %SCHEMA_NAME%Tokenizer.
///////////////////////////////////////////////////////////////////////////////

#include <hlvm/%MODULE_PATH%/%SCHEMA_NAME%Tokenizer.h>
#include <hlvm/%MODULE_PATH%/%SCHEMA_NAME%TokenHash.i>

namespace HLVM_%MODULE% {

int
%SCHEMA_NAME%Tokenizer::recognize( const char * xml_str )
{
  const char* str = reinterpret_cast<const char*>( xml_str );
  const struct TokenMap *token_map = 
    %SCHEMA_NAME%TokenHash::in_word_set( str, strlen(str) );
  if (token_map)
  {
      return int(token_map->token);
  }
  return int(TKN_NONE);
}

const char *
%SCHEMA_NAME%Tokenizer::lookup( int tkn )
{
  for (unsigned int i = 0 ; i < sizeof(wordlist)/sizeof(wordlist[0]); i++)
  {
    if (tkn == wordlist[i].token) return wordlist[i].name;
  }
  return "";
}

}
