#ifndef LINE_HH #define LINE_HH #include "io.hh" // IWYU pragma: export #include #include #include #include #include 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 #endif // LINE_HH