SRS-control 0.1.4
Loading...
Searching...
No Matches
StructToProtoConverter.hpp
Go to the documentation of this file.
1#pragma once
2
6#include "srs/data/message.pb.h"
8#include <boost/asio/any_io_executor.hpp>
9#include <boost/asio/thread_pool.hpp>
10#include <cassert>
11#include <cstddef>
12#include <string_view>
13#include <vector>
14
15namespace srs::process
16{
18 : public ConverterTask<DataConvertOptions::structure_to_proto, const StructData*, const proto::Data*>
19 {
20 public:
21 explicit Struct2ProtoConverter(std::size_t n_lines)
22 : ConverterTask{ "Struct deserializer", structure, n_lines }
23 {
24 output_data_.resize(n_lines);
25 }
26
27 [[nodiscard]] auto operator()(std::size_t line_num) const -> OutputType
28 {
29 assert(line_num < get_n_lines());
30 return &output_data_[line_num];
31 }
32
33 auto run(const OutputTo<InputType> auto& prev_data_converter, std::size_t line_number) -> RunResult
34 {
35 assert(line_number < get_n_lines());
36 auto& output_data = output_data_[line_number];
37 output_data.Clear();
38 auto input_data = prev_data_converter(line_number);
39 convert(*input_data, output_data);
40 return this->operator()(line_number);
41 }
42
43 private:
44 std::vector<proto::Data> output_data_;
45 static void convert(const StructData& struct_data, proto::Data& output_data);
46 };
47} // namespace srs::process
ConverterTask(std::string_view name, DataConvertOptions prev_convert, std::size_t n_lines=1)
auto operator()(std::size_t line_num) const -> OutputType
auto run(const OutputTo< InputType > auto &prev_data_converter, std::size_t line_number) -> RunResult
static void convert(const StructData &struct_data, proto::Data &output_data)