1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
     13
     14
     15
     16
     17
     18
     19
     20
     21
     22
     23
     24
     25
     26
#ifndef CSV_READER_HPP
#define CSV_READER_HPP

#include <iostream>
#include <sstream>
#include "update-with-index.hpp"

template<typename... Variables>
bool scan_csv_line(std::istream& in, Variables&... vars) {
   update_with_index([&in](std::size_t size, std::size_t index, auto& var) {
      char delimiter;
      if (index + 1 < size) {
	 delimiter = ',';
      } else {
	 delimiter = '\n';
      }
      std::string s;
      if (std::getline(in, s, delimiter)) {
	 std::istringstream is(s);
	 is >> var;
      }
   }, vars...);
   return !!in;
}

#endif