Branch data Line data Source code
1 : : #include "FBGeomAssocPairSide.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 : : FBiGeom_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 = "__FBGEOM_ASSOCIATION";
27 : :
28 : 1 : FBGeomAssocPairSide::FBGeomAssocPairSide( iRel_Instance p_relation, iBase_Instance p_instance, int p_id )
29 : 1 : : relation( p_relation ), instance_( reinterpret_cast< FBiGeom_Instance >( p_instance ) ), id( p_id )
30 : : {
31 : : int result;
32 : :
33 [ + - ]: 1 : create_relation_side();
34 : :
35 [ + - ]: 1 : FBiGeom_getTagHandle( instance_, GLOBAL_ID_TAG_NAME, &gid_tag, &result, strlen( GLOBAL_ID_TAG_NAME ) );
36 [ - + ]: 1 : if( result == iBase_TAG_NOT_FOUND )
37 : : {
38 : : FBiGeom_createTag( instance_, GLOBAL_ID_TAG_NAME, 1, iBase_INTEGER, &gid_tag, &result,
39 [ # # ]: 0 : strlen( GLOBAL_ID_TAG_NAME ) );
40 : : }
41 : 1 : }
42 : :
43 : 3 : FBGeomAssocPairSide::~FBGeomAssocPairSide()
44 : : {
45 : 1 : destroy_relation_side();
46 [ - + ]: 2 : }
47 : :
48 : 3 : iBase_Instance FBGeomAssocPairSide::instance() const
49 : : {
50 : 3 : return instance_;
51 : : }
52 : :
53 : 1 : iRel_IfaceType FBGeomAssocPairSide::type() const
54 : : {
55 : 1 : return iRel_FBIGEOM_IFACE;
56 : : }
57 : :
58 : 1 : int FBGeomAssocPairSide::create_relation_side()
59 : : {
60 : : int result;
61 [ + - ][ + - ]: 1 : std::stringstream ss;
62 [ + - ][ + - ]: 1 : ss << RELATION_TAG_NAME << id;
63 [ + - ]: 2 : std::string rel_tag_name( ss.str() );
64 : :
65 [ + - ]: 1 : FBiGeom_getTagHandle( instance_, rel_tag_name.c_str(), &relation_tag, &result, rel_tag_name.size() );
66 [ + - ]: 1 : if( result == iBase_TAG_NOT_FOUND )
67 : : {
68 : : FBiGeom_createTag( instance_, rel_tag_name.c_str(), 1, iBase_ENTITY_HANDLE, &relation_tag, &result,
69 [ + - ]: 1 : rel_tag_name.size() );
70 : : }
71 : :
72 [ - + ][ # # ]: 1 : PROCESS_ERROR;
[ # # ]
73 [ + - ]: 2 : RETURNR( iBase_SUCCESS );
74 : : }
75 : :
76 : 1 : int FBGeomAssocPairSide::destroy_relation_side()
77 : : {
78 [ + - ]: 1 : if( relation_tag )
79 : : {
80 : : int result;
81 : :
82 [ + - ]: 1 : FBiGeom_destroyTag( instance_, relation_tag, true, &result );
83 : 1 : relation_tag = NULL;
84 : :
85 [ - + ][ # # ]: 1 : PROCESS_ERROR;
[ # # ]
86 : : }
87 : 1 : RETURNR( iBase_SUCCESS );
88 : : }
89 : :
90 : 2 : int FBGeomAssocPairSide::get_all_entities( int dimension, iBase_EntityHandle** entities, int* entities_alloc,
91 : : int* entities_size )
92 : : {
93 [ - + ]: 2 : int this_type = ( dimension == -1 ? iBase_ALL_TYPES : dimension );
94 : : int result;
95 : :
96 [ + - ]: 2 : FBiGeom_getEntities( instance_, 0, this_type, entities, entities_alloc, entities_size, &result );
97 [ - + ][ # # ]: 2 : PROCESS_ERROR;
[ # # ]
98 [ + - ]: 2 : RETURNR( iBase_SUCCESS );
99 : : }
100 : :
101 : 0 : int FBGeomAssocPairSide::get_all_sets( iBase_EntitySetHandle** sets, int* sets_alloc, int* sets_size )
102 : : {
103 : : int result;
104 : :
105 [ # # ]: 0 : FBiGeom_getEntSets( instance_, 0, 0, sets, sets_alloc, sets_size, &result );
106 [ # # ][ # # ]: 0 : PROCESS_ERROR;
[ # # ]
107 [ # # ]: 0 : RETURNR( iBase_SUCCESS );
108 : : }
109 : :
110 : 0 : int FBGeomAssocPairSide::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 : FBiGeom_getEntities( instance_, set_handle, this_type, entities, entities_alloc, entities_size, &result );
117 [ # # ][ # # ]: 0 : PROCESS_ERROR;
[ # # ]
118 [ # # ]: 0 : RETURNR( iBase_SUCCESS );
119 : : }
120 : :
121 : 3 : int FBGeomAssocPairSide::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 [ + - ]: 3 : FBiGeom_getArrType( instance_, entities, entities_size, ent_types, ent_types_alloc, ent_types_size, &result );
127 [ - + ][ # # ]: 3 : PROCESS_ERROR;
[ # # ]
128 [ + - ]: 3 : RETURNR( iBase_SUCCESS );
129 : : }
130 : :
131 : 0 : int FBGeomAssocPairSide::get_related_ents( iBase_EntityHandle** /*entities*/, int* /*entities_alloc*/,
132 : : int* /*entities_size*/ )
133 : : {
134 : 0 : RETURNR( iBase_FAILURE );
135 : : }
136 : :
137 : 0 : int FBGeomAssocPairSide::get_related_sets( iBase_EntitySetHandle** /*sets*/, int* /*sets_alloc*/, int* /*sets_size*/ )
138 : : {
139 : 0 : RETURNR( iBase_FAILURE );
140 : : }
141 : :
142 : 4 : int FBGeomAssocPairSide::get_relation_side( iBase_EntityHandle* entities, int num_entities, void* values )
143 : : {
144 : 4 : int values_alloc = num_entities * sizeof( iBase_EntityHandle );
145 : : int values_size;
146 : : int result;
147 : :
148 : : FBiGeom_getArrData( instance_, entities, num_entities, relation_tag, &values, &values_alloc, &values_size,
149 [ + - ]: 4 : &result );
150 [ + + ][ + - ]: 4 : PROCESS_ERROR;
[ + - ]
151 [ + - ]: 4 : RETURNR( iBase_SUCCESS );
152 : : }
153 : :
154 : 0 : int FBGeomAssocPairSide::get_relation_side( iBase_EntitySetHandle* sets, int num_sets, void* values )
155 : : {
156 : 0 : char* data = static_cast< char* >( values );
157 : 0 : int values_alloc = sizeof( iBase_EntityHandle );
158 : : int values_size;
159 : : int result;
160 : :
161 [ # # ]: 0 : for( int i = 0; i < num_sets; i++ )
162 : : {
163 : 0 : FBiGeom_getEntSetData( instance_, sets[i], relation_tag, reinterpret_cast< void** >( &data ), &values_alloc,
164 [ # # ]: 0 : &values_size, &result );
165 : 0 : data += values_size;
166 [ # # ][ # # ]: 0 : PROCESS_ERROR;
[ # # ]
167 : : }
168 [ # # ]: 0 : RETURNR( iBase_SUCCESS );
169 : : }
170 : :
171 : 43 : int FBGeomAssocPairSide::set_relation_side( iBase_EntityHandle* entities, int num_entities, const void* values )
172 : : {
173 : : int result;
174 : :
175 : : FBiGeom_setArrData( instance_, entities, num_entities, relation_tag, static_cast< const char* >( values ),
176 [ + - ]: 43 : num_entities * sizeof( iBase_EntityHandle ), &result );
177 [ - + ][ # # ]: 43 : PROCESS_ERROR;
[ # # ]
178 [ + - ]: 43 : RETURNR( iBase_SUCCESS );
179 : : }
180 : :
181 : 0 : int FBGeomAssocPairSide::set_relation_side( iBase_EntitySetHandle* sets, int num_sets, const void* values )
182 : : {
183 : 0 : const char* data = static_cast< const char* >( values );
184 : 0 : int size = sizeof( iBase_EntityHandle );
185 : : int result;
186 : :
187 [ # # ]: 0 : for( int i = 0; i < num_sets; i++ )
188 : : {
189 [ # # ]: 0 : FBiGeom_setEntSetData( instance_, sets[i], relation_tag, data, size, &result );
190 : 0 : data += size;
191 [ # # ][ # # ]: 0 : PROCESS_ERROR;
[ # # ]
192 : : }
193 [ # # ]: 0 : RETURNR( iBase_SUCCESS );
194 : : }
195 : :
196 : 1 : int FBGeomAssocPairSide::rmv_relation_side( iBase_EntityHandle* entities, int num_entities )
197 : : {
198 : : int result;
199 : :
200 [ + - ]: 1 : FBiGeom_rmvArrTag( instance_, entities, num_entities, relation_tag, &result );
201 [ - + ][ # # ]: 1 : PROCESS_ERROR;
[ # # ]
202 [ + - ]: 1 : RETURNR( iBase_SUCCESS );
203 : : }
204 : :
205 : 0 : int FBGeomAssocPairSide::rmv_relation_side( iBase_EntitySetHandle* sets, int num_sets )
206 : : {
207 : : int result;
208 : :
209 [ # # ]: 0 : for( int i = 0; i < num_sets; i++ )
210 : : {
211 [ # # ]: 0 : FBiGeom_rmvEntSetTag( instance_, sets[i], relation_tag, &result );
212 [ # # ][ # # ]: 0 : PROCESS_ERROR;
[ # # ]
213 : : }
214 : :
215 [ # # ]: 0 : RETURNR( iBase_SUCCESS );
216 : : }
217 : :
218 : 0 : int FBGeomAssocPairSide::get_iterator( iBase_EntitySetHandle set, iBase_EntityIterator* iter )
219 : : {
220 : : int result;
221 [ # # ]: 0 : FBiGeom_initEntIter( instance_, set, iBase_ALL_TYPES, iter, &result );
222 [ # # ]: 0 : RETURNR( iBase_SUCCESS );
223 : : }
224 : :
225 : 3 : int FBGeomAssocPairSide::get_gids( iBase_EntityHandle* entities, int num_entities, int* values )
226 : : {
227 : 3 : int values_alloc = num_entities * sizeof( int );
228 : : int values_size;
229 : : int result;
230 : :
231 : : FBiGeom_getArrData( instance_, entities, num_entities, gid_tag, reinterpret_cast< void** >( &values ),
232 [ + - ]: 3 : &values_alloc, &values_size, &result );
233 [ - + ][ # # ]: 3 : PROCESS_ERROR;
[ # # ]
234 [ + - ]: 3 : RETURNR( iBase_SUCCESS );
235 : : }
236 : :
237 : 0 : int FBGeomAssocPairSide::get_gids( iBase_EntitySetHandle* sets, int num_sets, int* values )
238 : : {
239 : 0 : char* data = reinterpret_cast< char* >( values );
240 : 0 : int values_alloc = sizeof( int );
241 : : int values_size;
242 : : int result;
243 : :
244 [ # # ]: 0 : for( int i = 0; i < num_sets; i++ )
245 : : {
246 : 0 : FBiGeom_getEntSetData( instance_, sets[i], gid_tag, reinterpret_cast< void** >( &data ), &values_alloc,
247 [ # # ]: 0 : &values_size, &result );
248 : 0 : data += values_size;
249 [ # # ][ # # ]: 0 : PROCESS_ERROR;
[ # # ]
250 : : }
251 [ # # ]: 0 : RETURNR( iBase_SUCCESS );
252 : : }
253 : :
254 : 0 : int FBGeomAssocPairSide::get_dims( iBase_EntityHandle* /*entities*/, int /*num_entities*/, int* /*values*/ )
255 : : {
256 : 0 : RETURNR( iBase_FAILURE );
257 : : }
258 : :
259 : 0 : int FBGeomAssocPairSide::get_dims( iBase_EntitySetHandle* /*sets*/, int /*num_sets*/, int* /*values*/ )
260 : : {
261 : 0 : RETURNR( iBase_FAILURE );
262 : : }
|