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 : : }
|