LCOV - code coverage report
Current view: top level - src/moab - SetIterator.hpp (source / functions) Hit Total Coverage
Test: coverage_sk.info Lines: 6 8 75.0 %
Date: 2020-12-16 07:07:30 Functions: 3 4 75.0 %
Branches: 1 2 50.0 %

           Branch data     Line data    Source code
       1                 :            : #ifndef MB_SETITERATOR_HPP
       2                 :            : #define MB_SETITERATOR_HPP
       3                 :            : 
       4                 :            : #include "moab/Interface.hpp"
       5                 :            : 
       6                 :            : namespace moab
       7                 :            : {
       8                 :            : 
       9                 :            : class Core;
      10                 :            : 
      11                 :            : /** \class Meshset iterator
      12                 :            :  * \brief A class to iterator over MOAB Meshsets
      13                 :            :  */
      14                 :            : class SetIterator
      15                 :            : {
      16                 :            :   public:
      17                 :            :     friend class Core;
      18                 :            : 
      19                 :            :     //! destructor
      20                 :            :     virtual ~SetIterator();
      21                 :            : 
      22                 :            :     //! get the ent set for this iterator
      23                 :          0 :     inline EntityHandle ent_set() const
      24                 :            :     {
      25                 :          0 :         return entSet;
      26                 :            :     };
      27                 :            : 
      28                 :            :     //! get the chunk size of this iterator
      29                 :            :     inline unsigned int chunk_size() const
      30                 :            :     {
      31                 :            :         return chunkSize;
      32                 :            :     };
      33                 :            : 
      34                 :            :     //! get the entity type for this iterator
      35                 :            :     inline EntityType ent_type() const
      36                 :            :     {
      37                 :            :         return entType;
      38                 :            :     };
      39                 :            : 
      40                 :            :     //! get the dimension for this iterator
      41                 :            :     inline int ent_dimension() const
      42                 :            :     {
      43                 :            :         return entDimension;
      44                 :            :     };
      45                 :            : 
      46                 :            :     /** \brief get the next chunkSize entities
      47                 :            :      * Return the next chunkSize entities.
      48                 :            :      * \param arr Array of entities returned.
      49                 :            :      * \param atend Returns true if iterator is at the end of iterable values, otherwise false
      50                 :            :      */
      51                 :            :     virtual ErrorCode get_next_arr( std::vector< EntityHandle >& arr, bool& atend ) = 0;
      52                 :            : 
      53                 :            :     //! reset the iterator to the beginning of the set
      54                 :            :     virtual ErrorCode reset() = 0;
      55                 :            : 
      56                 :            :   protected:
      57                 :            :     /** \brief Constructor
      58                 :            :      * \param core MOAB Core instance
      59                 :            :      * \param ent_set EntitySet to which this iterator corresponds
      60                 :            :      * \param chunk_size Chunk size of this iterator
      61                 :            :      * \param ent_type Entity type for this iterator
      62                 :            :      * \param ent_dim Entity dimension for this iterator
      63                 :            :      */
      64                 :         48 :     inline SetIterator( Core* core, EntityHandle eset, unsigned int chunk_sz, EntityType ent_tp, int ent_dim,
      65                 :            :                         bool check_valid = false )
      66                 :            :         : myCore( core ), entSet( eset ), chunkSize( chunk_sz ), entType( ent_tp ), entDimension( ent_dim ),
      67                 :         48 :           checkValid( check_valid ){};
      68                 :            : 
      69                 :            :     //! Core instance
      70                 :            :     Core* myCore;
      71                 :            : 
      72                 :            :     //! handle for entity set corresponding to this iterator
      73                 :            :     EntityHandle entSet;
      74                 :            : 
      75                 :            :     //! chunk size of this iterator
      76                 :            :     unsigned int chunkSize;
      77                 :            : 
      78                 :            :     //! entity type this iterator iterates over
      79                 :            :     EntityType entType;
      80                 :            : 
      81                 :            :     //! dimension this iterator iterates over
      82                 :            :     int entDimension;
      83                 :            : 
      84                 :            :     //! check for entity validity before returning handles
      85                 :            :     bool checkValid;
      86                 :            : };
      87                 :            : 
      88                 :            : /** \class Set-type set iterator
      89                 :            :  * \brief A class to iterator over MOAB set-type meshsets
      90                 :            :  */
      91                 :            : class RangeSetIterator : public SetIterator
      92                 :            : {
      93                 :            :   public:
      94                 :            :     friend class Core;
      95                 :            : 
      96                 :            :     /** \brief Destructor
      97                 :            :      */
      98                 :            :     virtual ~RangeSetIterator();
      99                 :            : 
     100                 :            :     /** \brief get the next chunkSize entities
     101                 :            :      * Return the next chunkSize entities.
     102                 :            :      * \param arr Array of entities returned.
     103                 :            :      * \param atend Returns true if iterator is at the end of iterable values, otherwise false
     104                 :            :      */
     105                 :            :     virtual ErrorCode get_next_arr( std::vector< EntityHandle >& arr, bool& atend );
     106                 :            : 
     107                 :            :     //! reset the iterator to the beginning of the set
     108                 :            :     virtual ErrorCode reset();
     109                 :            : 
     110                 :            :   protected:
     111                 :            :     /** \brief Constructor
     112                 :            :      * \param core MOAB Core instance
     113                 :            :      * \param ent_set EntitySet to which this iterator corresponds
     114                 :            :      * \param chunk_size Chunk size of this iterator
     115                 :            :      * \param ent_type Entity type for this iterator
     116                 :            :      * \param ent_dim Entity dimension for this iterator
     117                 :            :      */
     118                 :            :     RangeSetIterator( Core* core, EntityHandle ent_set, int chunk_size, EntityType ent_type, int ent_dimension,
     119                 :            :                       bool check_valid = false );
     120                 :            : 
     121                 :            :   private:
     122                 :            :     ErrorCode get_next_by_type( const EntityHandle*& ptr, int count, std::vector< EntityHandle >& arr, bool& atend );
     123                 :            : 
     124                 :            :     ErrorCode get_next_by_dimension( const EntityHandle*& ptr, int count, std::vector< EntityHandle >& arr,
     125                 :            :                                      bool& atend );
     126                 :            : 
     127                 :            :     //! Build the special pair vector for the root set
     128                 :            :     ErrorCode build_pair_vec();
     129                 :            : 
     130                 :            :     //! Current iterator position, 0 if at beginning
     131                 :            :     EntityHandle iterPos;
     132                 :            : 
     133                 :            :     //! Special range pair ptr for root set
     134                 :            :     EntityHandle* pairPtr;
     135                 :            : 
     136                 :            :     //! Number of range pairs
     137                 :            :     int numPairs;
     138                 :            : };
     139                 :            : 
     140                 :            : /** \class List-type set iterator
     141                 :            :  * \brief A class to iterator over MOAB list-type meshsets
     142                 :            :  */
     143         [ -  + ]:         96 : class VectorSetIterator : public SetIterator
     144                 :            : {
     145                 :            :   public:
     146                 :            :     friend class Core;
     147                 :            : 
     148                 :            :     /** \brief get the next chunkSize entities
     149                 :            :      * Return the next chunkSize entities.
     150                 :            :      * \param arr Array of entities returned.
     151                 :            :      * \param atend Returns true if iterator is at the end of iterable values, otherwise false
     152                 :            :      */
     153                 :            :     virtual ErrorCode get_next_arr( std::vector< EntityHandle >& arr, bool& atend );
     154                 :            : 
     155                 :            :     //! reset the iterator to the beginning of the set
     156                 :            :     virtual ErrorCode reset();
     157                 :            : 
     158                 :            :     //! decrement the position by the specified number; returns MB_FAILURE if resulting index is < 0
     159                 :            :     inline ErrorCode decrement( int num );
     160                 :            : 
     161                 :            :   protected:
     162                 :            :     /** \brief Constructor
     163                 :            :      * \param core MOAB Core instance
     164                 :            :      * \param ent_set EntitySet to which this iterator corresponds
     165                 :            :      * \param chunk_size Chunk size of this iterator
     166                 :            :      * \param ent_type Entity type for this iterator
     167                 :            :      * \param ent_dim Entity dimension for this iterator
     168                 :            :      */
     169                 :         24 :     inline VectorSetIterator( Core* core, EntityHandle eset, int chunk_sz, EntityType ent_tp, int ent_dim,
     170                 :            :                               bool check_valid = false )
     171                 :         24 :         : SetIterator( core, eset, chunk_sz, ent_tp, ent_dim, check_valid ), iterPos( 0 )
     172                 :            :     {
     173                 :         24 :     }
     174                 :            : 
     175                 :            :   private:
     176                 :            :     //! Current iterator position, 0 if at beginning
     177                 :            :     int iterPos;
     178                 :            : };
     179                 :            : 
     180                 :            : inline ErrorCode VectorSetIterator::decrement( int num )
     181                 :            : {
     182                 :            :     iterPos -= num;
     183                 :            :     return ( iterPos < 0 ? MB_FAILURE : MB_SUCCESS );
     184                 :            : }
     185                 :            : 
     186                 :            : }  // namespace moab
     187                 :            : 
     188                 :            : #endif

Generated by: LCOV version 1.11