#pragma once #include #include struct Point { uint64_t x,y; }; struct Line { Point start, end; }; template using Output = T* __restrict__; namespace Input { struct Parser { Parser(const char* string, size_t len) noexcept; template inline Parser(const char (&string)[N]) noexcept : Parser(string, N) {} Parser(Parser&&) noexcept; Parser(const Parser&) = delete; Parser& operator=(Parser&&) noexcept; Parser& operator=(const Parser&) = delete; bool try_read_next(Output); virtual ~Parser(); private: struct _impl; std::unique_ptr<_impl> state_; }; }