From 2289f350df1b957f0fbd60ecc941a87d4d7b4b44 Mon Sep 17 00:00:00 2001 From: Maxime Coste Date: Fri, 9 Jul 2021 17:03:22 +1000 Subject: Remove command parsing Reader and just track a ParserState The Reader abstraction was leading to suboptimal code by encouraging decoding utf8 separately from advancing to next codepoint. --- src/command_manager.hh | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) (limited to 'src/command_manager.hh') diff --git a/src/command_manager.hh b/src/command_manager.hh index 5150c08f..6489e044 100644 --- a/src/command_manager.hh +++ b/src/command_manager.hh @@ -61,21 +61,12 @@ struct Token bool terminated = false; }; -struct Reader +struct ParseState { -public: - Reader(StringView s) : str{s}, pos{s.begin()} {} - - Codepoint operator*() const; - Codepoint peek_next() const; - Reader& operator++(); - Reader& next_byte(); - - explicit operator bool() const { return pos < str.end(); } - StringView substr_from(const char* start) const { return {start, pos}; } - StringView str; const char* pos; + + operator bool() const { return pos != str.end(); } }; class CommandParser @@ -84,11 +75,11 @@ public: CommandParser(StringView command_line); Optional read_token(bool throw_on_unterminated); - const char* pos() const { return m_reader.pos; } - bool done() const { return not m_reader; } + const char* pos() const { return m_state.pos; } + bool done() const { return not m_state; } private: - Reader m_reader; + ParseState m_state; }; class CommandManager : public Singleton -- cgit v1.2.3