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 do { \
11 : : if (iBase_SUCCESS != result) { \
12 : : char this_descr[120]; \
13 : : iGeom_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 = "__GEOM_ASSOCIATION";
24 : :
25 : 6 : GeomAssocPairSide::GeomAssocPairSide(iRel_Instance relation,
26 : : iBase_Instance instance, int id) :
27 : : relation(relation),
28 : : instance_(reinterpret_cast<iGeom_Instance>(instance)),
29 : 6 : id(id)
30 : : {
31 : : int result;
32 : :
33 [ + - ]: 6 : create_relation_side();
34 : :
35 : : iGeom_getTagHandle(instance_, GLOBAL_ID_TAG_NAME, &gid_tag, &result,
36 [ + - ]: 6 : strlen(GLOBAL_ID_TAG_NAME));
37 [ - + ]: 6 : if (result == iBase_TAG_NOT_FOUND) {
38 : : iGeom_createTag(instance_, GLOBAL_ID_TAG_NAME, 1, iBase_INTEGER,
39 [ # # ]: 0 : &gid_tag, &result, strlen(GLOBAL_ID_TAG_NAME));
40 : : }
41 : 6 : }
42 : :
43 : 6 : GeomAssocPairSide::~GeomAssocPairSide()
44 : : {
45 [ + - ]: 6 : destroy_relation_side();
46 [ - + ]: 12 : }
47 : :
48 : 3 : iBase_Instance GeomAssocPairSide::instance() const
49 : : {
50 : 3 : return instance_;
51 : : }
52 : :
53 : 1 : iRel_IfaceType GeomAssocPairSide::type() const
54 : : {
55 : 1 : return iRel_IGEOM_IFACE;
56 : : }
57 : :
58 : 8 : int GeomAssocPairSide::create_relation_side()
59 : : {
60 : : int result;
61 : 8 : std::stringstream ss;
62 [ + - ][ + - ]: 8 : ss << RELATION_TAG_NAME << id;
63 [ + - ]: 8 : std::string rel_tag_name(ss.str());
64 : :
65 : : iGeom_getTagHandle(instance_, rel_tag_name.c_str(), &relation_tag, &result,
66 [ + - ][ + - ]: 8 : rel_tag_name.size());
[ + - ]
67 [ + - ]: 8 : if (result == iBase_TAG_NOT_FOUND) {
68 : : iGeom_createTag(instance_, rel_tag_name.c_str(), 1, iBase_ENTITY_HANDLE,
69 [ + - ][ + - ]: 8 : &relation_tag, &result, rel_tag_name.size());
[ + - ]
70 : : }
71 : :
72 [ - + ][ # # ]: 8 : PROCESS_ERROR;
[ # # ]
73 [ + - ][ + - ]: 8 : RETURNR(iBase_SUCCESS);
74 : : }
75 : :
76 : 8 : int GeomAssocPairSide::destroy_relation_side()
77 : : {
78 [ + - ]: 8 : if (relation_tag) {
79 : : int result;
80 : :
81 : 8 : iGeom_destroyTag(instance_, relation_tag, true, &result);
82 : 8 : relation_tag = NULL;
83 : :
84 [ - + ]: 8 : PROCESS_ERROR;
85 : : }
86 : 8 : RETURNR(iBase_SUCCESS);
87 : : }
88 : :
89 : 2 : int GeomAssocPairSide::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 : : iGeom_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 GeomAssocPairSide::get_all_sets(iBase_EntitySetHandle **sets,
104 : : int *sets_alloc, int *sets_size)
105 : : {
106 : : int result;
107 : :
108 : 0 : iGeom_getEntSets(instance_, 0, 0, sets, sets_alloc, sets_size, &result);
109 [ # # ]: 0 : PROCESS_ERROR;
110 : 0 : RETURNR(iBase_SUCCESS);
111 : : }
112 : :
113 : 0 : int GeomAssocPairSide::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 : : iGeom_getEntities(instance_, set_handle, this_type, entities, entities_alloc,
123 : 0 : entities_size, &result);
124 [ # # ]: 0 : PROCESS_ERROR;
125 : 0 : RETURNR(iBase_SUCCESS);
126 : : }
127 : :
128 : 3 : int GeomAssocPairSide::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 : : iGeom_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 GeomAssocPairSide::get_related_ents(iBase_EntityHandle **entities,
143 : : int *entities_alloc, int *entities_size)
144 : : {
145 : 0 : RETURNR(iBase_FAILURE);
146 : : }
147 : :
148 : 0 : int GeomAssocPairSide::get_related_sets(iBase_EntitySetHandle **sets,
149 : : int *sets_alloc, int *sets_size)
150 : : {
151 : 0 : RETURNR(iBase_FAILURE);
152 : : }
153 : :
154 : 4 : int GeomAssocPairSide::get_relation_side(iBase_EntityHandle *entities,
155 : : int num_entities, void *values)
156 : : {
157 : 4 : int values_alloc = num_entities * sizeof(iBase_EntityHandle);
158 : : int values_size;
159 : : int result;
160 : :
161 : : iGeom_getArrData(instance_, entities, num_entities, relation_tag,
162 : 4 : &values, &values_alloc, &values_size, &result);
163 [ + + ]: 4 : PROCESS_ERROR;
164 : 4 : RETURNR(iBase_SUCCESS);
165 : : }
166 : :
167 : 3 : int GeomAssocPairSide::get_relation_side(iBase_EntitySetHandle *sets,
168 : : int num_sets, void *values)
169 : : {
170 : 3 : char *data = static_cast<char*>(values);
171 : 3 : int values_alloc = sizeof(iBase_EntityHandle);
172 : : int values_size;
173 : : int result;
174 : :
175 [ + + ]: 5 : for (int i = 0; i < num_sets; i++) {
176 : 3 : iGeom_getEntSetData(instance_, sets[i], relation_tag,
177 : : reinterpret_cast<void**>(&data),
178 : 3 : &values_alloc, &values_size, &result);
179 : 3 : data += values_size;
180 [ + + ]: 3 : PROCESS_ERROR;
181 : : }
182 : 3 : RETURNR(iBase_SUCCESS);
183 : : }
184 : :
185 : 77 : int GeomAssocPairSide::set_relation_side(iBase_EntityHandle *entities,
186 : : int num_entities, const void *values)
187 : : {
188 : : int result;
189 : :
190 : : iGeom_setArrData(instance_, entities, num_entities, relation_tag,
191 : : static_cast<const char*>(values),
192 : 77 : num_entities*sizeof(iBase_EntityHandle), &result);
193 [ - + ]: 77 : PROCESS_ERROR;
194 : 77 : RETURNR(iBase_SUCCESS);
195 : : }
196 : :
197 : 2 : int GeomAssocPairSide::set_relation_side(iBase_EntitySetHandle *sets,
198 : : int num_sets, const void *values)
199 : : {
200 : 2 : const char *data = static_cast<const char*>(values);
201 : 2 : int size = sizeof(iBase_EntityHandle);
202 : : int result;
203 : :
204 [ + + ]: 4 : for (int i = 0; i < num_sets; i++) {
205 : 2 : iGeom_setEntSetData(instance_, sets[i], relation_tag, data, size, &result);
206 : 2 : data += size;
207 [ - + ]: 2 : PROCESS_ERROR;
208 : : }
209 : 2 : RETURNR(iBase_SUCCESS);
210 : : }
211 : :
212 : 1 : int GeomAssocPairSide::rmv_relation_side(iBase_EntityHandle *entities,
213 : : int num_entities)
214 : : {
215 : : int result;
216 : :
217 : 1 : iGeom_rmvArrTag(instance_, entities, num_entities, relation_tag, &result);
218 [ - + ]: 1 : PROCESS_ERROR;
219 : 1 : RETURNR(iBase_SUCCESS);
220 : : }
221 : :
222 : 0 : int GeomAssocPairSide::rmv_relation_side(iBase_EntitySetHandle *sets,
223 : : int num_sets)
224 : : {
225 : : int result;
226 : :
227 [ # # ]: 0 : for (int i = 0; i < num_sets; i++) {
228 : 0 : iGeom_rmvEntSetTag(instance_, sets[i], relation_tag, &result);
229 [ # # ]: 0 : PROCESS_ERROR;
230 : : }
231 : :
232 : 0 : RETURNR(iBase_SUCCESS);
233 : : }
234 : :
235 : 0 : int GeomAssocPairSide::get_iterator(iBase_EntitySetHandle set,
236 : : iBase_EntityIterator *iter)
237 : : {
238 : : int result;
239 : 0 : iGeom_initEntIter(instance_, set, iBase_ALL_TYPES, iter, &result);
240 : 0 : RETURNR(iBase_SUCCESS);
241 : : }
242 : :
243 : 3 : int GeomAssocPairSide::get_gids(iBase_EntityHandle *entities, int num_entities,
244 : : int *values)
245 : : {
246 : 3 : int values_alloc = num_entities * sizeof(int);
247 : : int values_size;
248 : : int result;
249 : :
250 : : iGeom_getArrData(instance_, entities, num_entities, gid_tag,
251 : : reinterpret_cast<void**>(&values), &values_alloc,
252 : 3 : &values_size, &result);
253 [ - + ]: 3 : PROCESS_ERROR;
254 : 3 : RETURNR(iBase_SUCCESS);
255 : : }
256 : :
257 : 0 : int GeomAssocPairSide::get_gids(iBase_EntitySetHandle *sets, int num_sets,
258 : : int *values)
259 : : {
260 : 0 : char *data = reinterpret_cast<char*>(values);
261 : 0 : int values_alloc = sizeof(int);
262 : : int values_size;
263 : : int result;
264 : :
265 [ # # ]: 0 : for (int i = 0; i < num_sets; i++) {
266 : 0 : iGeom_getEntSetData(instance_, sets[i], gid_tag,
267 : : reinterpret_cast<void**>(&data),
268 : 0 : &values_alloc, &values_size, &result);
269 : 0 : data += values_size;
270 [ # # ]: 0 : PROCESS_ERROR;
271 : : }
272 : 0 : RETURNR(iBase_SUCCESS);
273 : : }
274 : :
275 : 0 : int GeomAssocPairSide::get_dims(iBase_EntityHandle *entities, int num_entities,
276 : : int *values)
277 : : {
278 : 0 : RETURNR(iBase_FAILURE);
279 : : }
280 : :
281 : 0 : int GeomAssocPairSide::get_dims(iBase_EntitySetHandle *sets, int num_sets,
282 : : int *values)
283 : : {
284 : 0 : RETURNR(iBase_FAILURE);
285 : : }
|