| 195 | |
| 196 | template<typename T> |
| 197 | void 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); |
nothing calls this directly
no test coverage detected