SRS-control 0.1.4
Loading...
Searching...
No Matches
BinaryFileWriter.hpp
Go to the documentation of this file.
1#pragma once
2
7#include <cassert>
8#include <cstddef>
9#include <fmt/format.h>
10#include <fstream>
11#include <spdlog/spdlog.h>
12#include <string>
13#include <string_view>
14#include <vector>
15
16namespace srs::writer
17{
18 class BinaryFile : public process::WriterTask<DataWriterOption::bin, std::string_view, std::size_t>
19 {
20 public:
21 static constexpr auto IsStructType = false;
22
23 BinaryFile(const std::string& filename, process::DataConvertOptions convert_mode, std::size_t n_lines);
24 BinaryFile(const BinaryFile&) = delete;
25 BinaryFile(BinaryFile&&) = default;
26 BinaryFile& operator=(const BinaryFile&) = delete;
29
30 auto run(const OutputTo<InputType> auto& prev_data_converter, std::size_t line_number = 0) -> RunResult
31 {
32 assert(line_number < get_n_lines());
33 auto input_data = prev_data_converter(line_number);
34 output_data_[line_number] += input_data.size();
35 output_streams_[line_number] << input_data;
36 return output_data_[line_number];
37 }
38 void close();
39
40 [[nodiscard]] auto get_filename() const -> const std::string& { return file_name_; }
41 [[nodiscard]] auto operator()(std::size_t line_number = 0) const -> OutputType
42 {
43 return output_data_[line_number];
44 }
45
46 private:
47 std::string file_name_;
48 std::vector<OutputType> output_data_;
49 std::vector<std::ofstream> output_streams_;
50 };
51
52} // namespace srs::writer
std::expected< OutputType, std::string_view > RunResult
std::vector< std::ofstream > output_streams_
BinaryFile(const std::string &filename, process::DataConvertOptions convert_mode, std::size_t n_lines)
BinaryFile & operator=(const BinaryFile &)=delete
auto operator()(std::size_t line_number=0) const -> OutputType
BinaryFile(const BinaryFile &)=delete
auto run(const OutputTo< InputType > auto &prev_data_converter, std::size_t line_number=0) -> RunResult
BinaryFile(BinaryFile &&)=default
auto get_filename() const -> const std::string &
static constexpr auto IsStructType
BinaryFile & operator=(BinaryFile &&)=default
std::vector< OutputType > output_data_