SRS-control 0.1.4
 
Loading...
Searching...
No Matches
DataConvertOptions.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <algorithm>
4#include <array>
5#include <cstdint>
6#include <fmt/format.h>
7#include <string_view>
8
9namespace srs::process
10{
20
21 constexpr auto convert_option_to_string(DataConvertOptions option) -> std::string_view
22 {
23 using enum DataConvertOptions;
24 switch (option)
25 {
26 case none:
27 return std::string_view{ "none" };
28 case raw:
29 return std::string_view{ "raw" };
30 case raw_frame:
31 return std::string_view{ "raw_frame" };
32 case structure:
33 return std::string_view{ "structure" };
34 case proto:
35 return std::string_view{ "proto" };
36 case proto_frame:
37 return std::string_view{ "proto_frame" };
38 }
39 }
40
42 {
44 : dependee{ option }
45 , depender{ next_option }
46 {
47 }
50 };
51
52 constexpr auto EMPTY_CONVERT_OPTION_COUNT_MAP = []()
53 {
54 using enum DataConvertOptions;
55 return std::array{ std::make_pair(raw, 0),
56 std::make_pair(raw_frame, 0),
57 std::make_pair(structure, 0),
58 std::make_pair(proto, 0),
59 std::make_pair(proto_frame, 0) };
60 }();
61
70
71 constexpr auto convert_option_has_dependency(DataConvertOptions dependee, DataConvertOptions depender) -> bool
72 {
73 // fmt::println("-----------dependee: {}, depender: {}",
74 // convert_option_to_string(dependee),
75 // convert_option_to_string(dependee));
76 if (dependee == depender)
77 {
78 return true;
79 }
80
81 return std::ranges::any_of(CONVERT_OPTION_RELATIONS,
82 [dependee, depender](ConvertOptionRelation relation) -> bool
83 {
84 if (dependee == relation.dependee)
85 {
86 if (depender == relation.depender)
87 {
88 return true;
89 }
90 return convert_option_has_dependency(relation.depender, depender);
91 }
92
93 // nothing is depending on it
94 return false;
95 });
96 }
97
98} // namespace srs
99
100template <>
101class fmt::formatter<srs::process::DataConvertOptions>
102{
103 public:
104 static constexpr auto parse(format_parse_context& ctx) { return ctx.end(); }
105 template <typename FmtContent>
106 constexpr auto format(srs::process::DataConvertOptions option, FmtContent& ctn) const
107 {
109 switch (option)
110 {
111 case none:
112 return fmt::format_to(ctn.out(), "none");
113 case raw:
114 return fmt::format_to(ctn.out(), "raw");
115 case raw_frame:
116 return fmt::format_to(ctn.out(), "raw_frame");
117 case structure:
118 return fmt::format_to(ctn.out(), "structure");
119 case proto:
120 return fmt::format_to(ctn.out(), "proto");
121 case proto_frame:
122 return fmt::format_to(ctn.out(), "proto_frame");
123 }
124 }
125};
static constexpr auto parse(format_parse_context &ctx)
constexpr auto format(srs::process::DataConvertOptions option, FmtContent &ctn) const
constexpr auto EMPTY_CONVERT_OPTION_COUNT_MAP
constexpr auto CONVERT_OPTION_RELATIONS
constexpr auto convert_option_to_string(DataConvertOptions option) -> std::string_view
constexpr auto convert_option_has_dependency(DataConvertOptions dependee, DataConvertOptions depender) -> bool
constexpr ConvertOptionRelation(DataConvertOptions option, DataConvertOptions next_option)