LCOV - code coverage report
Current view: top level - src/Index - NDIndex.h (source / functions) Coverage Total Hit
Test: final_report.info Lines: 100.0 % 1 1
Test Date: 2025-07-09 14:57:58 Functions: 100.0 % 6 6

            Line data    Source code
       1              : //
       2              : // Class NDIndex
       3              : //   This is a simple wrapper around Index that just keeps track of
       4              : //   N of them and passes along requests for intersect, etc.
       5              : //
       6              : #ifndef IPPL_NDINDEX_H
       7              : #define IPPL_NDINDEX_H
       8              : 
       9              : #include <initializer_list>
      10              : 
      11              : #include "Types/Vector.h"
      12              : 
      13              : #include "Index/Index.h"
      14              : 
      15              : namespace ippl {
      16              :     /*!
      17              :      * @file NDIndex.h
      18              :      * @tparam Dim the number of index dimensions
      19              :      */
      20              :     template <unsigned Dim>
      21              :     class NDIndex {
      22              :     public:
      23              :         KOKKOS_FUNCTION
      24        14206 :         NDIndex() {}
      25              : 
      26              :         template <class... Args>
      27              :         KOKKOS_FUNCTION NDIndex(const Args&... args);
      28              : 
      29              :         KOKKOS_FUNCTION NDIndex(const Vector<unsigned, Dim>& sizes);
      30              : 
      31              :         /*!
      32              :          * @returns a reference to any of the Indexes.
      33              :          */
      34              :         KOKKOS_INLINE_FUNCTION const ippl::Index& operator[](unsigned d) const noexcept;
      35              : 
      36              :         KOKKOS_INLINE_FUNCTION Index& operator[](unsigned d) noexcept;
      37              : 
      38              :         /*!
      39              :          * @returns the total size.
      40              :          */
      41              :         KOKKOS_INLINE_FUNCTION unsigned size() const noexcept;
      42              : 
      43              :         /*!
      44              :          * @returns true if empty.
      45              :          */
      46              :         KOKKOS_INLINE_FUNCTION bool empty() const noexcept;
      47              : 
      48              :         /*!
      49              :          * Intersect with another NDIndex.
      50              :          */
      51              :         KOKKOS_INLINE_FUNCTION NDIndex<Dim> intersect(const NDIndex<Dim>&) const;
      52              : 
      53              :         /*!
      54              :          * Intersect with another NDIndex.
      55              :          */
      56              :         KOKKOS_INLINE_FUNCTION NDIndex<Dim> grow(int ncells) const;
      57              : 
      58              :         KOKKOS_INLINE_FUNCTION NDIndex<Dim> grow(int ncells, unsigned int dim) const;
      59              : 
      60              :         KOKKOS_INLINE_FUNCTION bool touches(const NDIndex<Dim>&) const;
      61              : 
      62              :         KOKKOS_INLINE_FUNCTION bool contains(const NDIndex<Dim>& a) const;
      63              : 
      64              :         // Split on dimension d with at position i
      65              :         KOKKOS_INLINE_FUNCTION bool split(NDIndex<Dim>& l, NDIndex<Dim>& r, unsigned d,
      66              :                                           int i) const;
      67              : 
      68              :         // Split on dimension d with the given ratio 0<a<1.
      69              :         KOKKOS_INLINE_FUNCTION bool split(NDIndex<Dim>& l, NDIndex<Dim>& r, unsigned d,
      70              :                                           double a) const;
      71              : 
      72              :         // Split on dimension d, or the longest dimension.
      73              :         KOKKOS_INLINE_FUNCTION bool split(NDIndex<Dim>& l, NDIndex<Dim>& r, unsigned d) const;
      74              : 
      75              :         KOKKOS_INLINE_FUNCTION bool split(NDIndex<Dim>& l, NDIndex<Dim>& r) const;
      76              : 
      77              :         KOKKOS_INLINE_FUNCTION Vector<size_t, Dim> length() const;
      78              :         KOKKOS_INLINE_FUNCTION Vector<int, Dim> first() const;
      79              :         KOKKOS_INLINE_FUNCTION Vector<int, Dim> last() const;
      80              : 
      81              :         using iterator       = Index*;
      82              :         using const_iterator = const Index*;
      83              :         KOKKOS_INLINE_FUNCTION constexpr iterator begin();
      84              :         KOKKOS_INLINE_FUNCTION constexpr iterator end();
      85              :         KOKKOS_INLINE_FUNCTION constexpr const_iterator begin() const;
      86              :         KOKKOS_INLINE_FUNCTION constexpr const_iterator end() const;
      87              : 
      88              :     private:
      89              :         KOKKOS_FUNCTION
      90              :         NDIndex(std::initializer_list<Index> indices);
      91              : 
      92              :         //! Array of indices
      93              :         Index indices_m[Dim];
      94              :     };
      95              : }  // namespace ippl
      96              : 
      97              : #include "Index/NDIndex.hpp"
      98              : 
      99              : #endif
        

Generated by: LCOV version 2.0-1