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

Method GetEngValue

lib/mdflib/include/mdf/isamplereduction.h:197–273  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

195
196template<typename T>
197void ISampleReduction::GetEngValue( const IChannel& channel, uint64_t sample,
198 uint64_t array_index, SrValue<T>& value ) const {
199 value = {};
200
201 const auto* channel_conversion = channel.ChannelConversion();
202
203 switch (channel.DataType()) {
204 case ChannelDataType::UnsignedIntegerLe:
205 case ChannelDataType::UnsignedIntegerBe: {
206 SrValue<uint64_t> temp;
207 GetChannelValueUint(channel, sample, array_index, temp);
208 if (channel_conversion != 0) {
209 const bool mean_valid = channel_conversion->Convert(temp.MeanValue, value.MeanValue);
210 const bool min_valid = channel_conversion->Convert(temp.MinValue, value.MinValue);
211 const bool max_valid = channel_conversion->Convert(temp.MaxValue, value.MaxValue);
212 value.MeanValid = temp.MeanValid && mean_valid;
213 value.MinValid = temp.MinValid && min_valid;
214 value.MaxValid = temp.MaxValid && max_valid;
215 } else {
216 value.MeanValue = static_cast<T>(temp.MeanValue);
217 value.MinValue = static_cast<T>(temp.MinValue);
218 value.MaxValue = static_cast<T>(temp.MaxValue);
219 value.MeanValid = temp.MeanValid;
220 value.MinValid = temp.MinValid;
221 value.MaxValid = temp.MaxValid;
222 }
223 break;
224 }
225
226 case ChannelDataType::SignedIntegerLe:
227 case ChannelDataType::SignedIntegerBe: {
228 SrValue<int64_t> temp;
229 GetChannelValueInt(channel, sample, array_index, temp);
230 if (channel_conversion != 0) {
231 const bool mean_valid = channel_conversion->Convert(temp.MeanValue, value.MeanValue);
232 const bool min_valid = channel_conversion->Convert(temp.MinValue, value.MinValue);
233 const bool max_valid = channel_conversion->Convert(temp.MaxValue, value.MaxValue);
234 value.MeanValid = temp.MeanValid && mean_valid;
235 value.MinValid = temp.MinValid && min_valid;
236 value.MaxValid = temp.MaxValid && max_valid;
237 } else {
238 value.MeanValue = static_cast<T>(temp.MeanValue);
239 value.MinValue = static_cast<T>(temp.MinValue);
240 value.MaxValue = static_cast<T>(temp.MaxValue);
241 value.MeanValid = temp.MeanValid;
242 value.MinValid = temp.MinValid;
243 value.MaxValid = temp.MaxValid;
244 }
245 break;
246 }
247
248 case ChannelDataType::FloatLe:
249 case ChannelDataType::FloatBe: {
250 SrValue<double> temp;
251 GetChannelValueDouble(channel, sample, array_index, temp);
252 if (channel_conversion != 0) {
253 const bool mean_valid = channel_conversion->Convert(temp.MeanValue, value.MeanValue);
254 const bool min_valid = channel_conversion->Convert(temp.MinValue, value.MinValue);

Callers

nothing calls this directly

Calls 3

ChannelConversionMethod · 0.45
DataTypeMethod · 0.45
ConvertMethod · 0.45

Tested by

no test coverage detected