LCOV - code coverage report
Current view: top level - elsa/storage - Functions.hpp (source / functions) Hit Total Coverage
Test: coverage-all.lcov Lines: 12 12 100.0 %
Date: 2024-12-30 06:40:08 Functions: 20 20 100.0 %

          Line data    Source code
       1             : #pragma once
       2             : 
       3             : #include "CUDADefines.h"
       4             : #include <utility>
       5             : #include <thrust/complex.h>
       6             : 
       7             : namespace elsa
       8             : {
       9             :     // Arithmetic operations
      10             :     // negate
      11             :     struct negate {
      12             :         template <class T>
      13             :         __host__ __device__ constexpr auto operator()(const T& arg)
      14             :             -> decltype(-std::declval<T>()) const
      15             :         {
      16             :             return -arg;
      17             :         }
      18             :     };
      19             : 
      20             :     // identity
      21             :     struct identity {
      22             :         template <class T>
      23             :         __host__ __device__ constexpr auto operator()(const T& arg)
      24             :             -> decltype(std::declval<T>()) const
      25             :         {
      26             :             return arg;
      27             :         }
      28             :     };
      29             : 
      30             :     // plus
      31             :     struct plus {
      32             :         template <class T, class U = T>
      33             :         __host__ __device__ constexpr auto operator()(const T& lhs, const U& rhs)
      34             :             -> decltype(std::declval<T>() + std::declval<U>()) const
      35      859227 :         {
      36      859227 :             return lhs + rhs;
      37      859227 :         }
      38             :     };
      39             : 
      40             :     // minus
      41             :     struct minus {
      42             :         template <class T, class U = T>
      43             :         __host__ __device__ constexpr auto operator()(const T& lhs, const U& rhs)
      44             :             -> decltype(std::declval<T>() - std::declval<U>()) const
      45      439722 :         {
      46      439722 :             return lhs - rhs;
      47      439722 :         }
      48             :     };
      49             : 
      50             :     // multiplies
      51             :     struct multiplies {
      52             :         template <class T, class U = T>
      53             :         __host__ __device__ constexpr auto operator()(const T& lhs, const U& rhs)
      54             :             -> decltype(std::declval<T>() * std::declval<U>()) const
      55      652736 :         {
      56      652736 :             return lhs * rhs;
      57      652736 :         }
      58             :     };
      59             : 
      60             :     // divides
      61             :     struct divides {
      62             :         template <class T, class U = T>
      63             :         __host__ __device__ constexpr auto operator()(const T& lhs, const U& rhs)
      64             :             -> decltype(std::declval<T>() / std::declval<U>()) const
      65       25744 :         {
      66       25744 :             return lhs / rhs;
      67       25744 :         }
      68             :     };
      69             : 
      70             :     // modulus
      71             :     struct modulus {
      72             :         template <class T, class U = T>
      73             :         __host__ __device__ constexpr auto operator()(const T& lhs, const U& rhs)
      74             :             -> decltype(std::declval<T>() % std::declval<U>()) const
      75             :         {
      76             :             return lhs % rhs;
      77             :         }
      78             :     };
      79             : } // namespace elsa

Generated by: LCOV version 1.14