diff options
-rw-r--r-- | parser.cpp | 16 | ||||
-rw-r--r-- | parser.h | 13 |
2 files changed, 16 insertions, 13 deletions
@@ -33,7 +33,7 @@ macro_execute(const gchar *macro) State::State() { - for (int i = 0; i < MAX_TRANSITIONS; i++) + for (guint i = 0; i < G_N_ELEMENTS(transitions); i++) transitions[i] = NULL; } @@ -64,6 +64,20 @@ State::input(gchar chr) return TRUE; } +State * +State::get_next_state(gchar chr) +{ + State *next = NULL; + guint upper = g_ascii_toupper(chr); + + if (upper < G_N_ELEMENTS(transitions)) + next = transitions[upper]; + if (!next) + next = custom(chr); + + return next; +} + StateStart::StateStart() : State() { transitions['\0'] = this; @@ -14,19 +14,8 @@ protected: public: State(); - inline State *& - operator [](int i) - { - return transitions[i]; - } - static gboolean input(gchar chr); - - inline State * - get_next_state(gchar chr) - { - return transitions[(int)g_ascii_toupper(chr)] ? : custom(chr); - } + State *get_next_state(gchar chr); virtual State * custom(gchar chr) |