LCOV - code coverage report
Current view: top level - src - MeshAssocPairSide.cpp (source / functions) Hit Total Coverage
Test: coverage_sk.info Lines: 96 125 76.8 %
Date: 2015-08-05 10:04:16 Functions: 17 23 73.9 %
Branches: 45 96 46.9 %

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

Generated by: LCOV version 1.11