MCPcopy Create free account
hub / github.com/Serial-Studio/Serial-Studio / CreateChannelObserver

Function CreateChannelObserver

lib/mdflib/mdflib/src/mdfreader.cpp:83–174  ·  view source on GitHub ↗

Creates a channel sample observer. The sample observer creates internal memory for all samples.\n The function also attach the observer to the notifier (see observer pattern). The destructor of the channel observer detach the observer. \param data_group \param group \param channel \return Smart pointer to a channel observer

Source from the content-addressed store, hash-verified

81/// detach the observer. \param data_group \param group \param channel \return
82/// Smart pointer to a channel observer
83ChannelObserverPtr CreateChannelObserver(const IDataGroup &data_group,
84 const IChannelGroup &group,
85 const IChannel &channel) {
86 std::unique_ptr<IChannelObserver> observer;
87
88 // Note, that num,ber of bytes returns number of bytes for
89 // all value in the array
90 const auto array_size = channel.ArraySize();
91 const auto value_size = channel.DataBytes();
92
93 switch (channel.DataType()) {
94 case ChannelDataType::UnsignedIntegerLe:
95 case ChannelDataType::UnsignedIntegerBe:
96 switch (value_size) {
97 case 1:
98 observer = std::make_unique<detail::ChannelObserver<uint8_t>>(
99 data_group, group, channel);
100 break;
101
102 case 2:
103 observer = std::make_unique<detail::ChannelObserver<uint16_t>>(
104 data_group, group, channel);
105 break;
106
107 case 4:
108 observer = std::make_unique<detail::ChannelObserver<uint32_t>>(
109 data_group, group, channel);
110 break;
111
112 case 8:
113 default:
114 observer = std::make_unique<detail::ChannelObserver<uint64_t>>(
115 data_group, group, channel);
116 break;
117 }
118 break;
119
120 case ChannelDataType::SignedIntegerLe:
121 case ChannelDataType::SignedIntegerBe:
122 if (value_size <= 1) {
123 observer = std::make_unique<detail::ChannelObserver<int8_t>>(
124 data_group, group, channel);
125 } else if (value_size <= 2) {
126 observer = std::make_unique<detail::ChannelObserver<int16_t>>(
127 data_group, group, channel);
128 } else if (value_size <= 4) {
129 observer = std::make_unique<detail::ChannelObserver<int32_t>>(
130 data_group, group, channel);
131 } else {
132 observer = std::make_unique<detail::ChannelObserver<int64_t>>(
133 data_group, group, channel);
134 }
135 break;
136
137 case ChannelDataType::FloatLe:
138 case ChannelDataType::FloatBe:
139 if (value_size <= 4) {
140 observer = std::make_unique<detail::ChannelObserver<float>>(

Callers 11

TEST_FFunction · 0.85
TEST_FFunction · 0.85
mainFunction · 0.85
OnShowChannelDataMethod · 0.85
OnPlotChannelDataMethod · 0.85
EXPORTFunction · 0.85
mdflibrary.cppFile · 0.85
CreateChannelObserverMethod · 0.85
mainFunction · 0.85

Calls 8

stricmpFunction · 0.85
ArraySizeMethod · 0.45
DataBytesMethod · 0.45
DataTypeMethod · 0.45
ChannelGroupsMethod · 0.45
ChannelsMethod · 0.45
NameMethod · 0.45
NofSamplesMethod · 0.45

Tested by 3

TEST_FFunction · 0.68
TEST_FFunction · 0.68
mainFunction · 0.68