/* C++ code produced by gperf version 3.0.3 */
/* Command-line: gperf -L C++ gen/triple_charactor_operator.gperf  */
/* Computed positions: -k'1,3' */

#include <lexer.hpp>

/* maximum key range = 51, duplicates = 0 */

inline unsigned int
TripleCharactorOperatorMap::hash(register const char *str)
{
	static unsigned char asso_values[] = {
		54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
		54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
		54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
		54, 54, 54, 54, 54, 54, 10, 54,  1, 54,
		54, 54,  8, 54, 54, 54, 25,  3, 54, 54,
		54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
		10,  0,  5, 54, 54, 21, 54, 54, 16, 11,
		6,  1, 28, 23, 54, 54, 18, 13, 54,  8,
		3, 54, 30, 54, 25, 54, 54, 20, 15, 54,
		54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
		54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
		54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
		54, 54, 54, 10,  0, 54, 54, 54, 54, 54,
		54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
		54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
		54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
		54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
		54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
		54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
		54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
		54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
		54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
		54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
		54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
		54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
		54, 54, 54, 54, 54, 54
	};
	return asso_values[(unsigned char)str[2]] + asso_values[(unsigned char)str[0]];
}

const char *TripleCharactorOperatorMap::in_word_set(register const char *str)
{
	static const char * triple_charactor_operators[] = {
		"||=",
		"&&=",
		"",
		"//=",
		"",
		">>=",
		"", "",
		"**=",
		"",
		"<<=",
		"$^G",
		"",
		"$^P",
		"",
		"<=>",
		"$^F",
		"",
		"$^O",
		"",
		"$#{",
		"$^E",
		"",
		"$^M",
		"",
		"$^X",
		"$^D",
		"",
		"$^L",
		"",
		"$^W",
		"$^A",
		"",
		"$^I",
		"",
		"$^T",
		"", "",
		"$^H",
		"",
		"$^R",
		"", "", "", "", "", "", "", "", "",
		"..."
	};

	register int key = hash(str);
	if (key <= TRIPLE_OPERATOR_MAX_HASH_VALUE && key >= 0) {
		register const char *s = triple_charactor_operators[key];
		if (*str == *s && !strcmp (str + 1, s + 1)) return s;
	}
	return 0;
}