// CPPFormatOperator.cpp: Implementation of operator-formatting
#include "CPPFormatOperator.h"
#include "STLIncomplete.h"
#include <map>
#include "JLStr.h"
#ifdef _MSC_VER
#pragma warning (disable:4786) // long debug names
#endif
////////////////////////////////////////////////////////////////////
// Local types
////////////////////////////////////////////////////////////////////
typedef map<
ANTLRTokenType,
JLStr,
less<ANTLRTokenType>,
allocator<JLStr>
> TokenToTextMap;
////////////////////////////////////////////////////////////////////
// formatting operators
////////////////////////////////////////////////////////////////////
const JLStr&
FormatOperator(
ANTLRTokenType tt
)
{
static struct { ANTLRTokenType tt; const char *text; } tokenText[] = {
{ TOK_AMPERSAND, "&" },
{ TOK_AND, "&&" },
{ TOK_ASSIGNEQUAL, "=" },
{ TOK_BITWISEANDEQUAL, "&=" },
{ TOK_BITWISEOR, "|" },
{ TOK_BITWISEOREQUAL, "|=" },
{ TOK_BITWISEXOR, "^" },
{ TOK_BITWISEXOREQUAL, "^=" },
{ TOK_COMMA, "," },
{ TOK_COLON, ":" },
{ TOK_DIVIDE, "" },
{ TOK_DIVIDEEQUAL, "=" },
{ TOK_DOT, "." },
{ TOK_DOTMBR, ".*" },
{ TOK_ELLIPSIS, "..." },
{ TOK_EQUAL, "==" },
{ TOK_GREATERTHAN, ">" },
{ TOK_GREATERTHANOREQUALTO, ">=" },
{ TOK_LCURLY, "{" },
{ TOK_LESSTHAN, "<" },
{ TOK_LESSTHANOREQUALTO, "<=" },
{ TOK_LPAREN, "(" },
{ TOK_LSQUARE, "[" },
{ TOK_MINUS, "-" },
{ TOK_MINUSEQUAL, "-=" },
{ TOK_MINUSMINUS, "--" },
{ TOK_MOD, "%" },
{ TOK_MODEQUAL, "%=" },
{ TOK_NOT, "!" },
{ TOK_NOTEQUAL, "!=" },
{ TOK_OR, "||" },
{ TOK_PLUS, "+" },
{ TOK_PLUSEQUAL, "+=" },
{ TOK_PLUSPLUS, "++" },
{ TOK_POINTERTO, "->" },
{ TOK_POINTERTOMBR, "->*" },
{ TOK_QUESTIONMARK, "?" },
{ TOK_RCURLY, "}" },
{ TOK_RPAREN, ")" },
{ TOK_RSQUARE, "]" },
{ TOK_SCOPE, "::" },
{ TOK_SEMICOLON, ";" },
{ TOK_SHIFTLEFT, "<<" },
{ TOK_SHIFTLEFTEQUAL, "<<=" },
{ TOK_SHIFTRIGHT, ">>" },
{ TOK_SHIFTRIGHTEQUAL, ">>=" },
{ TOK_STAR, "*" },
{ TOK_TILDE, "~" },
{ TOK_TIMESEQUAL, "*=" },
{ ANTLRTokenType(0), "" }
};
static bool firstTime = true;
static TokenToTextMap tokenToTextMap;
if (firstTime)
{
for (int i = 0; tokenText[i].tt != 0; i++)
{
tokenToTextMap.insert(
TokenToTextMap::value_type(tokenText[i].tt, tokenText[i].text)
);
}
firstTime = false;
}
TokenToTextMap::iterator iter = tokenToTextMap.find(tt);
if (iter != tokenToTextMap.end())
{
return (*iter).second;
} else {
static JLStr empty;
return empty;
}
}