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 do { \
11 : : if (iBase_SUCCESS != result) { \
12 : : char this_descr[120]; \
13 : : FBiGeom_getDescription(instance_, this_descr, 120); \
14 : : ERRORR(result, this_descr); \
15 : : } \
16 : : } while(false)
17 : :
18 : : // Redefine LASSOI
19 : : #undef LASSOI
20 : : #define LASSOI lasso_instance(relation)
21 : :
22 : : static const char *GLOBAL_ID_TAG_NAME = "GLOBAL_ID";
23 : : static const char *RELATION_TAG_NAME = "__FBGEOM_ASSOCIATION";
24 : :
25 : 1 : FBGeomAssocPairSide::FBGeomAssocPairSide(iRel_Instance relation,
26 : : iBase_Instance instance, int id) :
27 : : relation(relation),
28 : : instance_(reinterpret_cast<FBiGeom_Instance>(instance)),
29 : 1 : id(id)
30 : : {
31 : : int result;
32 : :
33 [ + - ]: 1 : create_relation_side();
34 : :
35 : : FBiGeom_getTagHandle(instance_, GLOBAL_ID_TAG_NAME, &gid_tag, &result,
36 [ + - ]: 1 : strlen(GLOBAL_ID_TAG_NAME));
37 [ - + ]: 1 : if (result == iBase_TAG_NOT_FOUND) {
38 : : FBiGeom_createTag(instance_, GLOBAL_ID_TAG_NAME, 1, iBase_INTEGER,
39 [ # # ]: 0 : &gid_tag, &result, strlen(GLOBAL_ID_TAG_NAME));
40 : : }
41 : 1 : }
42 : :
43 : 1 : 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 [ + - ]: 1 : std::string rel_tag_name(ss.str());
64 : :
65 : : FBiGeom_getTagHandle(instance_, rel_tag_name.c_str(), &relation_tag, &result,
66 [ + - ][ + - ]: 1 : rel_tag_name.size());
[ + - ]
67 [ + - ]: 1 : if (result == iBase_TAG_NOT_FOUND) {
68 : : FBiGeom_createTag(instance_, rel_tag_name.c_str(), 1, iBase_ENTITY_HANDLE,
69 [ + - ][ + - ]: 1 : &relation_tag, &result, rel_tag_name.size());
[ + - ]
70 : : }
71 : :
72 [ - + ][ # # ]: 1 : PROCESS_ERROR;
[ # # ]
73 [ + - ][ + - ]: 1 : RETURNR(iBase_SUCCESS);
74 : : }
75 : :
76 : 1 : int FBGeomAssocPairSide::destroy_relation_side()
77 : : {
78 [ + - ]: 1 : if (relation_tag) {
79 : : int result;
80 : :
81 : 1 : FBiGeom_destroyTag(instance_, relation_tag, true, &result);
82 : 1 : relation_tag = NULL;
83 : :
84 [ - + ]: 1 : PROCESS_ERROR;
85 : : }
86 : 1 : RETURNR(iBase_SUCCESS);
87 : : }
88 : :
89 : 2 : int FBGeomAssocPairSide::get_all_entities(int dimension,
90 : : iBase_EntityHandle **entities,
91 : : int *entities_alloc,
92 : : int *entities_size)
93 : : {
94 [ - + ]: 2 : int this_type = (dimension == -1 ? iBase_ALL_TYPES : dimension);
95 : : int result;
96 : :
97 : : FBiGeom_getEntities(instance_, 0, this_type, entities, entities_alloc,
98 : 2 : entities_size, &result);
99 [ - + ]: 2 : PROCESS_ERROR;
100 : 2 : RETURNR(iBase_SUCCESS);
101 : : }
102 : :
103 : 0 : int FBGeomAssocPairSide::get_all_sets(iBase_EntitySetHandle **sets,
104 : : int *sets_alloc, int *sets_size)
105 : : {
106 : : int result;
107 : :
108 : 0 : FBiGeom_getEntSets(instance_, 0, 0, sets, sets_alloc, sets_size, &result);
109 [ # # ]: 0 : PROCESS_ERROR;
110 : 0 : RETURNR(iBase_SUCCESS);
111 : : }
112 : :
113 : 0 : int FBGeomAssocPairSide::get_entities(int dimension,
114 : : iBase_EntitySetHandle set_handle,
115 : : iBase_EntityHandle **entities,
116 : : int *entities_alloc,
117 : : int *entities_size)
118 : : {
119 [ # # ]: 0 : int this_type = (dimension == -1 ? iBase_ALL_TYPES : dimension);
120 : : int result;
121 : :
122 : : FBiGeom_getEntities(instance_, set_handle, this_type, entities,
123 : 0 : entities_alloc, entities_size, &result);
124 [ # # ]: 0 : PROCESS_ERROR;
125 : 0 : RETURNR(iBase_SUCCESS);
126 : : }
127 : :
128 : 3 : int FBGeomAssocPairSide::get_ents_dims(iBase_EntityHandle *entities,
129 : : int entities_size,
130 : : int **ent_types,
131 : : int *ent_types_alloc,
132 : : int *ent_types_size)
133 : : {
134 : : int result;
135 : :
136 : : FBiGeom_getArrType(instance_, entities, entities_size, ent_types,
137 : 3 : ent_types_alloc, ent_types_size, &result);
138 [ - + ]: 3 : PROCESS_ERROR;
139 : 3 : RETURNR(iBase_SUCCESS);
140 : : }
141 : :
142 : 0 : int FBGeomAssocPairSide::get_related_ents(iBase_EntityHandle **entities,
143 : : int *entities_alloc,
144 : : int *entities_size)
145 : : {
146 : 0 : RETURNR(iBase_FAILURE);
147 : : }
148 : :
149 : 0 : int FBGeomAssocPairSide::get_related_sets(iBase_EntitySetHandle **sets,
150 : : int *sets_alloc, int *sets_size)
151 : : {
152 : 0 : RETURNR(iBase_FAILURE);
153 : : }
154 : :
155 : 4 : int FBGeomAssocPairSide::get_relation_side(iBase_EntityHandle *entities,
156 : : int num_entities, void *values)
157 : : {
158 : 4 : int values_alloc = num_entities * sizeof(iBase_EntityHandle);
159 : : int values_size;
160 : : int result;
161 : :
162 : : FBiGeom_getArrData(instance_, entities, num_entities, relation_tag,
163 : 4 : &values, &values_alloc, &values_size, &result);
164 [ + + ]: 4 : PROCESS_ERROR;
165 : 4 : RETURNR(iBase_SUCCESS);
166 : : }
167 : :
168 : 0 : int FBGeomAssocPairSide::get_relation_side(iBase_EntitySetHandle *sets,
169 : : int num_sets, void *values)
170 : : {
171 : 0 : char *data = static_cast<char*>(values);
172 : 0 : int values_alloc = sizeof(iBase_EntityHandle);
173 : : int values_size;
174 : : int result;
175 : :
176 [ # # ]: 0 : for (int i = 0; i < num_sets; i++) {
177 : 0 : FBiGeom_getEntSetData(instance_, sets[i], relation_tag,
178 : : reinterpret_cast<void**>(&data),
179 : 0 : &values_alloc, &values_size, &result);
180 : 0 : data += values_size;
181 [ # # ]: 0 : PROCESS_ERROR;
182 : : }
183 : 0 : RETURNR(iBase_SUCCESS);
184 : : }
185 : :
186 : 43 : int FBGeomAssocPairSide::set_relation_side(iBase_EntityHandle *entities,
187 : : int num_entities, const void *values)
188 : : {
189 : : int result;
190 : :
191 : : FBiGeom_setArrData(instance_, entities, num_entities, relation_tag,
192 : : static_cast<const char*>(values),
193 : 43 : num_entities*sizeof(iBase_EntityHandle), &result);
194 [ - + ]: 43 : PROCESS_ERROR;
195 : 43 : RETURNR(iBase_SUCCESS);
196 : : }
197 : :
198 : 0 : int FBGeomAssocPairSide::set_relation_side(iBase_EntitySetHandle *sets,
199 : : int num_sets, const void *values)
200 : : {
201 : 0 : const char *data = static_cast<const char*>(values);
202 : 0 : int size = sizeof(iBase_EntityHandle);
203 : : int result;
204 : :
205 [ # # ]: 0 : for (int i = 0; i < num_sets; i++) {
206 : 0 : FBiGeom_setEntSetData(instance_, sets[i], relation_tag, data, size,
207 : 0 : &result);
208 : 0 : data += size;
209 [ # # ]: 0 : PROCESS_ERROR;
210 : : }
211 : 0 : RETURNR(iBase_SUCCESS);
212 : : }
213 : :
214 : 1 : int FBGeomAssocPairSide::rmv_relation_side(iBase_EntityHandle *entities,
215 : : int num_entities)
216 : : {
217 : : int result;
218 : :
219 : 1 : FBiGeom_rmvArrTag(instance_, entities, num_entities, relation_tag, &result);
220 [ - + ]: 1 : PROCESS_ERROR;
221 : 1 : RETURNR(iBase_SUCCESS);
222 : : }
223 : :
224 : 0 : int FBGeomAssocPairSide::rmv_relation_side(iBase_EntitySetHandle *sets,
225 : : int num_sets)
226 : : {
227 : : int result;
228 : :
229 [ # # ]: 0 : for (int i = 0; i < num_sets; i++) {
230 : 0 : FBiGeom_rmvEntSetTag(instance_, sets[i], relation_tag, &result);
231 [ # # ]: 0 : PROCESS_ERROR;
232 : : }
233 : :
234 : 0 : RETURNR(iBase_SUCCESS);
235 : : }
236 : :
237 : 0 : int FBGeomAssocPairSide::get_iterator(iBase_EntitySetHandle set,
238 : : iBase_EntityIterator *iter)
239 : : {
240 : : int result;
241 : 0 : FBiGeom_initEntIter(instance_, set, iBase_ALL_TYPES, iter, &result);
242 : 0 : RETURNR(iBase_SUCCESS);
243 : : }
244 : :
245 : 3 : int FBGeomAssocPairSide::get_gids(iBase_EntityHandle *entities,
246 : : int num_entities, int *values)
247 : : {
248 : 3 : int values_alloc = num_entities * sizeof(int);
249 : : int values_size;
250 : : int result;
251 : :
252 : : FBiGeom_getArrData(instance_, entities, num_entities, gid_tag,
253 : : reinterpret_cast<void**>(&values), &values_alloc,
254 : 3 : &values_size, &result);
255 [ - + ]: 3 : PROCESS_ERROR;
256 : 3 : RETURNR(iBase_SUCCESS);
257 : : }
258 : :
259 : 0 : int FBGeomAssocPairSide::get_gids(iBase_EntitySetHandle *sets, int num_sets,
260 : : int *values)
261 : : {
262 : 0 : char *data = reinterpret_cast<char*>(values);
263 : 0 : int values_alloc = sizeof(int);
264 : : int values_size;
265 : : int result;
266 : :
267 [ # # ]: 0 : for (int i = 0; i < num_sets; i++) {
268 : 0 : FBiGeom_getEntSetData(instance_, sets[i], gid_tag,
269 : : reinterpret_cast<void**>(&data),
270 : 0 : &values_alloc, &values_size, &result);
271 : 0 : data += values_size;
272 [ # # ]: 0 : PROCESS_ERROR;
273 : : }
274 : 0 : RETURNR(iBase_SUCCESS);
275 : : }
276 : :
277 : 0 : int FBGeomAssocPairSide::get_dims(iBase_EntityHandle *entities,
278 : : int num_entities, int *values)
279 : : {
280 : 0 : RETURNR(iBase_FAILURE);
281 : : }
282 : :
283 : 0 : int FBGeomAssocPairSide::get_dims(iBase_EntitySetHandle *sets, int num_sets,
284 : : int *values)
285 : : {
286 : 0 : RETURNR(iBase_FAILURE);
287 : : }
|