Line data Source code
1 : /** 2 : * \file Utilities.hxx 3 : */ 4 : 5 : #include "Utilities.h" 6 : #include <ATK/Core/TypeTraits.h> 7 : 8 : #include <gsl/gsl> 9 : 10 : #include <cstring> 11 : 12 : namespace ATK 13 : { 14 : namespace Utilities 15 : { 16 : template<typename DataType> 17 4627 : void convert_to_array(const DataType* input_array, DataType* output_array, gsl::index size, gsl::index offset, gsl::index ports) 18 : { 19 4627 : if(ports == 1) 20 : { 21 4621 : memcpy(reinterpret_cast<void*>(output_array), reinterpret_cast<const void*>(input_array + offset), size * sizeof(DataType)); 22 : } 23 : else 24 : { 25 6150 : for(gsl::index i = 0; i < size; ++i) 26 : { 27 6144 : output_array[i] = input_array[i * ports + offset]; 28 : } 29 : } 30 4627 : } 31 : 32 : template<typename DataType1, typename DataType2> 33 156 : typename std::enable_if<!std::is_same<DataType1, DataType2>::value>::type convert_to_array(const DataType1* input_array, DataType2* output_array, gsl::index size, gsl::index offset, gsl::index ports) 34 : { 35 9576747 : for(gsl::index i = 0; i < size; ++i) 36 : { 37 9576598 : output_array[i] = ATK::TypeTraits<DataType2>::from_double(ATK::TypeTraits<DataType1>::to_double(input_array[i * ports + offset])); 38 : } 39 156 : } 40 : } 41 : 42 : template<typename DataType1, typename DataType2> 43 4783 : void ConversionUtilities<DataType1, DataType2>::convert_array(const DataType1* input_array, DataType2* output_array, gsl::index size, gsl::index offset, gsl::index ports) 44 : { 45 4783 : Utilities::convert_to_array(input_array, output_array, size, offset, ports); 46 4783 : } 47 : }