diff options
| author | Maxime Coste <mawww@kakoune.org> | 2021-07-09 17:03:22 +1000 |
|---|---|---|
| committer | Maxime Coste <mawww@kakoune.org> | 2021-07-09 17:03:22 +1000 |
| commit | 2289f350df1b957f0fbd60ecc941a87d4d7b4b44 (patch) | |
| tree | 9149c61331087d746bfbc97bda63203cd85ab837 /src/command_manager.hh | |
| parent | 86c5e8f75bbc4e7b6c805ade50dbcd8cf3a5672a (diff) | |
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.
Diffstat (limited to 'src/command_manager.hh')
| -rw-r--r-- | src/command_manager.hh | 21 |
1 files changed, 6 insertions, 15 deletions
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<Token> 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<CommandManager> |
