From 2a9e59adb5db8630ab7bdbdeedac623e3397989b Mon Sep 17 00:00:00 2001 From: Joel Klinghed Date: Wed, 17 Sep 2025 00:48:46 +0200 Subject: uline: Add unicode line reader --- src/uline.hh | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 src/uline.hh (limited to 'src/uline.hh') 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 +#include +#include +#include + +namespace u8 { + +namespace line { + +class Reader { + public: + virtual ~Reader() = default; + + // Returned view is only valid until next call to read. + [[nodiscard]] + virtual std::expected 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 open(std::unique_ptr 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 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 open(std::unique_ptr reader, + size_t max_len = 8192); + +} // namespace line + +} // namespace u16 + +#endif // ULINE_HH -- cgit v1.3