LCOV - code coverage report
Current view: top level - Core - InPointerFilter.hxx (source / functions) Hit Total Coverage
Test: coverage.info.cleaned Lines: 27 27 100.0 %
Date: 2021-02-18 20:07:22 Functions: 9 9 100.0 %

          Line data    Source code
       1             : /**
       2             :  * \file InPointerFilter.hxx
       3             :  */
       4             : 
       5             : #include "InPointerFilter.h"
       6             : 
       7             : #include <cstring>
       8             : 
       9             : namespace ATK
      10             : {
      11             :   template<typename DataType>
      12         188 :   InPointerFilter<DataType>::InPointerFilter(const DataType* array, int channels, gsl::index size, bool interleaved)
      13         188 :   :TypedBaseFilter<DataType>(0, static_cast<int>(interleaved?size:channels)), array(array), mysize(interleaved?channels:size), channels(static_cast<int>(interleaved?size:channels)), interleaved(interleaved)
      14             :   {
      15         188 :   }
      16             :   
      17             :   template<typename DataType>
      18           7 :   void InPointerFilter<DataType>::set_pointer(const DataType* array, gsl::index size)
      19             :   {
      20           7 :     this->array = array;
      21           7 :     mysize = size;
      22           7 :     offset = 0;
      23           7 :   }
      24             :   
      25             :   template<typename DataType>
      26         605 :   void InPointerFilter<DataType>::process_impl(gsl::index size) const
      27             :   {
      28         605 :     if(!interleaved)
      29             :     {
      30         600 :       auto i = std::min(size, mysize - offset);
      31         600 :       if (mysize < offset)
      32             :       {
      33           2 :         i = 0;
      34             :       }
      35        1206 :       for(gsl::index j = 0; j < channels; ++j)
      36             :       {
      37         606 :         memcpy(reinterpret_cast<void*>(outputs[j]), reinterpret_cast<const void*>(&array[offset + (j * mysize)]), static_cast<size_t>(i) * sizeof(DataType));
      38             :       }
      39         732 :       for(; i < size; ++i)
      40             :       {
      41         286 :         for(gsl::index j = 0; j < channels; ++j)
      42             :         {
      43         154 :           outputs[j][i] = TypeTraits<DataType>::Zero();
      44             :         }
      45             :       }
      46             :     }
      47             :     else
      48             :     {
      49           5 :       gsl::index i = 0;
      50         215 :       for(i = 0; i < size && (i + offset < mysize); ++i)
      51             :       {
      52         630 :         for(gsl::index j = 0; j < channels; ++j)
      53             :         {
      54         420 :           outputs[j][i] = array[channels * offset + (j + i * channels)];
      55             :         }
      56             :       }
      57         105 :       for(; i < size; ++i)
      58             :       {
      59         300 :         for(gsl::index j = 0; j < channels; ++j)
      60             :         {
      61         200 :           outputs[j][i] = TypeTraits<DataType>::Zero();
      62             :         }
      63             :       }
      64             :     }
      65             :     
      66         605 :     offset += size;
      67         605 :   }
      68             : }

Generated by: LCOV version TK-3.3.0-4-gdba42eea