Branch data Line data Source code
1 : : #ifndef MESHKIT_ITAPS_REL_HPP
2 : : #define MESHKIT_ITAPS_REL_HPP
3 : :
4 : : /** \file iRel.hpp
5 : : */
6 : :
7 : : #include "iRel.h"
8 : : #include <string.h>
9 : : #include <stdlib.h>
10 : : #include <vector>
11 : : #include <limits>
12 : : #include <string>
13 : : #include <algorithm>
14 : : #include "assert.h"
15 : :
16 : : #define IRELI irelInstance->mInstance
17 : :
18 : : typedef void* iBase_Instance;
19 : :
20 : : /** \class iRel
21 : : * \brief C++ interface to ITAPS iRel interface
22 : : *
23 : : * This class is a simple wrapper for the ITAPS %iRel interface. The primary benefit to using this class
24 : : * instead of %iRel directly is that lists of handles are passed as std::vectors instead of pointers to
25 : : * handle arrays. This file includes both declaration and definition of all iRel class functions, i.e.
26 : : * all functions are inlined. The class can be constructed and destructed in the standard C++ way; the
27 : : * implementation of those functions call into the standard %iRel C functions newRel and dtor.
28 : : *
29 : : * For complete documentation of these functions, see the
30 : : * [http://ftp.mcs.anl.gov/pub/fathom/moab-docs/iRel_8h.html iRel header]
31 : : */
32 : : class iRel {
33 : : public:
34 : : typedef iBase_ErrorType Error;
35 : :
36 : : iRel( const char* options = 0 );
37 : : iRel( iRel_Instance instance );
38 : :
39 : : ~iRel();
40 : :
41 : : iRel_Instance instance() { return mInstance; }
42 : :
43 : : enum IfaceType
44 : : {IGEOM_IFACE = 0,
45 : : IMESH_IFACE,
46 : : IFIELD_IFACE,
47 : : IREL_IFACE,
48 : : FBIGEOM_IFACE};
49 : :
50 : :
51 : : enum RelationType
52 : : {ENTITY = 0,
53 : : SET,
54 : : BOTH};
55 : :
56 : : enum RelationStatus
57 : : {ACTIVE = 0,
58 : : INACTIVE,
59 : : NOTEXIST};
60 : :
61 : : inline iRel::IfaceType iface_type() const {
62 : : return iRel::IREL_IFACE;
63 : : }
64 : :
65 : : /** \class PairHandle iRel.hpp "iRel.hpp"
66 : : * \brief Class for storing, querying and modifying relations data.
67 : : *
68 : : * This class encapsulates most of the functions for querying relations in the C++ version of %iRel.
69 : : */
70 : : class PairHandle
71 : : {
72 : : public:
73 : : PairHandle(iRel *instance,
74 : : iBase_Instance iface1 = NULL,
75 : : RelationType rtype1 = ENTITY,
76 : : IfaceType itype1 = IREL_IFACE,
77 : : RelationStatus status1 = ACTIVE,
78 : : iBase_Instance iface2 = NULL,
79 : : RelationType rtype2 = ENTITY,
80 : : IfaceType itype2 = IREL_IFACE,
81 : : RelationStatus status2 = ACTIVE);
82 : :
83 : : PairHandle(iRel *instance, iRel_PairHandle ph);
84 : :
85 : : iRel_PairHandle instance() { return irelPair; }
86 : :
87 : : ~PairHandle();
88 : :
89 : : friend class iRel;
90 : :
91 : : iBase_Instance get_iface(int i);
92 : :
93 : : IfaceType get_iface_type(int i);
94 : : RelationType get_rel_type(int i);
95 : :
96 : : Error changeType (RelationType ent_or_set1,
97 : : RelationType ent_or_set2);
98 : :
99 : : Error setEntEntRelation (
100 : : /*in*/ iBase_EntityHandle ent1,
101 : : /*in*/ iBase_EntityHandle ent2);
102 : : Error setEntSetRelation (
103 : : /*in*/ iBase_EntityHandle ent1,
104 : : /*in*/ iBase_EntitySetHandle entset2);
105 : : Error setSetEntRelation (
106 : : /*in*/ iBase_EntitySetHandle entset1,
107 : : /*in*/ iBase_EntityHandle ent2);
108 : : Error setSetSetRelation (
109 : : /*in*/ iBase_EntitySetHandle entset1,
110 : : /*in*/ iBase_EntitySetHandle entset2);
111 : :
112 : : Error setEntArrEntArrRelation (
113 : : /*in*/ iBase_EntityHandle *ent_array_1,
114 : : /*in*/ int num_ent1,
115 : : /*in*/ iBase_EntityHandle *ent_array_2,
116 : : /*in*/ int num_ent2);
117 : : Error setSetArrEntArrRelation (
118 : : /*in*/ iBase_EntitySetHandle *entset_array_1,
119 : : /*in*/ int num_ent1,
120 : : /*in*/ iBase_EntityHandle *ent_array_2,
121 : : /*in*/ int num_ent2);
122 : : Error setEntArrSetArrRelation (
123 : : /*in*/ iBase_EntityHandle *ent_array_1,
124 : : /*in*/ int num_ent1,
125 : : /*in*/ iBase_EntitySetHandle *entset_array_2,
126 : : /*in*/ int num_ent2);
127 : : Error setSetArrSetArrRelation (
128 : : /*in*/ iBase_EntitySetHandle *entset_array_1,
129 : : /*in*/ int num_ent1,
130 : : /*in*/ iBase_EntitySetHandle *entset_array_2,
131 : : /*in*/ int num_ent2);
132 : :
133 : : Error getEntEntRelation (
134 : : /*in*/ iBase_EntityHandle ent1,
135 : : /*in*/ bool switch_order,
136 : : /*out*/ iBase_EntityHandle &ent2);
137 : : Error getEntSetRelation (
138 : : /*in*/ iBase_EntityHandle ent1,
139 : : /*in*/ bool switch_order,
140 : : /*out*/ iBase_EntitySetHandle &entset2);
141 : : Error getSetEntRelation (
142 : : /*in*/ iBase_EntitySetHandle entset1,
143 : : /*in*/ bool switch_order,
144 : : /*out*/ iBase_EntityHandle &ent2);
145 : : Error getSetSetRelation (
146 : : /*in*/ iBase_EntitySetHandle entset1,
147 : : /*in*/ bool switch_order,
148 : : /*out*/ iBase_EntitySetHandle &entset2);
149 : : Error getEntSetIterRelation (
150 : : /*in*/ iBase_EntityHandle ent1,
151 : : /*in*/ bool switch_order,
152 : : /*out*/ iBase_EntityIterator &entset2);
153 : :
154 : : Error getEntArrEntArrRelation (
155 : : /*in*/ iBase_EntityHandle *ent_array_1,
156 : : /*in*/ int ent_array_1_size,
157 : : /*in*/ bool switch_order,
158 : : /*inout*/ std::vector<iBase_EntityHandle> &ent_array_2);
159 : : Error getEntArrSetArrRelation (
160 : : /*in*/ iBase_EntityHandle *ent_array_1,
161 : : /*in*/ int ent_array_1_size,
162 : : /*in*/ bool switch_order,
163 : : /*inout*/ std::vector<iBase_EntitySetHandle> &entset_array_2);
164 : : Error getSetArrEntArrRelation (
165 : : /*in*/ iBase_EntitySetHandle *entset_array_1,
166 : : /*in*/ int entset_array_1_size,
167 : : /*in*/ bool switch_order,
168 : : /*inout*/ std::vector<iBase_EntityHandle> &ent_array_2);
169 : : Error getSetArrSetArrRelation (
170 : : /*in*/ iBase_EntitySetHandle *entset_array_1,
171 : : /*in*/ int entset_array_1_size,
172 : : /*in*/ bool switch_order,
173 : : /*inout*/ std::vector<iBase_EntitySetHandle> &entset_array_2);
174 : : Error getEntArrSetIterArrRelation (
175 : : /*in*/ iBase_EntityHandle *ent_array_1,
176 : : /*in*/ int ent_array_1_size,
177 : : /*in*/ bool switch_order,
178 : : /*inout*/ std::vector<iBase_EntityIterator> &entiter);
179 : :
180 : : Error inferAllRelations ();
181 : :
182 : : Error inferAllRelationsAndType ();
183 : :
184 : : Error inferEntRelations (
185 : : /*in*/ iBase_EntityHandle entity,
186 : : /*in*/ int iface_no);
187 : : Error inferSetRelations (
188 : : /*in*/ iBase_EntitySetHandle entity_set,
189 : : /*in*/ int iface_no);
190 : :
191 : : Error inferEntArrRelations (
192 : : /*in*/ iBase_EntityHandle *entities,
193 : : /*in*/ int entities_size,
194 : : /*in*/ int iface_no);
195 : : Error inferSetArrRelations (
196 : : /*in*/ iBase_EntitySetHandle *entity_sets,
197 : : /*in*/ int entities_size,
198 : : /*in*/ int iface_no);
199 : :
200 : : private:
201 : : iRel *irelInstance;
202 : : iBase_Instance iFaces[2];
203 : : IfaceType iFaceTypes[2];
204 : : RelationType relTypes[2];
205 : : RelationStatus relStatuses[2];
206 : :
207 : : iRel_PairHandle irelPair;
208 : :
209 : : bool pairOwner;
210 : : };
211 : :
212 : : Error getErrorType();
213 : :
214 : : std::string getDescription();
215 : :
216 : : Error createPair (
217 : : /*in*/ iBase_Instance iface1,
218 : : /*in*/ const RelationType ent_or_set1,
219 : : /*in*/ const IfaceType iface_type1,
220 : : /*in*/ const RelationStatus status1,
221 : : /*in*/ iBase_Instance iface2,
222 : : /*in*/ const RelationType ent_or_set2,
223 : : /*in*/ const IfaceType iface_type2,
224 : : /*in*/ const RelationStatus status2,
225 : : /*out*/ PairHandle *&pair);
226 : :
227 : : template<typename T, typename U>
228 : : Error createPair (
229 : : /*in*/ T &iface1,
230 : : /*in*/ const RelationType ent_or_set1,
231 : : /*in*/ const RelationStatus status1,
232 : : /*in*/ U &iface2,
233 : : /*in*/ const RelationType ent_or_set2,
234 : : /*in*/ const RelationStatus status2,
235 : : /*out*/ PairHandle *&pair);
236 : :
237 : : Error findPairs (
238 : : /*in*/ iBase_Instance iface,
239 : : /*inout*/ std::vector<PairHandle *> &pairs);
240 : :
241 : : protected:
242 : :
243 : : Error add_pair(PairHandle *pair);
244 : :
245 : : Error remove_pair(PairHandle *pair);
246 : :
247 : : private:
248 : : iRel_Instance mInstance;
249 : :
250 : : bool iRelInstanceOwner;
251 : :
252 : : std::vector<PairHandle*> relPairs;
253 : :
254 : : // prohibit copying
255 : : iRel( const iRel& ) {}
256 : : void operator=(const iRel&) {}
257 : : };
258 : :
259 : : inline
260 : 38 : iRel::iRel( const char* options )
261 : 38 : : iRelInstanceOwner(true)
262 : : {
263 [ - + ]: 38 : int err, len = options ? strlen(options) : 0;
264 [ + - ]: 38 : iRel_create( options, &mInstance, &err, len );
265 [ - + ]: 38 : if (iBase_SUCCESS != err) {
266 : 0 : mInstance = 0;
267 : 0 : iRelInstanceOwner = false;
268 : : }
269 : 38 : }
270 : :
271 : : inline
272 : : iRel::iRel( iRel_Instance instance )
273 : : : iRelInstanceOwner(false)
274 : : {
275 : : mInstance = instance;
276 : : }
277 : :
278 : 42 : inline iRel::~iRel()
279 : : {
280 [ + - ]: 21 : if (iRelInstanceOwner) {
281 : : int err;
282 : 21 : iRel_destroy( mInstance, &err );
283 : : }
284 : 21 : }
285 : :
286 : : inline iRel::Error iRel::getErrorType()
287 : : {
288 : : int err;
289 : : iRel_getErrorType(mInstance, &err );
290 : : return (Error)err;
291 : : }
292 : :
293 : : inline std::string iRel::getDescription()
294 : : {
295 : : std::vector<char> buffer(1024);
296 : : iRel_getDescription(mInstance, &buffer[0], buffer.size() );
297 : : return std::string(&buffer[0]);
298 : : }
299 : :
300 : 77 : inline iRel::Error iRel::createPair (
301 : : /*in*/ iBase_Instance iface1,
302 : : /*in*/ const RelationType ent_or_set1,
303 : : /*in*/ const IfaceType iface_type1,
304 : : /*in*/ const RelationStatus status1,
305 : : /*in*/ iBase_Instance iface2,
306 : : /*in*/ const RelationType ent_or_set2,
307 : : /*in*/ const IfaceType iface_type2,
308 : : /*in*/ const RelationStatus status2,
309 : : /*out*/ PairHandle *&pair)
310 : : {
311 : : pair = new PairHandle(this, iface1, ent_or_set1, iface_type1, status1,
312 [ + - ]: 77 : iface2, ent_or_set2, iface_type2, status2);
313 : 77 : return (Error)iBase_SUCCESS;
314 : : }
315 : :
316 : : template<typename T, typename U>
317 : : inline iRel::Error iRel::createPair (
318 : : /*in*/ T &iface1,
319 : : /*in*/ const RelationType ent_or_set1,
320 : : /*in*/ const RelationStatus status1,
321 : : /*in*/ U &iface2,
322 : : /*in*/ const RelationType ent_or_set2,
323 : : /*in*/ const RelationStatus status2,
324 : : /*out*/ PairHandle *&pair)
325 : : {
326 : : pair = new PairHandle(this, iface1.instance(), ent_or_set1,
327 : : iface1.iface_type(), status1,
328 : : iface2.instance(), ent_or_set2,
329 : : iface2.iface_type(), status2);
330 : : return (Error)iBase_SUCCESS;
331 : : }
332 : :
333 : :
334 : : inline iRel::Error iRel::findPairs (
335 : : /*in*/ iBase_Instance iface,
336 : : /*inout*/ std::vector<PairHandle *> &pairs)
337 : : {
338 : : for (std::vector<PairHandle*>::iterator vit = relPairs.begin(); vit != relPairs.end(); vit++) {
339 : : if ((*vit)->iFaces[0] == iface || (*vit)->iFaces[1] == iface)
340 : : pairs.push_back(*vit);
341 : : }
342 : :
343 : : return (Error)iBase_SUCCESS;
344 : : }
345 : :
346 : 77 : inline iRel::Error iRel::add_pair(PairHandle *pair)
347 : : {
348 [ + - ][ + - ]: 77 : assert(std::find(relPairs.begin(), relPairs.end(), pair) == relPairs.end());
[ - + ]
349 : 77 : relPairs.push_back(pair);
350 : 77 : return (Error)iBase_SUCCESS;
351 : : }
352 : :
353 : : inline iRel::Error iRel::remove_pair(PairHandle *pair)
354 : : {
355 : : std::vector<PairHandle*>::iterator vit = std::find(relPairs.begin(), relPairs.end(), pair);
356 : : if (vit == relPairs.end()) return (Error)iBase_FAILURE;
357 : : else relPairs.erase(vit);
358 : : return (Error)iBase_SUCCESS;
359 : : }
360 : :
361 : 77 : inline iRel::PairHandle::PairHandle(iRel *instance,
362 : : iBase_Instance iface1,
363 : : RelationType rtype1,
364 : : IfaceType itype1,
365 : : RelationStatus status1,
366 : : iBase_Instance iface2,
367 : : RelationType rtype2,
368 : : IfaceType itype2,
369 : : RelationStatus status2)
370 : : : irelInstance(instance),
371 : 77 : pairOwner(true)
372 : : {
373 : 77 : iFaces[0] = iface1;
374 : 77 : iFaces[1] = iface2;
375 : 77 : iFaceTypes[0] = itype1;
376 : 77 : iFaceTypes[1] = itype2;
377 : 77 : relTypes[0] = rtype1;
378 : 77 : relTypes[1] = rtype2;
379 : 77 : relStatuses[0] = status1;
380 : 77 : relStatuses[1] = status2;
381 : :
382 : : int err;
383 : : iRel_createPair(IRELI, iface1, rtype1, itype1, status1, iface2, rtype2,
384 [ + - ]: 77 : itype2, status2, &irelPair, &err);
385 [ + - ]: 77 : instance->add_pair(this);
386 : 77 : }
387 : :
388 : : inline iRel::PairHandle::PairHandle(iRel *instance, iRel_PairHandle ph)
389 : : : irelInstance(instance), pairOwner(false)
390 : : {
391 : : int err;
392 : : int rtype1, rtype2, itype1, itype2, status1, status2;
393 : : iRel_getPairInfo(IRELI, ph, iFaces, &rtype1, &itype1, &status1,
394 : : iFaces+1, &rtype2, &itype2, &status2, &err);
395 : : if (iBase_SUCCESS == err) {
396 : : iFaceTypes[0] = (IfaceType)itype1;
397 : : iFaceTypes[1] = (IfaceType)itype2;
398 : : relTypes[0] = (RelationType)rtype1;
399 : : relTypes[1] = (RelationType)rtype2;
400 : : relStatuses[0] = (RelationStatus)status1;
401 : : relStatuses[1] = (RelationStatus)status2;
402 : : }
403 : :
404 : : instance->add_pair(this);
405 : : }
406 : :
407 : : inline iRel::PairHandle::~PairHandle()
408 : : {
409 : : irelInstance->remove_pair(this);
410 : :
411 : : if (pairOwner) {
412 : : int err;
413 : : iRel_destroyPair(IRELI, irelPair, &err);
414 : : }
415 : : }
416 : :
417 : : inline iBase_Instance iRel::PairHandle::get_iface(int i)
418 : : {
419 : : assert(i == 0 || i == 1);
420 : : return iFaces[i];
421 : : }
422 : :
423 : : inline iRel::IfaceType iRel::PairHandle::get_iface_type(int i)
424 : : {
425 : : assert(i == 0 || i == 1);
426 : : return iFaceTypes[i];
427 : : }
428 : :
429 : : inline iRel::RelationType iRel::PairHandle::get_rel_type(int i)
430 : : {
431 : : assert(i == 0 || i == 1);
432 : : return relTypes[i];
433 : : }
434 : :
435 : : inline iRel::Error iRel::PairHandle::changeType (RelationType ent_or_set1,
436 : : RelationType ent_or_set2)
437 : : {
438 : : int err;
439 : : iRel_changePairType(IRELI, irelPair, ent_or_set1, ent_or_set2, &err);
440 : : return (Error)err;
441 : : }
442 : :
443 : : inline iRel::Error iRel::PairHandle::setEntEntRelation (
444 : : /*in*/ iBase_EntityHandle ent1,
445 : : /*in*/ iBase_EntityHandle ent2)
446 : : {
447 : : int err;
448 : : iRel_setEntEntRelation (IRELI, irelPair, ent1, ent2, &err);
449 : : return (Error)err;
450 : : }
451 : :
452 : 952 : inline iRel::Error iRel::PairHandle::setEntSetRelation (
453 : : /*in*/ iBase_EntityHandle ent1,
454 : : /*in*/ iBase_EntitySetHandle entset2)
455 : : {
456 : : int err;
457 [ + - ]: 952 : iRel_setEntSetRelation (IRELI, irelPair, ent1, entset2, &err);
458 : 952 : return (Error)err;
459 : :
460 : : }
461 : : inline iRel::Error iRel::PairHandle::setSetEntRelation (
462 : : /*in*/ iBase_EntitySetHandle entset1,
463 : : /*in*/ iBase_EntityHandle ent2)
464 : : {
465 : : int err;
466 : : iRel_setSetEntRelation (IRELI, irelPair, entset1, ent2, &err);
467 : : return (Error)err;
468 : : }
469 : :
470 : 0 : inline iRel::Error iRel::PairHandle::setSetSetRelation (
471 : : /*in*/ iBase_EntitySetHandle entset1,
472 : : /*in*/ iBase_EntitySetHandle entset2)
473 : : {
474 : : int err;
475 [ # # ]: 0 : iRel_setSetSetRelation (IRELI, irelPair, entset1, entset2, &err);
476 : 0 : return (Error)err;
477 : : }
478 : :
479 : : inline iRel::Error iRel::PairHandle::setEntArrEntArrRelation (
480 : : /*in*/ iBase_EntityHandle *ent_array_1,
481 : : /*in*/ int num_ent1,
482 : : /*in*/ iBase_EntityHandle *ent_array_2,
483 : : /*in*/ int num_ent2)
484 : : {
485 : : int err;
486 : : iRel_setEntArrEntArrRelation (IRELI, irelPair, ent_array_1, num_ent1, ent_array_2, num_ent2, &err);
487 : : return (Error)err;
488 : : }
489 : :
490 : : inline iRel::Error iRel::PairHandle::setSetArrEntArrRelation (
491 : : /*in*/ iBase_EntitySetHandle *entset_array_1,
492 : : /*in*/ int num_ent1,
493 : : /*in*/ iBase_EntityHandle *ent_array_2,
494 : : /*in*/ int num_ent2)
495 : : {
496 : : int err;
497 : : iRel_setSetArrEntArrRelation (IRELI, irelPair, entset_array_1, num_ent1, ent_array_2, num_ent2, &err);
498 : : return (Error)err;
499 : : }
500 : :
501 : : inline iRel::Error iRel::PairHandle::setEntArrSetArrRelation (
502 : : /*in*/ iBase_EntityHandle *ent_array_1,
503 : : /*in*/ int num_ent1,
504 : : /*in*/ iBase_EntitySetHandle *entset_array_2,
505 : : /*in*/ int num_ent2)
506 : : {
507 : : int err;
508 : : iRel_setEntArrSetArrRelation (IRELI, irelPair, ent_array_1, num_ent1, entset_array_2, num_ent2, &err);
509 : : return (Error)err;
510 : : }
511 : :
512 : : inline iRel::Error iRel::PairHandle::setSetArrSetArrRelation (
513 : : /*in*/ iBase_EntitySetHandle *entset_array_1,
514 : : /*in*/ int num_ent1,
515 : : /*in*/ iBase_EntitySetHandle *entset_array_2,
516 : : /*in*/ int num_ent2)
517 : : {
518 : : int err;
519 : : iRel_setSetArrSetArrRelation (IRELI, irelPair,
520 : : /*in*/ entset_array_1, num_ent1, entset_array_2, num_ent2, &err);
521 : : return (Error)err;
522 : : }
523 : :
524 : :
525 : : inline iRel::Error iRel::PairHandle::getEntEntRelation (
526 : : /*in*/ iBase_EntityHandle ent1,
527 : : /*in*/ bool switch_order,
528 : : /*out*/ iBase_EntityHandle &ent2)
529 : : {
530 : : int err;
531 : : iRel_getEntEntRelation (IRELI, irelPair, ent1, switch_order, &ent2, &err);
532 : : return (Error)err;
533 : : }
534 : :
535 : 5825 : inline iRel::Error iRel::PairHandle::getEntSetRelation (
536 : : /*in*/ iBase_EntityHandle ent1,
537 : : /*in*/ bool switch_order,
538 : : /*out*/ iBase_EntitySetHandle &entset2)
539 : : {
540 : : int err;
541 [ + - ]: 5825 : iRel_getEntSetRelation (IRELI, irelPair, ent1, switch_order, &entset2, &err);
542 : 5825 : return (Error)err;
543 : : }
544 : :
545 : 0 : inline iRel::Error iRel::PairHandle::getSetEntRelation (
546 : : /*in*/ iBase_EntitySetHandle entset1,
547 : : /*in*/ bool switch_order,
548 : : /*out*/ iBase_EntityHandle &ent2)
549 : : {
550 : : int err;
551 [ # # ]: 0 : iRel_getSetEntRelation (IRELI, irelPair, entset1, switch_order, &ent2, &err);
552 : 0 : return (Error)err;
553 : : }
554 : :
555 : 0 : inline iRel::Error iRel::PairHandle::getSetSetRelation (
556 : : /*in*/ iBase_EntitySetHandle entset1,
557 : : /*in*/ bool switch_order,
558 : : /*out*/ iBase_EntitySetHandle &entset2)
559 : : {
560 : : int err;
561 [ # # ]: 0 : iRel_getSetSetRelation (IRELI, irelPair, entset1, switch_order, &entset2, &err);
562 : 0 : return (Error)err;
563 : : }
564 : :
565 : : inline iRel::Error iRel::PairHandle::getEntSetIterRelation (
566 : : /*in*/ iBase_EntityHandle ent1,
567 : : /*in*/ bool switch_order,
568 : : /*out*/ iBase_EntityIterator &entset2)
569 : : {
570 : : int err;
571 : : iRel_getEntSetIterRelation (IRELI, irelPair, ent1, switch_order, &entset2, &err);
572 : : return (Error)err;
573 : : }
574 : :
575 : : inline iRel::Error iRel::PairHandle::getEntArrEntArrRelation (
576 : : /*in*/ iBase_EntityHandle *ent_array_1,
577 : : /*in*/ int ent_array_1_size,
578 : : /*in*/ bool switch_order,
579 : : /*inout*/ std::vector<iBase_EntityHandle> &ent_array_2)
580 : : {
581 : : int err;
582 : : int dum1 = 0, dum2;
583 : : iBase_EntityHandle *dum_ptr = NULL;
584 : : iRel_getEntArrEntArrRelation (IRELI, irelPair, ent_array_1, ent_array_1_size, switch_order,
585 : : &dum_ptr, &dum1, &dum2, &err);
586 : : if (iBase_SUCCESS == err) {
587 : : ent_array_2.resize(dum1);
588 : : memcpy(&ent_array_2[0], dum_ptr, dum1*sizeof(iBase_EntityHandle));
589 : : }
590 : : return (Error)err;
591 : :
592 : : }
593 : : inline iRel::Error iRel::PairHandle::getEntArrSetArrRelation (
594 : : /*in*/ iBase_EntityHandle *ent_array_1,
595 : : /*in*/ int ent_array_1_size,
596 : : /*in*/ bool switch_order,
597 : : /*inout*/ std::vector<iBase_EntitySetHandle> &entset_array_2)
598 : : {
599 : : int err;
600 : : int dum1 = 0, dum2;
601 : : iBase_EntitySetHandle *dum_ptr = NULL;
602 : : iRel_getEntArrSetArrRelation (IRELI, irelPair, ent_array_1, ent_array_1_size, switch_order,
603 : : &dum_ptr, &dum1, &dum2, &err);
604 : : if (iBase_SUCCESS == err) {
605 : : entset_array_2.resize(dum1);
606 : : memcpy(&entset_array_2[0], dum_ptr, dum1*sizeof(iBase_EntitySetHandle));
607 : : }
608 : : return (Error)err;
609 : :
610 : : }
611 : : inline iRel::Error iRel::PairHandle::getSetArrEntArrRelation (
612 : : /*in*/ iBase_EntitySetHandle *entset_array_1,
613 : : /*in*/ int entset_array_1_size,
614 : : /*in*/ bool switch_order,
615 : : /*inout*/ std::vector<iBase_EntityHandle> &ent_array_2)
616 : : {
617 : : int err;
618 : : int dum1 = 0, dum2;
619 : : iBase_EntityHandle *dum_ptr = NULL;
620 : : iRel_getSetArrEntArrRelation (IRELI, irelPair, entset_array_1, entset_array_1_size, switch_order,
621 : : &dum_ptr, &dum1, &dum2, &err);
622 : : if (iBase_SUCCESS == err) {
623 : : ent_array_2.resize(dum1);
624 : : memcpy(&ent_array_2[0], dum_ptr, dum1*sizeof(iBase_EntityHandle));
625 : : }
626 : : return (Error)err;
627 : :
628 : : }
629 : : inline iRel::Error iRel::PairHandle::getSetArrSetArrRelation (
630 : : /*in*/ iBase_EntitySetHandle *entset_array_1,
631 : : /*in*/ int entset_array_1_size,
632 : : /*in*/ bool switch_order,
633 : : /*inout*/ std::vector<iBase_EntitySetHandle> &entset_array_2)
634 : : {
635 : : int err;
636 : : int dum1 = 0, dum2;
637 : : iBase_EntitySetHandle *dum_ptr = NULL;
638 : : iRel_getSetArrSetArrRelation (IRELI, irelPair, entset_array_1, entset_array_1_size, switch_order,
639 : : &dum_ptr, &dum1, &dum2, &err);
640 : : if (iBase_SUCCESS == err) {
641 : : entset_array_2.resize(dum1);
642 : : memcpy(&entset_array_2[0], dum_ptr, dum1*sizeof(iBase_EntitySetHandle));
643 : : }
644 : : return (Error)err;
645 : :
646 : : }
647 : : inline iRel::Error iRel::PairHandle::getEntArrSetIterArrRelation (
648 : : /*in*/ iBase_EntityHandle *ent_array_1,
649 : : /*in*/ int ent_array_1_size,
650 : : /*in*/ bool switch_order,
651 : : /*inout*/ std::vector<iBase_EntityIterator> &entiter)
652 : : {
653 : : int err;
654 : : int dum1 = 0, dum2;
655 : : iBase_EntityIterator *dum_ptr = NULL;
656 : : iRel_getEntArrSetIterArrRelation (IRELI, irelPair, ent_array_1, ent_array_1_size, switch_order,
657 : : &dum_ptr, &dum1, &dum2, &err);
658 : : if (iBase_SUCCESS == err) {
659 : : entiter.resize(dum1);
660 : : memcpy(&entiter[0], dum_ptr, dum1*sizeof(iBase_EntityIterator));
661 : : }
662 : : return (Error)err;
663 : :
664 : : }
665 : :
666 : 8 : inline iRel::Error iRel::PairHandle::inferAllRelations ()
667 : : {
668 : : int err;
669 [ + - ]: 8 : iRel_inferAllRelations (IRELI, irelPair, &err);
670 : 8 : return (Error)err;
671 : : }
672 : :
673 : : inline iRel::Error iRel::PairHandle::inferAllRelationsAndType ()
674 : : {
675 : : int err;
676 : : iRel_inferAllRelationsAndType (IRELI, &irelPair, &err);
677 : : return (Error)err;
678 : : }
679 : :
680 : :
681 : : inline iRel::Error iRel::PairHandle::inferEntRelations (
682 : : /*in*/ iBase_EntityHandle entity,
683 : : /*in*/ int iface_no)
684 : : {
685 : : int err;
686 : : iRel_inferEntRelations (IRELI, irelPair, entity, iface_no, &err);
687 : : return (Error)err;
688 : : }
689 : :
690 : : inline iRel::Error iRel::PairHandle::inferSetRelations (
691 : : /*in*/ iBase_EntitySetHandle entity_set,
692 : : /*in*/ int iface_no)
693 : : {
694 : : int err;
695 : : iRel_inferSetRelations (IRELI, irelPair, entity_set, iface_no, &err);
696 : : return (Error)err;
697 : : }
698 : :
699 : : inline iRel::Error iRel::PairHandle::inferEntArrRelations (
700 : : /*in*/ iBase_EntityHandle *entities,
701 : : /*in*/ int entities_size,
702 : : /*in*/ int iface_no)
703 : : {
704 : : int err;
705 : : iRel_inferEntArrRelations (IRELI, irelPair, entities, entities_size, iface_no, &err);
706 : : return (Error)err;
707 : : }
708 : :
709 : : inline iRel::Error iRel::PairHandle::inferSetArrRelations (
710 : : /*in*/ iBase_EntitySetHandle *entity_sets,
711 : : /*in*/ int entities_size,
712 : : /*in*/ int iface_no)
713 : : {
714 : : int err;
715 : : iRel_inferSetArrRelations (IRELI, irelPair, entity_sets, entities_size, iface_no, &err);
716 : : return (Error)err;
717 : : }
718 : :
719 : : #endif /* #ifndef ITAPS_REL_HH */
720 : :
|