summaryrefslogtreecommitdiff
path: root/src/command_manager.hh
diff options
context:
space:
mode:
authorMaxime Coste <mawww@kakoune.org>2021-07-09 17:03:22 +1000
committerMaxime Coste <mawww@kakoune.org>2021-07-09 17:03:22 +1000
commit2289f350df1b957f0fbd60ecc941a87d4d7b4b44 (patch)
tree9149c61331087d746bfbc97bda63203cd85ab837 /src/command_manager.hh
parent86c5e8f75bbc4e7b6c805ade50dbcd8cf3a5672a (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.hh21
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>