Line data Source code
1 : /** 2 : * \file SumFilter.hxx 3 : */ 4 : 5 : #include "SumFilter.h" 6 : 7 : #include <cstring> 8 : 9 : namespace ATK 10 : { 11 : template<typename DataType_> 12 79 : SumFilter<DataType_>::SumFilter(gsl::index nb_output_channels, gsl::index summed_channels) 13 79 : :Parent(summed_channels * nb_output_channels, nb_output_channels), summed_channels(summed_channels) 14 : { 15 79 : } 16 : 17 : template<typename DataType_> 18 10513 : void SumFilter<DataType_>::process_impl(gsl::index size) const 19 : { 20 10513 : assert(nb_input_ports == summed_channels * nb_output_ports); 21 : 22 21026 : for (gsl::index channel = 0; channel < nb_output_ports; ++channel) 23 : { 24 10513 : const DataType* ATK_RESTRICT input = converted_inputs[summed_channels * channel]; 25 10513 : DataType* ATK_RESTRICT output = outputs[channel]; 26 10513 : std::memcpy(output, input, size * sizeof(DataType_)); 27 : 28 21041 : for(gsl::index summed_channel = 1; summed_channel < summed_channels; ++summed_channel) 29 : { 30 10528 : const DataType* ATK_RESTRICT input = converted_inputs[summed_channels * channel + summed_channel]; 31 6526863 : for (gsl::index i = 0; i < size; ++i) 32 : { 33 6516328 : output[i] = output[i] + input[i]; 34 : } 35 : } 36 : } 37 10513 : } 38 : }