LCOV - code coverage report
Current view: top level - itaps/irel - MeshAssocPairSide.cpp (source / functions) Hit Total Coverage
Test: coverage_sk.info Lines: 96 124 77.4 %
Date: 2020-12-16 07:07:30 Functions: 17 23 73.9 %
Branches: 66 226 29.2 %

           Branch data     Line data    Source code
       1                 :            : #include "MeshAssocPairSide.hpp"
       2                 :            : 
       3                 :            : #include <cstring>
       4                 :            : #include <sstream>
       5                 :            : #include <string>
       6                 :            : 
       7                 :            : #include <iMesh_extensions.h>
       8                 :            : 
       9                 :            : #include "Lasso.hpp"
      10                 :            : #include "iRel_Lasso.hpp"
      11                 :            : 
      12                 :            : #define PROCESS_ERROR                                           \
      13                 :            :     do                                                          \
      14                 :            :     {                                                           \
      15                 :            :         if( iBase_SUCCESS != result )                           \
      16                 :            :         {                                                       \
      17                 :            :             char this_descr[120];                               \
      18                 :            :             iMesh_getDescription( instance_, this_descr, 120 ); \
      19                 :            :             ERRORR( result, this_descr );                       \
      20                 :            :         }                                                       \
      21                 :            :     } while( false )
      22                 :            : 
      23                 :            : // Redefine LASSOI
      24                 :            : #undef LASSOI
      25                 :            : #define LASSOI lasso_instance( relation )
      26                 :            : 
      27                 :            : static const char* GLOBAL_ID_TAG_NAME      = "GLOBAL_ID";
      28                 :            : static const char* MESH_DIMENSION_TAG_NAME = "GEOM_DIMENSION";
      29                 :            : static const char* RELATION_TAG_NAME       = "__MESH_ASSOCIATION";
      30                 :            : 
      31                 :          8 : MeshAssocPairSide::MeshAssocPairSide( iRel_Instance p_relation, iBase_Instance p_instance, int p_id )
      32                 :          8 :     : relation( p_relation ), instance_( reinterpret_cast< iMesh_Instance >( p_instance ) ), id( p_id )
      33                 :            : {
      34                 :            :     int result;
      35                 :            : 
      36         [ +  - ]:          8 :     create_relation_side();
      37                 :            : 
      38         [ +  - ]:          8 :     iMesh_getTagHandle( instance_, GLOBAL_ID_TAG_NAME, &gid_tag, &result, strlen( GLOBAL_ID_TAG_NAME ) );
      39         [ -  + ]:          8 :     if( result == iBase_TAG_NOT_FOUND )
      40                 :            :     {
      41                 :            :         iMesh_createTag( instance_, GLOBAL_ID_TAG_NAME, 1, iBase_INTEGER, &gid_tag, &result,
      42         [ #  # ]:          0 :                          strlen( GLOBAL_ID_TAG_NAME ) );
      43                 :            :     }
      44                 :            : 
      45         [ +  - ]:          8 :     iMesh_getTagHandle( instance_, MESH_DIMENSION_TAG_NAME, &dim_tag, &result, strlen( MESH_DIMENSION_TAG_NAME ) );
      46         [ -  + ]:          8 :     if( result == iBase_TAG_NOT_FOUND ) dim_tag = NULL;
      47                 :          8 : }
      48                 :            : 
      49                 :         24 : MeshAssocPairSide::~MeshAssocPairSide()
      50                 :            : {
      51                 :          8 :     destroy_relation_side();
      52         [ -  + ]:         16 : }
      53                 :            : 
      54                 :          6 : iBase_Instance MeshAssocPairSide::instance() const
      55                 :            : {
      56                 :          6 :     return instance_;
      57                 :            : }
      58                 :            : 
      59                 :          3 : iRel_IfaceType MeshAssocPairSide::type() const
      60                 :            : {
      61                 :          3 :     return iRel_IMESH_IFACE;
      62                 :            : }
      63                 :            : 
      64                 :          8 : int MeshAssocPairSide::create_relation_side()
      65                 :            : {
      66                 :            :     int result;
      67 [ +  - ][ +  - ]:          8 :     std::stringstream ss;
      68 [ +  - ][ +  - ]:          8 :     ss << RELATION_TAG_NAME << id;
      69         [ +  - ]:         16 :     std::string rel_tag_name( ss.str() );
      70                 :            : 
      71         [ +  - ]:          8 :     iMesh_getTagHandle( instance_, rel_tag_name.c_str(), &relation_tag, &result, rel_tag_name.size() );
      72         [ +  - ]:          8 :     if( result == iBase_TAG_NOT_FOUND )
      73                 :            :     {
      74                 :            :         iMesh_createTag( instance_, rel_tag_name.c_str(), 1, iBase_ENTITY_HANDLE, &relation_tag, &result,
      75         [ +  - ]:          8 :                          rel_tag_name.size() );
      76                 :            :     }
      77                 :            : 
      78 [ -  + ][ #  # ]:          8 :     PROCESS_ERROR;
                 [ #  # ]
      79         [ +  - ]:         16 :     RETURNR( iBase_SUCCESS );
      80                 :            : }
      81                 :            : 
      82                 :          8 : int MeshAssocPairSide::destroy_relation_side()
      83                 :            : {
      84         [ +  - ]:          8 :     if( relation_tag )
      85                 :            :     {
      86                 :            :         int result;
      87                 :            : 
      88         [ +  - ]:          8 :         iMesh_destroyTag( instance_, relation_tag, true, &result );
      89                 :          8 :         relation_tag = NULL;
      90                 :            : 
      91 [ -  + ][ #  # ]:          8 :         PROCESS_ERROR;
                 [ #  # ]
      92                 :            :     }
      93                 :          8 :     RETURNR( iBase_SUCCESS );
      94                 :            : }
      95                 :            : 
      96                 :          0 : int MeshAssocPairSide::get_all_entities( int dimension, iBase_EntityHandle** entities, int* entities_alloc,
      97                 :            :                                          int* entities_size )
      98                 :            : {
      99         [ #  # ]:          0 :     int this_type = ( dimension == -1 ? iBase_ALL_TYPES : dimension );
     100                 :            :     int result;
     101                 :            : 
     102                 :            :     iMesh_getEntities( instance_, 0, this_type, iMesh_ALL_TOPOLOGIES, entities, entities_alloc, entities_size,
     103         [ #  # ]:          0 :                        &result );
     104 [ #  # ][ #  # ]:          0 :     PROCESS_ERROR;
                 [ #  # ]
     105         [ #  # ]:          0 :     RETURNR( iBase_SUCCESS );
     106                 :            : }
     107                 :            : 
     108                 :          6 : int MeshAssocPairSide::get_all_sets( iBase_EntitySetHandle** sets, int* sets_alloc, int* sets_size )
     109                 :            : {
     110                 :            :     int result;
     111                 :            : 
     112         [ +  - ]:          6 :     iMesh_getEntSets( instance_, 0, 0, sets, sets_alloc, sets_size, &result );
     113 [ -  + ][ #  # ]:          6 :     PROCESS_ERROR;
                 [ #  # ]
     114         [ +  - ]:          6 :     RETURNR( iBase_SUCCESS );
     115                 :            : }
     116                 :            : 
     117                 :          4 : int MeshAssocPairSide::get_entities( int dimension, iBase_EntitySetHandle set_handle, iBase_EntityHandle** entities,
     118                 :            :                                      int* entities_alloc, int* entities_size )
     119                 :            : {
     120         [ -  + ]:          4 :     int this_type = ( dimension == -1 ? iBase_ALL_TYPES : dimension );
     121                 :            :     int result;
     122                 :            : 
     123                 :            :     iMesh_getEntities( instance_, set_handle, this_type, iMesh_ALL_TOPOLOGIES, entities, entities_alloc, entities_size,
     124         [ +  - ]:          4 :                        &result );
     125 [ -  + ][ #  # ]:          4 :     PROCESS_ERROR;
                 [ #  # ]
     126         [ +  - ]:          4 :     RETURNR( iBase_SUCCESS );
     127                 :            : }
     128                 :            : 
     129                 :          0 : int MeshAssocPairSide::get_ents_dims( iBase_EntityHandle* entities, int entities_size, int** ent_types,
     130                 :            :                                       int* ent_types_alloc, int* ent_types_size )
     131                 :            : {
     132                 :            :     int result;
     133                 :            : 
     134         [ #  # ]:          0 :     iMesh_getEntArrType( instance_, entities, entities_size, ent_types, ent_types_alloc, ent_types_size, &result );
     135 [ #  # ][ #  # ]:          0 :     PROCESS_ERROR;
                 [ #  # ]
     136         [ #  # ]:          0 :     RETURNR( iBase_SUCCESS );
     137                 :            : }
     138                 :            : 
     139                 :          0 : int MeshAssocPairSide::get_related_ents( iBase_EntityHandle** entities, int* entities_alloc, int* entities_size )
     140                 :            : {
     141                 :            :     int result;
     142                 :            :     iMesh_getEntsByTagsRec( instance_, 0, iBase_ALL_TYPES, iMesh_ALL_TOPOLOGIES, &relation_tag, NULL, 1, false,
     143         [ #  # ]:          0 :                             entities, entities_alloc, entities_size, &result );
     144 [ #  # ][ #  # ]:          0 :     PROCESS_ERROR;
                 [ #  # ]
     145         [ #  # ]:          0 :     RETURNR( iBase_SUCCESS );
     146                 :            : }
     147                 :            : 
     148                 :          4 : int MeshAssocPairSide::get_related_sets( iBase_EntitySetHandle** sets, int* sets_alloc, int* sets_size )
     149                 :            : {
     150                 :            :     int result;
     151         [ +  - ]:          4 :     iMesh_getEntSetsByTagsRec( instance_, 0, &relation_tag, NULL, 1, false, sets, sets_alloc, sets_size, &result );
     152 [ -  + ][ #  # ]:          4 :     PROCESS_ERROR;
                 [ #  # ]
     153         [ +  - ]:          4 :     RETURNR( iBase_SUCCESS );
     154                 :            : }
     155                 :            : 
     156                 :          6 : int MeshAssocPairSide::get_relation_side( iBase_EntityHandle* entities, int num_entities, void* values )
     157                 :            : {
     158                 :          6 :     int values_alloc = num_entities * sizeof( iBase_EntityHandle );
     159                 :            :     int values_size;
     160                 :            :     int result;
     161                 :            : 
     162         [ +  - ]:          6 :     iMesh_getArrData( instance_, entities, num_entities, relation_tag, &values, &values_alloc, &values_size, &result );
     163 [ +  + ][ +  - ]:          6 :     PROCESS_ERROR;
                 [ +  - ]
     164         [ +  - ]:          6 :     RETURNR( iBase_SUCCESS );
     165                 :            : }
     166                 :            : 
     167                 :          9 : int MeshAssocPairSide::get_relation_side( iBase_EntitySetHandle* sets, int num_sets, void* values )
     168                 :            : {
     169                 :          9 :     char* data       = static_cast< char* >( values );
     170                 :          9 :     int values_alloc = sizeof( iBase_EntityHandle );
     171                 :            :     int values_size;
     172                 :            :     int result;
     173                 :            : 
     174         [ +  + ]:         98 :     for( int i = 0; i < num_sets; i++ )
     175                 :            :     {
     176                 :         89 :         iMesh_getEntSetData( instance_, sets[i], relation_tag, reinterpret_cast< void** >( &data ), &values_alloc,
     177         [ +  - ]:         89 :                              &values_size, &result );
     178                 :         89 :         data += values_size;
     179 [ -  + ][ #  # ]:         89 :         PROCESS_ERROR;
                 [ #  # ]
     180                 :            :     }
     181         [ +  - ]:          9 :     RETURNR( iBase_SUCCESS );
     182                 :            : }
     183                 :            : 
     184                 :         12 : int MeshAssocPairSide::set_relation_side( iBase_EntityHandle* entities, int num_entities, const void* values )
     185                 :            : {
     186                 :            :     int result;
     187                 :            : 
     188                 :            :     iMesh_setArrData( instance_, entities, num_entities, relation_tag, static_cast< const char* >( values ),
     189         [ +  - ]:         12 :                       num_entities * sizeof( iBase_EntityHandle ), &result );
     190 [ -  + ][ #  # ]:         12 :     PROCESS_ERROR;
                 [ #  # ]
     191         [ +  - ]:         12 :     RETURNR( iBase_SUCCESS );
     192                 :            : }
     193                 :            : 
     194                 :        124 : int MeshAssocPairSide::set_relation_side( iBase_EntitySetHandle* sets, int num_sets, const void* values )
     195                 :            : {
     196                 :        124 :     const char* data = static_cast< const char* >( values );
     197                 :        124 :     int size         = sizeof( iBase_EntityHandle );
     198                 :            :     int result;
     199                 :            : 
     200         [ +  + ]:        248 :     for( int i = 0; i < num_sets; i++ )
     201                 :            :     {
     202         [ +  - ]:        124 :         iMesh_setEntSetData( instance_, sets[i], relation_tag, data, size, &result );
     203                 :        124 :         data += size;
     204 [ -  + ][ #  # ]:        124 :         PROCESS_ERROR;
                 [ #  # ]
     205                 :            :     }
     206         [ +  - ]:        124 :     RETURNR( iBase_SUCCESS );
     207                 :            : }
     208                 :            : 
     209                 :          1 : int MeshAssocPairSide::rmv_relation_side( iBase_EntityHandle* entities, int num_entities )
     210                 :            : {
     211                 :            :     int result;
     212                 :            : 
     213         [ +  - ]:          1 :     iMesh_rmvArrTag( instance_, entities, num_entities, relation_tag, &result );
     214 [ -  + ][ #  # ]:          1 :     PROCESS_ERROR;
                 [ #  # ]
     215         [ +  - ]:          1 :     RETURNR( iBase_SUCCESS );
     216                 :            : }
     217                 :            : 
     218                 :          3 : int MeshAssocPairSide::rmv_relation_side( iBase_EntitySetHandle* sets, int num_sets )
     219                 :            : {
     220                 :            :     int result;
     221                 :            : 
     222         [ +  + ]:         45 :     for( int i = 0; i < num_sets; i++ )
     223                 :            :     {
     224         [ +  - ]:         42 :         iMesh_rmvEntSetTag( instance_, sets[i], relation_tag, &result );
     225 [ -  + ][ #  # ]:         42 :         PROCESS_ERROR;
                 [ #  # ]
     226                 :            :     }
     227                 :            : 
     228         [ +  - ]:          3 :     RETURNR( iBase_SUCCESS );
     229                 :            : }
     230                 :            : 
     231                 :          0 : int MeshAssocPairSide::get_iterator( iBase_EntitySetHandle set, iBase_EntityIterator* iter )
     232                 :            : {
     233                 :            :     int result;
     234                 :          0 :     int resilient = 0;
     235         [ #  # ]:          0 :     iMesh_initEntIter( instance_, set, iBase_ALL_TYPES, iMesh_ALL_TOPOLOGIES, resilient, iter, &result );
     236         [ #  # ]:          0 :     RETURNR( iBase_SUCCESS );
     237                 :            : }
     238                 :            : 
     239                 :          0 : int MeshAssocPairSide::get_gids( iBase_EntityHandle* entities, int num_entities, int* values )
     240                 :            : {
     241                 :          0 :     int values_alloc = num_entities * sizeof( int );
     242                 :            :     int values_size;
     243                 :            :     int result;
     244                 :            : 
     245         [ #  # ]:          0 :     iMesh_getArrData( instance_, entities, num_entities, gid_tag, &values, &values_alloc, &values_size, &result );
     246 [ #  # ][ #  # ]:          0 :     PROCESS_ERROR;
                 [ #  # ]
     247         [ #  # ]:          0 :     RETURNR( iBase_SUCCESS );
     248                 :            : }
     249                 :            : 
     250                 :          9 : int MeshAssocPairSide::get_gids( iBase_EntitySetHandle* sets, int num_sets, int* values )
     251                 :            : {
     252                 :          9 :     char* data       = reinterpret_cast< char* >( values );
     253                 :          9 :     int values_alloc = sizeof( int );
     254                 :            :     int values_size;
     255                 :            :     int result;
     256                 :            : 
     257         [ +  + ]:        112 :     for( int i = 0; i < num_sets; i++ )
     258                 :            :     {
     259                 :        103 :         iMesh_getEntSetData( instance_, sets[i], gid_tag, reinterpret_cast< void** >( &data ), &values_alloc,
     260         [ +  - ]:        103 :                              &values_size, &result );
     261                 :        103 :         data += values_size;
     262 [ -  + ][ #  # ]:        103 :         PROCESS_ERROR;
                 [ #  # ]
     263                 :            :     }
     264         [ +  - ]:          9 :     RETURNR( iBase_SUCCESS );
     265                 :            : }
     266                 :            : 
     267                 :          0 : int MeshAssocPairSide::get_dims( iBase_EntityHandle* entities, int num_entities, int* values )
     268                 :            : {
     269                 :          0 :     int values_alloc = num_entities * sizeof( int );
     270                 :            :     int values_size;
     271                 :            :     int result;
     272                 :            : 
     273         [ #  # ]:          0 :     iMesh_getArrData( instance_, entities, num_entities, dim_tag, &values, &values_alloc, &values_size, &result );
     274 [ #  # ][ #  # ]:          0 :     PROCESS_ERROR;
                 [ #  # ]
     275         [ #  # ]:          0 :     RETURNR( iBase_SUCCESS );
     276                 :            : }
     277                 :            : 
     278                 :          9 : int MeshAssocPairSide::get_dims( iBase_EntitySetHandle* sets, int num_sets, int* values )
     279                 :            : {
     280                 :          9 :     char* data       = reinterpret_cast< char* >( values );
     281                 :          9 :     int values_alloc = sizeof( int );
     282                 :            :     int values_size;
     283                 :            :     int result;
     284                 :            : 
     285         [ +  + ]:        112 :     for( int i = 0; i < num_sets; i++ )
     286                 :            :     {
     287                 :        103 :         iMesh_getEntSetData( instance_, sets[i], dim_tag, reinterpret_cast< void** >( &data ), &values_alloc,
     288         [ +  - ]:        103 :                              &values_size, &result );
     289                 :        103 :         data += values_size;
     290 [ -  + ][ #  # ]:        103 :         PROCESS_ERROR;
                 [ #  # ]
     291                 :            :     }
     292         [ +  - ]:          9 :     RETURNR( iBase_SUCCESS );
     293                 :            : }

Generated by: LCOV version 1.11