35{
37 if (datatypes.size() != 1) {
39 "Multiple output data types specified! Expected only a single type!"));
40 }
41 std::string raw_dt{ *datatypes.begin() };
42 TLOG() <<
"Choosing specializations for ElinkModel for output connection "
43 << " [uid:" << conn_uid << " , data_type:" << raw_dt << ']';
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79 if (raw_dt.find("PDSStreamFrame") != std::string::npos) {
80
81 auto elink_model = std::make_unique<ElinkModel<fdreadoutlibs::types::DAPHNEStreamSuperChunkTypeAdapter>>();
82 elink_model->set_sink(conn_uid);
83 auto& parser = elink_model->get_parser();
84 auto& sink = elink_model->get_sink();
85 parser.process_chunk_func = parsers::fixsizedChunkInto<fdreadoutlibs::types::DAPHNEStreamSuperChunkTypeAdapter>(sink);
86 return elink_model;
87
88 } else if (raw_dt.find("PDSFrame") != std::string::npos) {
89
90 auto elink_model = std::make_unique<ElinkModel<fdreadoutlibs::types::DAPHNESuperChunkTypeAdapter>>();
91 elink_model->set_sink(conn_uid);
92 auto&
parser = elink_model->get_parser();
93 auto& sink = elink_model->get_sink();
94 parser.process_chunk_func = parsers::fixsizedChunkInto<fdreadoutlibs::types::DAPHNESuperChunkTypeAdapter>(sink);
95 return elink_model;
96
97
98 } else if (raw_dt.find("varsize") != std::string::npos) {
99
100 auto elink_model = std::make_unique<ElinkModel<fdreadoutlibs::types::VariableSizePayloadTypeAdapter>>();
101 elink_model->set_sink(conn_uid);
102 auto&
parser = elink_model->get_parser();
103 auto& sink = elink_model->get_sink();
104 parser.process_chunk_func = parsers::varsizedChunkIntoWrapper(sink);
105 parser.process_shortchunk_func = parsers::varsizedShortchunkIntoWrapper(sink);
106 return elink_model;
107 }
108
109 return nullptr;
110}
static std::shared_ptr< IOManager > get()
void error(const Issue &issue)