LCOV - code coverage report
Current view: top level - ext/amrex/3d-coverage-g++-24.08/include - AMReX_LayoutData.H (source / functions) Hit Total Coverage
Test: coverage_merged.info Lines: 1 18 5.6 %
Date: 2024-11-18 05:28:54 Functions: 1 121 0.8 %

          Line data    Source code
       1             : #ifndef AMREX_LayoutData_H_
       2             : #define AMREX_LayoutData_H_
       3             : #include <AMReX_Config.H>
       4             : 
       5             : #include <AMReX_FabArrayBase.H>
       6             : #include <AMReX_MFIter.H>
       7             : 
       8             : namespace amrex
       9             : {
      10             :   //! a one-thingy-per-box distributed object
      11             :   template <class T>
      12             :   class LayoutData: public FabArrayBase
      13             :   {
      14             :   public:
      15             : 
      16             :     //!
      17           0 :     LayoutData() = default;
      18             : 
      19           0 :     LayoutData(const BoxArray            & a_grids,
      20             :                const DistributionMapping & a_dm)
      21           0 :       {
      22           0 :         define(a_grids, a_dm);
      23           0 :       }
      24             : 
      25           0 :     void define(const BoxArray           & a_grids,
      26             :                 const DistributionMapping & a_dm)
      27             :       {
      28           0 :         FabArrayBase::define(a_grids, a_dm, 1, 0);
      29           0 :         m_need_to_clear_bd = true;
      30           0 :         addThisBD();
      31           0 :         m_data.resize(local_size());
      32           0 :       }
      33             : 
      34         300 :     ~LayoutData () { if (m_need_to_clear_bd) { clearThisBD(); } }
      35             : 
      36             :     LayoutData (const LayoutData& rhs) noexcept
      37             :         : FabArrayBase(rhs),
      38             :           m_data(rhs.m_data),
      39             :           m_need_to_clear_bd(rhs.m_need_to_clear_bd)
      40             :     {
      41             :         if (m_need_to_clear_bd) { addThisBD(); }
      42             :     }
      43             : 
      44             :     LayoutData (LayoutData&& rhs) noexcept
      45             :         : FabArrayBase(static_cast<FabArrayBase&&>(rhs)),
      46             :           m_data(std::move(rhs.m_data)),
      47             :           m_need_to_clear_bd(rhs.m_need_to_clear_bd)
      48             :     {
      49             :         rhs.m_need_to_clear_bd = false;
      50             :     }
      51             : 
      52             :     LayoutData& operator= (const LayoutData& rhs) noexcept
      53             :     {
      54             :         if (&rhs != this)
      55             :         {
      56             :             m_data.clear();
      57             :             if (m_need_to_clear_bd) { clearThisBD(); }
      58             : 
      59             :             FabArrayBase::operator=(rhs);
      60             :             m_data = rhs.m_data;
      61             :             m_need_to_clear_bd = rhs.m_need_to_clear_bd;
      62             : 
      63             :             if (m_need_to_clear_bd) { addThisBD(); }
      64             :         }
      65             :         return *this;
      66             :     }
      67             : 
      68             :     LayoutData& operator= (LayoutData&& rhs) noexcept
      69             :     {
      70             :         if (&rhs != this)
      71             :         {
      72             :             m_data.clear();
      73             :             if (m_need_to_clear_bd) { clearThisBD(); }
      74             : 
      75             :             FabArrayBase::operator=(static_cast<FabArrayBase&&>(rhs));
      76             :             m_data = std::move(rhs.m_data);
      77             :             m_need_to_clear_bd = rhs.m_need_to_clear_bd;
      78             : 
      79             :             rhs.m_need_to_clear_bd = false;
      80             :         }
      81             :         return *this;
      82             :     }
      83             : 
      84           0 :     T& operator[](const MFIter& a_mfi) noexcept
      85             :       {
      86           0 :         int local_index = a_mfi.LocalIndex();
      87             :         BL_ASSERT(local_index >= 0 && local_index < m_data.size() &&
      88             :                   DistributionMap() == a_mfi.DistributionMap());
      89           0 :         return m_data[local_index];
      90             :       }
      91             : 
      92             : 
      93             :     const T& operator[](const MFIter& a_mfi) const noexcept
      94             :       {
      95             :         int local_index = a_mfi.LocalIndex();
      96             :         BL_ASSERT(local_index >= 0 && local_index < m_data.size() &&
      97             :                   DistributionMap() == a_mfi.DistributionMap());
      98             :         return m_data[local_index];
      99             :       }
     100             : 
     101           0 :     T& operator[](int a_box_index) noexcept
     102             :       {
     103           0 :         int local_index = this->localindex(a_box_index);
     104             :         BL_ASSERT(local_index >= 0 && local_index < m_data.size());
     105           0 :         return m_data[local_index];
     106             :       }
     107             : 
     108             : 
     109             :     const T& operator[](int a_box_index) const noexcept
     110             :       {
     111             :         int local_index = this->localindex(a_box_index);
     112             :         BL_ASSERT(local_index >= 0 && local_index < m_data.size());
     113             :         return m_data[local_index];
     114             :       }
     115             : 
     116             :     const T* data () const noexcept { return m_data.data(); }
     117             :     T*       data ()       noexcept { return m_data.data(); }
     118             : 
     119             :   private:
     120             :       Vector<T> m_data;
     121             :       bool m_need_to_clear_bd = false;
     122             :   };
     123             : }
     124             : #endif

Generated by: LCOV version 1.14