diff options
| author | Joel Klinghed <the_jk@spawned.biz> | 2025-09-17 00:48:46 +0200 |
|---|---|---|
| committer | Joel Klinghed <the_jk@spawned.biz> | 2025-09-17 00:48:46 +0200 |
| commit | 2a9e59adb5db8630ab7bdbdeedac623e3397989b (patch) | |
| tree | 44043f182f12ba9feb2c42ff2f4962ef1c452a96 /src/uline.hh | |
| parent | d091dc78154d1c6341251f1ed13bfe3b33f10773 (diff) | |
uline: Add unicode line reader
Diffstat (limited to 'src/uline.hh')
| -rw-r--r-- | src/uline.hh | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/src/uline.hh b/src/uline.hh new file mode 100644 index 0000000..a3bcef3 --- /dev/null +++ b/src/uline.hh @@ -0,0 +1,72 @@ +#ifndef ULINE_HH +#define ULINE_HH + +#include "line.hh" // IWYU pragma: export +#include "uio.hh" // IWYU pragma: export + +#include <cstddef> +#include <expected> +#include <memory> +#include <string_view> + +namespace u8 { + +namespace line { + +class Reader { + public: + virtual ~Reader() = default; + + // Returned view is only valid until next call to read. + [[nodiscard]] + virtual std::expected<std::string_view, ::line::ReadError> read() = 0; + + // Starts at zero. Returns next line. + // So, before first read it is zero, after first read it is one. + [[nodiscard]] virtual uint64_t number() const = 0; + + protected: + Reader() = default; + + Reader(Reader const&) = delete; + Reader& operator=(Reader const&) = delete; +}; + +[[nodiscard]] std::unique_ptr<Reader> open(std::unique_ptr<u8::Reader> reader, + size_t max_len = 8192); + +} // namespace line + +} // namespace u8 + +namespace u16 { + +namespace line { + +class Reader { + public: + virtual ~Reader() = default; + + // Returned view is only valid until next call to read. + [[nodiscard]] + virtual std::expected<std::u16string_view, ::line::ReadError> read() = 0; + + // Starts at zero. Returns next line. + // So, before first read it is zero, after first read it is one. + [[nodiscard]] virtual uint64_t number() const = 0; + + protected: + Reader() = default; + + Reader(Reader const&) = delete; + Reader& operator=(Reader const&) = delete; +}; + +[[nodiscard]] std::unique_ptr<Reader> open(std::unique_ptr<u16::Reader> reader, + size_t max_len = 8192); + +} // namespace line + +} // namespace u16 + +#endif // ULINE_HH |
