LCOV - code coverage report
Current view: top level - itaps/imesh - MBiMesh.hpp (source / functions) Hit Total Coverage
Test: coverage_sk.info Lines: 38 58 65.5 %
Date: 2020-12-16 07:07:30 Functions: 7 13 53.8 %
Branches: 44 138 31.9 %

           Branch data     Line data    Source code
       1                 :            : #ifndef MBIMESH_HPP
       2                 :            : #define MBIMESH_HPP
       3                 :            : 
       4                 :            : #include "moab/Core.hpp"
       5                 :            : #include <vector>
       6                 :            : #include <algorithm>
       7                 :            : #include <cstring>
       8                 :            : 
       9                 :            : using namespace moab;
      10                 :            : 
      11                 :            : /* map from MOAB's ErrorCode to tstt's */
      12                 :            : extern "C" const iBase_ErrorType iBase_ERROR_MAP[MB_FAILURE + 1];
      13                 :            : 
      14                 :            : class MBiMesh
      15                 :            : {
      16                 :            :   private:
      17                 :            :     bool haveDeletedEntities;
      18                 :            :     bool iCreatedInterface;
      19                 :            :     std::vector< Tag > setHandleTags, entHandleTags;
      20                 :            : 
      21                 :            :   public:
      22                 :            :     MBiMesh( moab::Interface* mbImpl = NULL );
      23                 :            : 
      24                 :            :     virtual ~MBiMesh();
      25                 :            :     bool have_deleted_ents( bool reset )
      26                 :            :     {
      27                 :            :         bool result = haveDeletedEntities;
      28                 :            :         if( reset ) haveDeletedEntities = false;
      29                 :            :         return result;
      30                 :            :     }
      31                 :            : 
      32                 :            :     virtual ErrorCode delete_mesh();
      33                 :            :     virtual ErrorCode delete_entities( const EntityHandle*, const int );
      34                 :            :     virtual ErrorCode delete_entities( const Range& );
      35                 :            :     iBase_AdjacencyCost AdjTable[16];
      36                 :            :     moab::Interface* mbImpl;
      37                 :            :     int lastErrorType;
      38                 :            :     char lastErrorDescription[120];
      39                 :            : 
      40                 :            :     inline void note_set_handle_tag( Tag );
      41                 :            :     inline void note_ent_handle_tag( Tag );
      42                 :            :     inline void note_tag_destroyed( Tag );
      43                 :            :     inline bool is_set_handle_tag( Tag ) const;
      44                 :            :     inline bool is_ent_handle_tag( Tag ) const;
      45                 :            : 
      46                 :            :     inline int set_last_error( int, const char* );
      47                 :            :     inline int set_last_error( ErrorCode, const char* );
      48                 :            : };
      49                 :            : 
      50                 :     188195 : static inline MBiMesh* mbimeshi_instance( iMesh_Instance instance )
      51                 :            : {
      52                 :     188195 :     return reinterpret_cast< MBiMesh* >( instance );
      53                 :            : }
      54                 :            : #define MBIMESHI mbimeshi_instance( instance )
      55                 :            : #define MOABI    MBIMESHI->mbImpl
      56                 :            : 
      57                 :         61 : inline MBiMesh::MBiMesh( Interface* impl )
      58         [ +  - ]:         61 :     : haveDeletedEntities( false ), iCreatedInterface( false ), mbImpl( impl ), lastErrorType( iBase_SUCCESS )
      59                 :            : {
      60                 :         61 :     lastErrorDescription[0] = '\0';
      61                 :            : 
      62                 :            :     iBase_AdjacencyCost tmp_table[] = { iBase_ALL_ORDER_1,     iBase_SOME_ORDER_1,    iBase_SOME_ORDER_1,
      63                 :            :                                         iBase_ALL_ORDER_1,     iBase_ALL_ORDER_1,     iBase_UNAVAILABLE,
      64                 :            :                                         iBase_SOME_ORDER_LOGN, iBase_SOME_ORDER_LOGN, iBase_ALL_ORDER_1,
      65                 :            :                                         iBase_SOME_ORDER_LOGN, iBase_UNAVAILABLE,     iBase_SOME_ORDER_LOGN,
      66                 :            :                                         iBase_ALL_ORDER_1,     iBase_SOME_ORDER_LOGN, iBase_SOME_ORDER_LOGN,
      67                 :         61 :                                         iBase_ALL_ORDER_1 };
      68                 :         61 :     memcpy( AdjTable, tmp_table, 16 * sizeof( iBase_AdjacencyCost ) );
      69                 :            : 
      70         [ +  + ]:         61 :     if( !mbImpl )
      71                 :            :     {
      72 [ +  - ][ +  - ]:         60 :         mbImpl            = new Core();
      73                 :         60 :         iCreatedInterface = true;
      74                 :            :     }
      75                 :         61 : }
      76                 :            : 
      77                 :        183 : inline MBiMesh::~MBiMesh()
      78                 :            : {
      79 [ +  + ][ +  - ]:         61 :     if( iCreatedInterface ) delete mbImpl;
      80         [ -  + ]:        122 : }
      81                 :            : 
      82                 :          0 : inline ErrorCode MBiMesh::delete_mesh()
      83                 :            : {
      84                 :          0 :     haveDeletedEntities = true;
      85                 :          0 :     return mbImpl->delete_mesh();
      86                 :            : }
      87                 :            : 
      88                 :          0 : inline ErrorCode MBiMesh::delete_entities( const EntityHandle* a, const int n )
      89                 :            : {
      90         [ #  # ]:          0 :     if( n > 0 ) haveDeletedEntities = true;
      91                 :          0 :     return mbImpl->delete_entities( a, n );
      92                 :            : }
      93                 :            : 
      94                 :          0 : inline ErrorCode MBiMesh::delete_entities( const Range& r )
      95                 :            : {
      96         [ #  # ]:          0 :     if( !r.empty() ) haveDeletedEntities = true;
      97                 :          0 :     return mbImpl->delete_entities( r );
      98                 :            : }
      99                 :            : 
     100                 :          0 : void MBiMesh::note_set_handle_tag( Tag t )
     101                 :            : {
     102                 :          0 :     std::vector< Tag >::iterator i;
     103         [ #  # ]:          0 :     i = std::lower_bound( entHandleTags.begin(), entHandleTags.end(), t );
     104 [ #  # ][ #  # ]:          0 :     if( i != entHandleTags.end() && *i == t ) entHandleTags.erase( i );
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
     105         [ #  # ]:          0 :     i = std::lower_bound( setHandleTags.begin(), setHandleTags.end(), t );
     106 [ #  # ][ #  # ]:          0 :     if( i == setHandleTags.end() || *i != t ) setHandleTags.insert( i, t );
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
     107                 :          0 : }
     108                 :            : 
     109                 :          9 : void MBiMesh::note_ent_handle_tag( Tag t )
     110                 :            : {
     111                 :          9 :     std::vector< Tag >::iterator i;
     112         [ +  - ]:          9 :     i = std::lower_bound( setHandleTags.begin(), setHandleTags.end(), t );
     113 [ +  - ][ -  + ]:          9 :     if( i != setHandleTags.end() && *i == t ) setHandleTags.erase( i );
         [ #  # ][ #  # ]
         [ +  - ][ -  + ]
         [ #  # ][ #  # ]
     114         [ +  - ]:          9 :     i = std::lower_bound( entHandleTags.begin(), entHandleTags.end(), t );
     115 [ +  - ][ +  + ]:          9 :     if( i == entHandleTags.end() || *i != t ) entHandleTags.insert( i, t );
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ #  # ]
     116                 :          9 : }
     117                 :            : 
     118                 :         12 : void MBiMesh::note_tag_destroyed( Tag t )
     119                 :            : {
     120                 :         12 :     std::vector< Tag >::iterator i;
     121         [ +  - ]:         12 :     i = std::lower_bound( setHandleTags.begin(), setHandleTags.end(), t );
     122 [ +  - ][ -  + ]:         12 :     if( i != setHandleTags.end() && *i == t ) setHandleTags.erase( i );
         [ #  # ][ #  # ]
         [ +  - ][ -  + ]
         [ #  # ][ #  # ]
     123         [ +  - ]:         12 :     i = std::lower_bound( entHandleTags.begin(), entHandleTags.end(), t );
     124 [ +  - ][ +  + ]:         12 :     if( i != entHandleTags.end() && *i == t ) entHandleTags.erase( i );
         [ +  - ][ +  - ]
         [ +  - ][ +  + ]
         [ +  - ][ #  # ]
     125                 :         12 : }
     126                 :            : 
     127                 :          0 : bool MBiMesh::is_set_handle_tag( Tag t ) const
     128                 :            : {
     129                 :          0 :     return std::binary_search( setHandleTags.begin(), setHandleTags.end(), t );
     130                 :            : }
     131                 :            : 
     132                 :          0 : bool MBiMesh::is_ent_handle_tag( Tag t ) const
     133                 :            : {
     134                 :          0 :     return std::binary_search( entHandleTags.begin(), entHandleTags.end(), t );
     135                 :            : }
     136                 :            : 
     137                 :     115971 : int MBiMesh::set_last_error( int code, const char* msg )
     138                 :            : {
     139                 :     115971 :     std::strncpy( lastErrorDescription, msg, sizeof( lastErrorDescription ) );
     140                 :     115971 :     lastErrorDescription[sizeof( lastErrorDescription ) - 1] = '\0';
     141                 :     115971 :     return ( lastErrorType = static_cast< iBase_ErrorType >( code ) );
     142                 :            : }
     143                 :            : 
     144                 :         18 : int MBiMesh::set_last_error( ErrorCode code, const char* msg )
     145                 :            : {
     146         [ +  - ]:         18 :     std::string message( msg );
     147         [ +  - ]:         18 :     message += "  (MOAB Error Code: ";
     148 [ +  - ][ +  - ]:         18 :     message += mbImpl->get_error_string( code );
     149         [ +  - ]:         18 :     message += ")";
     150         [ +  - ]:         18 :     return set_last_error( iBase_ERROR_MAP[code], message.c_str() );
     151                 :            : }
     152                 :            : 
     153                 :            : #endif

Generated by: LCOV version 1.11