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