diff options
| author | Felix Morgner <felix.morgner@gmail.com> | 2026-06-20 11:54:06 +0200 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@gmail.com> | 2026-06-20 11:54:06 +0200 |
| commit | 912e7b10facdd3b2565423206ae25b1d6e4f7dd9 (patch) | |
| tree | e744bc76893e8b1faa216b1aae93c7ec6e933a04 /ttwhy/scanners/terminal_concepts.cppm | |
| parent | 280190248bfbadaec4575932dc956401f7bb6390 (diff) | |
| download | ttwhy-912e7b10facdd3b2565423206ae25b1d6e4f7dd9.tar.xz ttwhy-912e7b10facdd3b2565423206ae25b1d6e4f7dd9.zip | |
lib: add xterm policy
Diffstat (limited to 'ttwhy/scanners/terminal_concepts.cppm')
| -rw-r--r-- | ttwhy/scanners/terminal_concepts.cppm | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/ttwhy/scanners/terminal_concepts.cppm b/ttwhy/scanners/terminal_concepts.cppm new file mode 100644 index 0000000..e82a8d0 --- /dev/null +++ b/ttwhy/scanners/terminal_concepts.cppm @@ -0,0 +1,27 @@ +module; + +#include <concepts> +#include <span> + +export module ttwhy.scanners:terminal_concepts; + +import :terminal_events; + +namespace ttwhy +{ + + export template<typename Candidate> + concept scanner = requires(Candidate a, std::span<char const> buffer) { + { a.process(buffer) } -> std::same_as<void>; + { a.timeout() } -> std::same_as<void>; + { 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>; + }; + +} // namespace ttwhy |
