76template <
typename Data>
81 : inputStream(inputStream.good() ? &inputStream : nullptr)
88 Data
const&
operator*()
const {
return parsedData; }
96 if (inputStream && !((*inputStream) >> parsedData))
97 inputStream =
nullptr;
112 return (
this == &iterator || (this->inputStream ==
nullptr &&
113 iterator.inputStream ==
nullptr));
119 std::istream* inputStream;
136template <
typename Data>
141 : fileStream(fileName)
146 fileStream.ignore(std::numeric_limits<std::streamsize>::max(),
153 CSVIterator<Data>
begin() {
return CSVIterator<Data>(fileStream); }
155 CSVIterator<Data>
end() {
return CSVIterator<Data>(); }
157 void close() { fileStream.close(); }
161 std::vector<Data> fileData;
163 std::for_each(
begin(),
end(), [&fileData](
const Data& data)
164 { fileData.push_back(data); });
170 std::ifstream fileStream;
bool operator==(CSVIterator &iterator)
Data const * operator->() const
Prefix increment.
bool operator!=(CSVIterator &iterator)
CSVIterator(std::istream &inputStream)
Data const & operator*() const
CSVIterator & operator++()
Postfix increment.
CSVIterator operator++(int)
Iterable parser of CSV files.
std::vector< Data > collect()
CSVIterator< Data > end()
CSVIterator< Data > begin()
CSVParser(const char *fileName, bool hasHeader=false)
This file includes all the types the logdecoder script will decode.