3#include <benchmark/benchmark.h>
12std::string
file_read(
const std::string_view file_name) {
15 std::ifstream in{std::string{file_name}};
21 in.seekg(0, std::ios::end);
24 std::string out(in.tellg(),
'\0');
27 in.seekg(0, std::ios::beg);
30 in.read(out.data(), out.size());
37 using namespace std::views;
38 return row | split(
',') | transform([](
auto &&val) ->
double {
39 auto str = std::string{cbegin(val), cend(val)};
41 std::from_chars(str.data(), str.data() + str.size(), value);
47 auto &&row = std::string{
"1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0"};
48 for (
auto _ : state) {
50 benchmark::DoNotOptimize(xs);
58 using namespace std::views;
59 return row | split(
',') | transform([](
auto &&val) {
60 auto &&str = std::string{cbegin(val), cend(val)};
61 auto value =
double{};
62 std::from_chars(str.data(), str.data() + str.size(), value);
68 auto &&row = std::string{
"1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0"};
69 for (
auto _ : state) {
71 benchmark::DoNotOptimize(xs);
78std::vector<std::vector<double>>
to_series(
const std::string csv) {
81 std::istringstream in{csv};
82 std::ranges::istream_view<std::string> rows(in);
85 return rows | std::views::drop(1) | std::views::transform(
split_on_comma)
86 | std::ranges::to<std::vector<std::vector<double>>>();
90std::vector<std::vector<double>>
to_series3(
const std::string &csv) {
93 std::istringstream in{csv};
94 std::ranges::istream_view<std::string> rows(in);
101 auto &&xs = std::vector<double>(
fx::cells);
104 auto &&series = std::vector<std::vector<double>>{};
109 std::ranges::copy(v, std::begin(xs));
112 series.emplace_back(xs);
115 return std::move(series);
119std::vector<std::vector<double>>
to_series4(
const std::string &csv) {
122 std::istringstream in{csv};
123 std::ranges::istream_view<std::string> rows(in);
130 auto &&series = std::vector<std::vector<double>>{};
131 series.reserve(std::ranges::distance(px));
133 std::ranges::transform(px, std::back_inserter(series), [&](
auto &&v) {
135 auto &&xs = std::vector<double>(
fx::cells);
136 std::ranges::copy(v, std::begin(xs));
void BM_split_on_comma2(benchmark::State &state)
BENCHMARK(BM_split_on_comma)
const auto split_on_comma2
Take a row of data, split on delimiter and return a row of floating points.
const auto split_on_comma
Take a row of data, split on delimiter and return a row of floating points.
std::vector< std::vector< double > > to_series3(const std::string &csv)
Open a CSV file and return a vector of floating points for each row.
std::string file_read(const std::string_view file_name)
Open a file a return a string of the contents.
void BM_split_on_comma(benchmark::State &state)
std::vector< std::vector< double > > to_series(const std::string csv)
Open a CSV file and return a vector of floating points for each row.
std::vector< std::vector< double > > to_series4(const std::string &csv)
Open a CSV file and return a vector of floating points for each row.
constexpr auto cells
Number of cells in a row of price data.