#pragma once #include "coding/reader.hpp" #include #include #include #include namespace coding { class CSVReader { public: struct Params { Params() {} bool m_readHeader = false; char m_delimiter = ','; }; CSVReader() = default; using Row = std::vector; using File = std::vector; using RowByRowCallback = std::function; using FullFileCallback = std::function; void Read(std::istringstream & stream, RowByRowCallback const & fn, Params const & params = {}) const; void Read(std::istringstream & stream, FullFileCallback const & fn, Params const & params = {}) const; template void Read(Reader const & reader, Callback const & fn, Params const & params = {}) const { std::string str(static_cast(reader.Size()), '\0'); reader.Read(0, &str[0], str.size()); std::istringstream stream(str); Read(stream, fn, params); } }; } // namespace coding