diff options
| author | Felix Morgner <felix.morgner@gmail.com> | 2026-09-22 18:56:44 +0200 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@gmail.com> | 2026-09-22 18:56:44 +0200 |
| commit | 22f6534081acfabdab4956d337604a21e7da5b64 (patch) | |
| tree | a857b256a120d154667f2ed68cbf5151afe0cfbf /ttwhy/scanners | |
| parent | 676586f2034ff112b309dccc430893d73e919191 (diff) | |
| download | ttwhy-22f6534081acfabdab4956d337604a21e7da5b64.tar.xz ttwhy-22f6534081acfabdab4956d337604a21e7da5b64.zip | |
lib: generalize concepts
Diffstat (limited to 'ttwhy/scanners')
| -rw-r--r-- | ttwhy/scanners/concepts.cppm | 13 | ||||
| -rw-r--r-- | ttwhy/scanners/terminal_policies.cppm | 18 | ||||
| -rw-r--r-- | ttwhy/scanners/terminal_scanner.cppm | 6 |
3 files changed, 19 insertions, 18 deletions
diff --git a/ttwhy/scanners/concepts.cppm b/ttwhy/scanners/concepts.cppm index 69d6459..5c29b5f 100644 --- a/ttwhy/scanners/concepts.cppm +++ b/ttwhy/scanners/concepts.cppm @@ -17,11 +17,14 @@ namespace ttwhy { a.is_pending() } -> std::same_as<bool>; }; - export template<typename Sink> - concept ansi_sink = requires(Sink sink) { - { sink(std::declval<ttwhy::scanners::character_event>()) } -> std::same_as<void>; - { sink(std::declval<ttwhy::scanners::control_event>()) } -> std::same_as<void>; - { sink(std::declval<ttwhy::scanners::navigation_event>()) } -> std::same_as<void>; + export template<typename Sink, typename Event> + concept event_sink = requires(Sink sink, Event event) { + { sink(event) } -> std::same_as<void>; }; + export template<typename Sink> + concept terminal_event_sink = + event_sink<Sink, scanners::character_event> && event_sink<Sink, scanners::control_event> && + event_sink<Sink, scanners::navigation_event>; + } // namespace ttwhy diff --git a/ttwhy/scanners/terminal_policies.cppm b/ttwhy/scanners/terminal_policies.cppm index 7af0d66..e3c889c 100644 --- a/ttwhy/scanners/terminal_policies.cppm +++ b/ttwhy/scanners/terminal_policies.cppm @@ -59,12 +59,9 @@ namespace ttwhy::scanners } // namespace detail - export template<typename T> - using associated_terminal_policy_t = typename T::terminal_policy; - export struct ansi_policy { - constexpr auto static resolve_vt220_keypad(std::string & buffer, ttwhy::ansi_sink auto & sink) -> void + constexpr auto static resolve_vt220_keypad(std::string & buffer, ttwhy::terminal_event_sink auto & sink) -> void { if (buffer.empty()) { @@ -78,7 +75,8 @@ namespace ttwhy::scanners buffer.clear(); } - constexpr auto static resolve_vt100_cursor(char terminator, std::string &, ttwhy::ansi_sink auto & sink) -> void + constexpr auto static resolve_vt100_cursor(char terminator, std::string &, ttwhy::terminal_event_sink auto & sink) + -> void { if (auto key = detail::map_vt100_cursor(terminator)) { @@ -86,7 +84,7 @@ namespace ttwhy::scanners } } - constexpr auto static resolve_ss3(char terminator, ttwhy::ansi_sink auto & sink) -> void + constexpr auto static resolve_ss3(char terminator, ttwhy::terminal_event_sink auto & sink) -> void { if (auto key = detail::map_vt100_cursor(terminator)) { @@ -124,7 +122,7 @@ namespace ttwhy::scanners return static_cast<modifier_set>(modifier_value - 1); } - constexpr auto static resolve_vt220_keypad(std::string & buffer, ttwhy::ansi_sink auto & sink) -> void + constexpr auto static resolve_vt220_keypad(std::string & buffer, ttwhy::terminal_event_sink auto & sink) -> void { if (buffer.empty()) { @@ -140,8 +138,8 @@ namespace ttwhy::scanners buffer.clear(); } - constexpr auto static resolve_vt100_cursor(char terminator, std::string & buffer, ttwhy::ansi_sink auto & sink) - -> void + constexpr auto static resolve_vt100_cursor(char terminator, std::string & buffer, + ttwhy::terminal_event_sink auto & sink) -> void { auto modifiers = parse_modifiers(buffer); @@ -151,7 +149,7 @@ namespace ttwhy::scanners } } - constexpr auto static resolve_ss3(char terminator, ttwhy::ansi_sink auto & sink) -> void + constexpr auto static resolve_ss3(char terminator, ttwhy::terminal_event_sink auto & sink) -> void { if (auto key = detail::map_vt100_cursor(terminator)) { diff --git a/ttwhy/scanners/terminal_scanner.cppm b/ttwhy/scanners/terminal_scanner.cppm index ec4a1a6..a791909 100644 --- a/ttwhy/scanners/terminal_scanner.cppm +++ b/ttwhy/scanners/terminal_scanner.cppm @@ -95,7 +95,7 @@ namespace ttwhy::scanners::detail /// Transitions - template<ansi_sink Sink, typename TerminalPolicy> + template<terminal_event_sink Sink, typename TerminalPolicy> struct transition_table { auto operator()() const noexcept @@ -200,7 +200,7 @@ namespace ttwhy::scanners::detail export namespace ttwhy::scanners { - template<ansi_sink Sink, typename TerminalPolicy> + template<terminal_event_sink Sink, typename TerminalPolicy> struct terminal_scanner { explicit terminal_scanner(Sink & sink) @@ -230,7 +230,7 @@ export namespace ttwhy::scanners m_state_machine; }; - template<ansi_sink Sink> + template<terminal_event_sink Sink> using ansi = terminal_scanner<Sink, ansi_policy>; } // namespace ttwhy::scanners |
