MOAB: Mesh Oriented datABase  (version 5.5.0)
AssocPair Class Reference

#include <AssocPair.hpp>

+ Collaboration diagram for AssocPair:

Public Member Functions

 AssocPair (iRel_Instance instance, iBase_Instance iface0, iRel_RelationType ent_or_set0, iRel_IfaceType type0, iRel_RelationStatus status0, iBase_Instance iface1, iRel_RelationType ent_or_set1, iRel_IfaceType type1, iRel_RelationStatus status1)
 
 ~AssocPair ()
 
iBase_Instance iface_instance (int iface_no) const
 
iRel_IfaceType iface_type (int iface_no) const
 
iRel_RelationType relation_type (int iface_no) const
 
iRel_RelationStatus relation_status (int iface_no) const
 
int change_type (int iface_no, iRel_RelationType type)
 
int change_status (int iface_no, iRel_RelationStatus status)
 
bool equivalent (iBase_Instance iface1, iBase_Instance iface2, bool *order_switched=NULL)
 
bool equivalent (iRel_IfaceType type1, iRel_IfaceType type2, bool *order_switched=NULL)
 
bool contains (iBase_Instance iface)
 
int get_all_entities (int iface_no, int dimension, iBase_EntityHandle **entities, int *entities_alloc, int *entities_size)
 
int get_all_sets (int iface_no, iBase_EntitySetHandle **sets, int *sets_alloc, int *sets_size)
 
int get_entities (int iface_no, int dimension, iBase_EntitySetHandle set_handle, iBase_EntityHandle **entities, int *entities_alloc, int *entities_size)
 
int get_ents_dims (int iface_no, iBase_EntityHandle *entities, int entities_size, int **ent_types, int *ent_types_alloc, int *ent_types_size)
 
int set_relation (iBase_EntityHandle ent1, iBase_EntityHandle ent2)
 
int set_relation (iBase_EntitySetHandle set1, iBase_EntityHandle ent2)
 
int set_relation (iBase_EntityHandle ent1, iBase_EntitySetHandle set2)
 
int set_relation (iBase_EntitySetHandle set1, iBase_EntitySetHandle set2)
 
int get_relation (int iface_no, iBase_EntityHandle *entities, int num_entities, iBase_EntityHandle *tag_values)
 
int get_relation (int iface_no, iBase_EntitySetHandle *sets, int num_sets, iBase_EntityHandle *tag_values)
 
int get_relation (int iface_no, iBase_EntityHandle *entities, int num_entities, iBase_EntitySetHandle *tag_values)
 
int get_relation (int iface_no, iBase_EntitySetHandle *sets, int num_sets, iBase_EntitySetHandle *tag_values)
 
int get_relation (int iface_no, iBase_EntityHandle *entities, int num_entities, iBase_EntityIterator *tag_values)
 
int get_relation (int iface_no, iBase_EntitySetHandle *sets, int num_sets, iBase_EntityIterator *tag_values)
 
int rmv_relation (int iface_no, iBase_EntityHandle *entities, int num_entities)
 
int rmv_relation (int iface_no, iBase_EntitySetHandle *sets, int num_sets)
 
int get_gids (int iface_no, iBase_EntityHandle *entities, int num_entities, int *tag_values)
 
int get_gids (int iface_no, iBase_EntitySetHandle *sets, int num_sets, int *tag_values)
 
int get_dims (int iface_no, iBase_EntityHandle *entities, int num_entities, int *tag_values)
 
int get_dims (int iface_no, iBase_EntitySetHandle *sets, int num_sets, int *tag_values)
 

Private Member Functions

 AssocPair ()
 
int populate_recursive (int iface_no, iBase_EntitySetHandle set, iBase_EntityHandle related_ent)
 
int populate_recursive (int iface_no, iBase_EntitySetHandle set, iBase_EntitySetHandle related_set)
 
int unpopulate_recursive (int iface_no, iBase_EntitySetHandle set)
 

Private Attributes

iRel_Instance instance
 
AssocPairSiderelSides [2]
 
iRel_RelationType entOrSet [2]
 
iRel_RelationStatus relStatus [2]
 
int pairId
 

Static Private Attributes

static int currId = 0
 

Friends

class Lasso
 

Detailed Description

Definition at line 11 of file AssocPair.hpp.

Constructor & Destructor Documentation

◆ AssocPair() [1/2]

AssocPair::AssocPair ( iRel_Instance  instance,
iBase_Instance  iface0,
iRel_RelationType  ent_or_set0,
iRel_IfaceType  type0,
iRel_RelationStatus  status0,
iBase_Instance  iface1,
iRel_RelationType  ent_or_set1,
iRel_IfaceType  type1,
iRel_RelationStatus  status1 
)

Definition at line 19 of file AssocPair.cpp.

28  : instance( p_instance )
29 {
30  pairId = currId++;
31 
32  iBase_Instance ifaces[] = { iface0, iface1 };
33  iRel_IfaceType types[] = { type0, type1 };
34  for( int i = 0; i < 2; i++ )
35  {
36  switch( types[i] )
37  {
38 #ifdef ENABLE_IGEOM
39  case iRel_IGEOM_IFACE:
40  relSides[i] = new GeomAssocPairSide( instance, ifaces[i], pairId );
41  break;
42 #endif
43 #ifdef ENABLE_FBIGEOM
44  case iRel_FBIGEOM_IFACE:
45  relSides[i] = new FBGeomAssocPairSide( instance, ifaces[i], pairId );
46  break;
47 #endif
48 #ifdef ENABLE_IMESH
49  case iRel_IMESH_IFACE:
50  relSides[i] = new MeshAssocPairSide( instance, ifaces[i], pairId );
51  break;
52 #endif
53  default:
54  relSides[i] = NULL;
55  }
56  }
57 
58  entOrSet[0] = ent_or_set0;
59  entOrSet[1] = ent_or_set1;
60  relStatus[0] = p_status0;
61  relStatus[1] = p_status1;
62 }

References currId, entOrSet, instance, iRel_FBIGEOM_IFACE, iRel_IGEOM_IFACE, iRel_IMESH_IFACE, pairId, relSides, and relStatus.

◆ ~AssocPair()

AssocPair::~AssocPair ( )

Definition at line 64 of file AssocPair.cpp.

65 {
66  for( int i = 0; i < 2; i++ )
67  delete relSides[i];
68 }

References relSides.

◆ AssocPair() [2/2]

AssocPair::AssocPair ( )
private

Member Function Documentation

◆ change_status()

int AssocPair::change_status ( int  iface_no,
iRel_RelationStatus  status 
)

Definition at line 360 of file AssocPair.cpp.

361 {
362  if( relStatus[iface_no] == status ) RETURNR( iBase_SUCCESS );
363 
364  relStatus[iface_no] = status;
365 
366  if( status == iRel_NOTEXIST )
367  {
368  // Destroy the assoc tag
369  CHK_ERRORR( relSides[iface_no]->destroy_relation_side() );
370  }
371  else if( status == iRel_INACTIVE )
372  {
373  // Create the assoc tag
374  CHK_ERRORR( relSides[iface_no]->create_relation_side() );
375  }
376  // Update the assoc tag
377  else if( status == iRel_ACTIVE )
378  {
379  CHK_ERRORR( relSides[iface_no]->destroy_relation_side() );CHK_ERRORR( relSides[iface_no]->create_relation_side() );
380 
381  if( entOrSet[!iface_no] == iRel_ENTITY )
382  {
384  int ent_alloc = 0, ent_size;
385 
386  CHK_ERRORR( relSides[!iface_no]->get_related_ents( &entities, &ent_alloc, &ent_size ) );
387  if( entOrSet[iface_no] == iRel_ENTITY )
388  {
389  std::vector< iBase_EntityHandle > related_ents( ent_size );
390  int result = relSides[!iface_no]->get_relation_side( entities, ent_size, &related_ents[0] );
391 
392  if( result == iBase_SUCCESS )
393  {
394  if( iface_no == 0 )
395  for( int i = 0; i < ent_size; i++ )
396  CHK_ERRORR( set_relation( related_ents[i], entities[i] ) );
397  else
398  for( int i = 0; i < ent_size; i++ )
399  CHK_ERRORR( set_relation( entities[i], related_ents[i] ) );
400  }
401  }
402  else
403  {
404  std::vector< iBase_EntitySetHandle > related_sets( ent_size );
405  int result = relSides[!iface_no]->get_relation_side( entities, ent_size, &related_sets[0] );
406 
407  if( result == iBase_SUCCESS )
408  {
409  if( iface_no == 0 )
410  for( int i = 0; i < ent_size; i++ )
411  CHK_ERRORR( set_relation( related_sets[i], entities[i] ) );
412  else
413  for( int i = 0; i < ent_size; i++ )
414  CHK_ERRORR( set_relation( entities[i], related_sets[i] ) );
415  }
416  }
417 
418  free( entities );
419  }
420  else
421  {
422  iBase_EntitySetHandle* sets = NULL;
423  int set_alloc = 0, set_size;
424 
425  CHK_ERRORR( relSides[!iface_no]->get_related_sets( &sets, &set_alloc, &set_size ) );
426  if( entOrSet[iface_no] == iRel_ENTITY )
427  {
428  std::vector< iBase_EntityHandle > related_ents( set_size );
429  int result = relSides[!iface_no]->get_relation_side( sets, set_size, &related_ents[0] );
430 
431  if( result == iBase_SUCCESS )
432  {
433  if( iface_no == 0 )
434  for( int i = 0; i < set_size; i++ )
435  CHK_ERRORR( set_relation( related_ents[i], sets[i] ) );
436  else
437  for( int i = 0; i < set_size; i++ )
438  CHK_ERRORR( set_relation( sets[i], related_ents[i] ) );
439  }
440  }
441  else
442  {
443  std::vector< iBase_EntitySetHandle > related_sets( set_size );
444  int result = relSides[!iface_no]->get_relation_side( sets, set_size, &related_sets[0] );
445 
446  if( result == iBase_SUCCESS )
447  {
448  if( iface_no == 0 )
449  for( int i = 0; i < set_size; i++ )
450  CHK_ERRORR( set_relation( related_sets[i], sets[i] ) );
451  else
452  for( int i = 0; i < set_size; i++ )
453  CHK_ERRORR( set_relation( sets[i], related_sets[i] ) );
454  }
455  }
456 
457  free( sets );
458  }
459  }
460  else
461  {
462  ERRORR( iBase_INVALID_ARGUMENT, "Invalid argument for relation status" );
463  }
464 
466 }

References CHK_ERRORR, entities, entOrSet, ERRORR, AssocPairSide::get_relation_side(), iBase_INVALID_ARGUMENT, iBase_SUCCESS, iRel_ACTIVE, iRel_ENTITY, iRel_INACTIVE, iRel_NOTEXIST, relSides, relStatus, RETURNR, and set_relation().

◆ change_type()

int AssocPair::change_type ( int  iface_no,
iRel_RelationType  type 
)

Definition at line 321 of file AssocPair.cpp.

322 {
323  if( entOrSet[iface_no] == type ) RETURNR( iBase_SUCCESS );
324  if( entOrSet[iface_no] == iRel_ENTITY || type == iRel_ENTITY )
325  ERRORR( iBase_FAILURE, "Can only change type from \"set\" to \"both\", or "
326  "vice-versa" );
327 
328  entOrSet[iface_no] = type;
329  if( relStatus[iface_no] != iRel_ACTIVE ) RETURNR( iBase_SUCCESS );
330 
331  iBase_EntitySetHandle* sets = NULL;
332  int set_alloc = 0, set_size;CHK_ERRORR( relSides[iface_no]->get_related_sets( &sets, &set_alloc, &set_size ) );
333  if( type == iRel_BOTH )
334  {
335  if( entOrSet[!iface_no] == iRel_ENTITY )
336  {
337  std::vector< iBase_EntityHandle > related_ents( set_size );CHK_ERRORR( relSides[iface_no]->get_relation_side( sets, set_size, &related_ents[0] ) );
338 
339  for( int i = 0; i < set_size; i++ )
340  CHK_ERRORR( populate_recursive( iface_no, sets[i], related_ents[i] ) );
341  }
342  else
343  {
344  std::vector< iBase_EntitySetHandle > related_sets( set_size );CHK_ERRORR( relSides[iface_no]->get_relation_side( sets, set_size, &related_sets[0] ) );
345 
346  for( int i = 0; i < set_size; i++ )
347  CHK_ERRORR( populate_recursive( iface_no, sets[i], related_sets[i] ) );
348  }
349  }
350  else if( type == iRel_SET )
351  {
352  for( int i = 0; i < set_size; i++ )
353  CHK_ERRORR( unpopulate_recursive( iface_no, sets[i] ) );
354  }
355 
356  free( sets );
358 }

References CHK_ERRORR, entOrSet, ERRORR, iBase_FAILURE, iBase_SUCCESS, iRel_ACTIVE, iRel_BOTH, iRel_ENTITY, iRel_SET, populate_recursive(), relSides, relStatus, RETURNR, and unpopulate_recursive().

◆ contains()

bool AssocPair::contains ( iBase_Instance  iface)

Definition at line 500 of file AssocPair.cpp.

501 {
502  return ( iface == relSides[0]->instance() || iface == relSides[1]->instance() );
503 }

References iface, instance, and relSides.

◆ equivalent() [1/2]

bool AssocPair::equivalent ( iBase_Instance  iface1,
iBase_Instance  iface2,
bool *  order_switched = NULL 
)

Definition at line 468 of file AssocPair.cpp.

469 {
470  if( iface0 == relSides[0]->instance() && iface1 == relSides[1]->instance() )
471  {
472  if( order_switched ) *order_switched = false;
473  return true;
474  }
475  else if( iface0 == relSides[1]->instance() && iface1 == relSides[0]->instance() )
476  {
477  if( order_switched ) *order_switched = true;
478  return true;
479  }
480  else
481  return false;
482 }

References instance, and relSides.

◆ equivalent() [2/2]

bool AssocPair::equivalent ( iRel_IfaceType  type1,
iRel_IfaceType  type2,
bool *  order_switched = NULL 
)

Definition at line 484 of file AssocPair.cpp.

485 {
486  if( type0 == relSides[0]->type() && type1 == relSides[1]->type() )
487  {
488  if( order_switched ) *order_switched = false;
489  return true;
490  }
491  else if( type0 == relSides[1]->type() && type1 == relSides[0]->type() )
492  {
493  if( order_switched ) *order_switched = true;
494  return true;
495  }
496  else
497  return false;
498 }

References relSides.

◆ get_all_entities()

int AssocPair::get_all_entities ( int  iface_no,
int  dimension,
iBase_EntityHandle **  entities,
int *  entities_alloc,
int *  entities_size 
)

Definition at line 70 of file AssocPair.cpp.

75 {
76  return relSides[iface_no]->get_all_entities( dimension, entities, entities_alloc, entities_size );
77 }

References entities, AssocPairSide::get_all_entities(), and relSides.

◆ get_all_sets()

int AssocPair::get_all_sets ( int  iface_no,
iBase_EntitySetHandle **  sets,
int *  sets_alloc,
int *  sets_size 
)

Definition at line 79 of file AssocPair.cpp.

80 {
81  return relSides[iface_no]->get_all_sets( sets, sets_alloc, sets_size );
82 }

References AssocPairSide::get_all_sets(), and relSides.

◆ get_dims() [1/2]

int AssocPair::get_dims ( int  iface_no,
iBase_EntityHandle entities,
int  num_entities,
int *  tag_values 
)

Definition at line 311 of file AssocPair.cpp.

312 {
313  return relSides[iface_no]->get_dims( entities, num_entities, tag_values );
314 }

References entities, AssocPairSide::get_dims(), and relSides.

◆ get_dims() [2/2]

int AssocPair::get_dims ( int  iface_no,
iBase_EntitySetHandle sets,
int  num_sets,
int *  tag_values 
)

Definition at line 316 of file AssocPair.cpp.

317 {
318  return relSides[iface_no]->get_dims( sets, num_sets, tag_values );
319 }

References AssocPairSide::get_dims(), and relSides.

◆ get_entities()

int AssocPair::get_entities ( int  iface_no,
int  dimension,
iBase_EntitySetHandle  set_handle,
iBase_EntityHandle **  entities,
int *  entities_alloc,
int *  entities_size 
)

Definition at line 84 of file AssocPair.cpp.

90 {
91  return relSides[iface_no]->get_entities( dimension, set_handle, entities, entities_alloc, entities_size );
92 }

References entities, AssocPairSide::get_entities(), and relSides.

Referenced by populate_recursive(), and unpopulate_recursive().

◆ get_ents_dims()

int AssocPair::get_ents_dims ( int  iface_no,
iBase_EntityHandle entities,
int  entities_size,
int **  ent_types,
int *  ent_types_alloc,
int *  ent_types_size 
)

Definition at line 94 of file AssocPair.cpp.

100 {
101  return relSides[iface_no]->get_ents_dims( entities, entities_size, ent_types, ent_types_alloc, ent_types_size );
102 }

References entities, AssocPairSide::get_ents_dims(), and relSides.

◆ get_gids() [1/2]

int AssocPair::get_gids ( int  iface_no,
iBase_EntityHandle entities,
int  num_entities,
int *  tag_values 
)

Definition at line 301 of file AssocPair.cpp.

302 {
303  return relSides[iface_no]->get_gids( entities, num_entities, tag_values );
304 }

References entities, AssocPairSide::get_gids(), and relSides.

◆ get_gids() [2/2]

int AssocPair::get_gids ( int  iface_no,
iBase_EntitySetHandle sets,
int  num_sets,
int *  tag_values 
)

Definition at line 306 of file AssocPair.cpp.

307 {
308  return relSides[iface_no]->get_gids( sets, num_sets, tag_values );
309 }

References AssocPairSide::get_gids(), and relSides.

◆ get_relation() [1/6]

int AssocPair::get_relation ( int  iface_no,
iBase_EntityHandle entities,
int  num_entities,
iBase_EntityHandle tag_values 
)

Definition at line 189 of file AssocPair.cpp.

193 {
194  if( relStatus[iface_no] == iRel_NOTEXIST ) ERRORR( iBase_FAILURE, "Relation does not exist on this side" );
195  if( entOrSet[!iface_no] != iRel_ENTITY ) // other iface is sets
196  ERRORR( iBase_INVALID_ENTITY_HANDLE, "Expected EntitySet, got Entity" );
197 
198  return relSides[iface_no]->get_relation_side( entities, num_entities, tag_values );
199 }

References entities, entOrSet, ERRORR, AssocPairSide::get_relation_side(), iBase_FAILURE, iBase_INVALID_ENTITY_HANDLE, iRel_ENTITY, iRel_NOTEXIST, relSides, and relStatus.

Referenced by get_relation(), and rmv_relation().

◆ get_relation() [2/6]

int AssocPair::get_relation ( int  iface_no,
iBase_EntityHandle entities,
int  num_entities,
iBase_EntityIterator tag_values 
)

Definition at line 234 of file AssocPair.cpp.

238 {
239  std::vector< iBase_EntitySetHandle > sets( num_entities );CHK_ERRORR( get_relation( iface_no, entities, num_entities, &sets[0] ) );
240 
241  for( int i = 0; i < num_entities; i++ )
242  CHK_ERRORR( relSides[i]->get_iterator( sets[i], &tag_values[i] ) );
243 
245 }

References CHK_ERRORR, entities, get_relation(), iBase_SUCCESS, relSides, and RETURNR.

◆ get_relation() [3/6]

int AssocPair::get_relation ( int  iface_no,
iBase_EntityHandle entities,
int  num_entities,
iBase_EntitySetHandle tag_values 
)

Definition at line 210 of file AssocPair.cpp.

214 {
215  if( relStatus[iface_no] == iRel_NOTEXIST ) ERRORR( iBase_FAILURE, "Relation does not exist on this side" );
216  if( entOrSet[!iface_no] == iRel_ENTITY ) // other iface is not sets
217  ERRORR( iBase_INVALID_ENTITY_HANDLE, "Expected Entity, got EntitySet" );
218 
219  return relSides[iface_no]->get_relation_side( entities, num_entities, tag_values );
220 }

References entities, entOrSet, ERRORR, AssocPairSide::get_relation_side(), iBase_FAILURE, iBase_INVALID_ENTITY_HANDLE, iRel_ENTITY, iRel_NOTEXIST, relSides, and relStatus.

◆ get_relation() [4/6]

int AssocPair::get_relation ( int  iface_no,
iBase_EntitySetHandle sets,
int  num_sets,
iBase_EntityHandle tag_values 
)

Definition at line 201 of file AssocPair.cpp.

202 {
203  if( relStatus[iface_no] == iRel_NOTEXIST ) ERRORR( iBase_FAILURE, "Relation does not exist on this side" );
204  if( entOrSet[!iface_no] != iRel_ENTITY ) // other iface is sets
205  ERRORR( iBase_INVALID_ENTITY_HANDLE, "Expected EntitySet, got Entity" );
206 
207  return relSides[iface_no]->get_relation_side( sets, num_sets, tag_values );
208 }

References entOrSet, ERRORR, AssocPairSide::get_relation_side(), iBase_FAILURE, iBase_INVALID_ENTITY_HANDLE, iRel_ENTITY, iRel_NOTEXIST, relSides, and relStatus.

◆ get_relation() [5/6]

int AssocPair::get_relation ( int  iface_no,
iBase_EntitySetHandle sets,
int  num_sets,
iBase_EntityIterator tag_values 
)

Definition at line 247 of file AssocPair.cpp.

248 {
249  std::vector< iBase_EntitySetHandle > sets2( num_sets );CHK_ERRORR( get_relation( iface_no, sets, num_sets, &sets2[0] ) );
250 
251  for( int i = 0; i < num_sets; i++ )
252  CHK_ERRORR( relSides[iface_no]->get_iterator( sets2[i], &tag_values[i] ) );
253 
255 }

References CHK_ERRORR, get_relation(), iBase_SUCCESS, relSides, and RETURNR.

◆ get_relation() [6/6]

int AssocPair::get_relation ( int  iface_no,
iBase_EntitySetHandle sets,
int  num_sets,
iBase_EntitySetHandle tag_values 
)

Definition at line 222 of file AssocPair.cpp.

226 {
227  if( relStatus[iface_no] == iRel_NOTEXIST ) ERRORR( iBase_FAILURE, "Relation does not exist on this side" );
228  if( entOrSet[!iface_no] == iRel_ENTITY ) // other iface is not sets
229  ERRORR( iBase_INVALID_ENTITY_HANDLE, "Expected Entity, got EntitySet" );
230 
231  return relSides[iface_no]->get_relation_side( sets, num_sets, tag_values );
232 }

References entOrSet, ERRORR, AssocPairSide::get_relation_side(), iBase_FAILURE, iBase_INVALID_ENTITY_HANDLE, iRel_ENTITY, iRel_NOTEXIST, relSides, and relStatus.

◆ iface_instance()

iBase_Instance AssocPair::iface_instance ( int  iface_no) const
inline

Definition at line 101 of file AssocPair.hpp.

102 {
103  return relSides[iface_no]->instance();
104 }

References AssocPairSide::instance(), and relSides.

◆ iface_type()

iRel_IfaceType AssocPair::iface_type ( int  iface_no) const
inline

Definition at line 106 of file AssocPair.hpp.

107 {
108  return relSides[iface_no]->type();
109 }

References relSides, and AssocPairSide::type().

◆ populate_recursive() [1/2]

int AssocPair::populate_recursive ( int  iface_no,
iBase_EntitySetHandle  set,
iBase_EntityHandle  related_ent 
)
private

Definition at line 505 of file AssocPair.cpp.

506 {
508  int entities_alloc = 0, entities_size;
509 
510  CHK_ERRORR( relSides[iface_no]->get_entities( -1, set, &entities, &entities_alloc, &entities_size ) );
511 
512  for( int i = 0; i < entities_size; i++ )
513  CHK_ERRORR( relSides[iface_no]->set_relation_side( entities + i, 1, &related_ent ) );
514 
515  free( entities );
517 }

References CHK_ERRORR, entities, get_entities(), iBase_SUCCESS, relSides, and RETURNR.

Referenced by change_type(), and set_relation().

◆ populate_recursive() [2/2]

int AssocPair::populate_recursive ( int  iface_no,
iBase_EntitySetHandle  set,
iBase_EntitySetHandle  related_set 
)
private

Definition at line 519 of file AssocPair.cpp.

520 {
522  int entities_alloc, entities_size;
523 
524  CHK_ERRORR( relSides[iface_no]->get_entities( -1, set, &entities, &entities_alloc, &entities_size ) );
525 
526  for( int i = 0; i < entities_size; i++ )
527  CHK_ERRORR( relSides[iface_no]->set_relation_side( entities + i, 1, &related_set ) );
528 
529  free( entities );
531 }

References CHK_ERRORR, entities, get_entities(), iBase_SUCCESS, relSides, and RETURNR.

◆ relation_status()

iRel_RelationStatus AssocPair::relation_status ( int  iface_no) const
inline

Definition at line 116 of file AssocPair.hpp.

117 {
118  return relStatus[iface_no];
119 }

References relStatus.

◆ relation_type()

iRel_RelationType AssocPair::relation_type ( int  iface_no) const
inline

Definition at line 111 of file AssocPair.hpp.

112 {
113  return entOrSet[iface_no];
114 }

References entOrSet.

◆ rmv_relation() [1/2]

int AssocPair::rmv_relation ( int  iface_no,
iBase_EntityHandle entities,
int  num_entities 
)

Definition at line 257 of file AssocPair.cpp.

258 {
259  if( relStatus[iface_no] == iRel_NOTEXIST ) ERRORR( iBase_FAILURE, "Relation does not exist on this side" );
260 
261  // TODO: handle "both" case
262 
263  // Remove the opposite side first
264  if( relStatus[!iface_no] == iRel_ACTIVE )
265  {
266  if( entOrSet[!iface_no] == iRel_ENTITY )
267  {
268  std::vector< iBase_EntityHandle > other_entities( num_entities );CHK_ERRORR( get_relation( iface_no, entities, num_entities, &other_entities[0] ) );CHK_ERRORR( relSides[!iface_no]->rmv_relation_side( &other_entities[0], num_entities ) );
269  }
270  else
271  {
272  std::vector< iBase_EntitySetHandle > other_sets( num_entities );CHK_ERRORR( get_relation( iface_no, entities, num_entities, &other_sets[0] ) );CHK_ERRORR( relSides[!iface_no]->rmv_relation_side( &other_sets[0], num_entities ) );
273  }
274  }
275 
276  return relSides[iface_no]->rmv_relation_side( entities, num_entities );
277 }

References CHK_ERRORR, entities, entOrSet, ERRORR, get_relation(), iBase_FAILURE, iRel_ACTIVE, iRel_ENTITY, iRel_NOTEXIST, relSides, relStatus, and AssocPairSide::rmv_relation_side().

◆ rmv_relation() [2/2]

int AssocPair::rmv_relation ( int  iface_no,
iBase_EntitySetHandle sets,
int  num_sets 
)

Definition at line 279 of file AssocPair.cpp.

280 {
281  if( relStatus[iface_no] == iRel_NOTEXIST ) ERRORR( iBase_FAILURE, "Relation does not exist on this side" );
282 
283  // TODO: handle "both" case
284 
285  // Remove the opposite side first
286  if( relStatus[!iface_no] == iRel_ACTIVE )
287  {
288  if( entOrSet[!iface_no] == iRel_ENTITY )
289  {
290  std::vector< iBase_EntityHandle > other_entities( num_sets );CHK_ERRORR( get_relation( iface_no, sets, num_sets, &other_entities[0] ) );CHK_ERRORR( relSides[!iface_no]->rmv_relation_side( &other_entities[0], num_sets ) );
291  }
292  else
293  {
294  std::vector< iBase_EntitySetHandle > other_sets( num_sets );CHK_ERRORR( get_relation( iface_no, sets, num_sets, &other_sets[0] ) );CHK_ERRORR( relSides[!iface_no]->rmv_relation_side( &other_sets[0], num_sets ) );
295  }
296  }
297 
298  return relSides[iface_no]->rmv_relation_side( sets, num_sets );
299 }

References CHK_ERRORR, entOrSet, ERRORR, get_relation(), iBase_FAILURE, iRel_ACTIVE, iRel_ENTITY, iRel_NOTEXIST, relSides, relStatus, and AssocPairSide::rmv_relation_side().

◆ set_relation() [1/4]

int AssocPair::set_relation ( iBase_EntityHandle  ent1,
iBase_EntityHandle  ent2 
)

Definition at line 104 of file AssocPair.cpp.

105 {
106  if( entOrSet[0] == iRel_SET || entOrSet[1] == iRel_SET ) ERRORR( iBase_FAILURE, "Invalid relation type" );
107 
108  // check that if we're passing in an ent for a 'both'-type
109  // assoc, there's already a set associated to the other ent
110  iBase_EntityHandle tmp_ent;
111  if( entOrSet[0] == iRel_BOTH && relSides[1]->get_relation_side( &ent2, 1, &tmp_ent ) != iBase_SUCCESS )
112  ERRORR( iBase_FAILURE, "Couldn't find associated set on left side" );
113  if( entOrSet[1] == iRel_BOTH && relSides[0]->get_relation_side( &ent1, 1, &tmp_ent ) != iBase_SUCCESS )
114  ERRORR( iBase_FAILURE, "Couldn't find associated set on right side" );
115 
116  // set ent1 => ent2
117  if( relStatus[0] == iRel_ACTIVE ) CHK_ERRORR( relSides[0]->set_relation_side( &ent1, 1, &ent2 ) );
118 
119  // set ent1 <= ent2
120  if( relStatus[1] == iRel_ACTIVE ) CHK_ERRORR( relSides[1]->set_relation_side( &ent2, 1, &ent1 ) );
121 
123 }

References CHK_ERRORR, entOrSet, ERRORR, iBase_FAILURE, iBase_SUCCESS, iRel_ACTIVE, iRel_BOTH, iRel_SET, relSides, relStatus, and RETURNR.

Referenced by change_status().

◆ set_relation() [2/4]

int AssocPair::set_relation ( iBase_EntityHandle  ent1,
iBase_EntitySetHandle  set2 
)

Definition at line 125 of file AssocPair.cpp.

126 {
127  if( entOrSet[0] == iRel_SET || entOrSet[1] == iRel_ENTITY ) ERRORR( iBase_FAILURE, "Invalid relation type" );
128 
129  // check that if we're passing in an ent for a 'both'-type
130  // assoc, there's already a set associated to the other ent
131  iBase_EntityHandle tmp_ent;
132  if( entOrSet[0] == iRel_BOTH && relSides[1]->get_relation_side( &set2, 1, &tmp_ent ) != iBase_SUCCESS )
133  ERRORR( iBase_FAILURE, "Couldn't find associated set on left side" );
134 
135  // set ent1 => set2
136  if( relStatus[0] == iRel_ACTIVE ) CHK_ERRORR( relSides[0]->set_relation_side( &ent1, 1, &set2 ) );
137 
138  // set ent1 <= set2
139  if( relStatus[1] == iRel_ACTIVE ) CHK_ERRORR( relSides[1]->set_relation_side( &set2, 1, &ent1 ) );
140 
141  // if the right side is a 'both'-type association, set the contents of set2
142  // to point to ent1 as well
143  if( entOrSet[1] == iRel_BOTH ) CHK_ERRORR( populate_recursive( 1, set2, ent1 ) );
144 
146 }

References CHK_ERRORR, entOrSet, ERRORR, iBase_FAILURE, iBase_SUCCESS, iRel_ACTIVE, iRel_BOTH, iRel_ENTITY, iRel_SET, populate_recursive(), relSides, relStatus, and RETURNR.

◆ set_relation() [3/4]

int AssocPair::set_relation ( iBase_EntitySetHandle  set1,
iBase_EntityHandle  ent2 
)

Definition at line 148 of file AssocPair.cpp.

149 {
150  if( entOrSet[0] == iRel_ENTITY || entOrSet[1] == iRel_SET ) ERRORR( iBase_FAILURE, "Invalid relation type" );
151 
152  // check that if we're passing in an ent for a 'both'-type
153  // assoc, there's already a set associated to the other ent
154  iBase_EntityHandle tmp_ent;
155  if( entOrSet[1] == iRel_BOTH && relSides[0]->get_relation_side( &set1, 1, &tmp_ent ) != iBase_SUCCESS )
156  ERRORR( iBase_FAILURE, "Couldn't find associated set on right side" );
157 
158  // set set1 => ent2
159  if( relStatus[0] == iRel_ACTIVE ) CHK_ERRORR( relSides[0]->set_relation_side( &set1, 1, &ent2 ) );
160 
161  // set ent1 <= set2
162  if( relStatus[1] == iRel_ACTIVE ) CHK_ERRORR( relSides[1]->set_relation_side( &ent2, 1, &set1 ) );
163 
164  // if the left side is a 'both'-type association, set the contents of set1
165  // to point to ent2 as well
166  if( entOrSet[0] == iRel_BOTH ) CHK_ERRORR( populate_recursive( 0, set1, ent2 ) );
167 
169 }

References CHK_ERRORR, entOrSet, ERRORR, iBase_FAILURE, iBase_SUCCESS, iRel_ACTIVE, iRel_BOTH, iRel_ENTITY, iRel_SET, populate_recursive(), relSides, relStatus, and RETURNR.

◆ set_relation() [4/4]

int AssocPair::set_relation ( iBase_EntitySetHandle  set1,
iBase_EntitySetHandle  set2 
)

Definition at line 171 of file AssocPair.cpp.

172 {
173  if( entOrSet[0] == iRel_ENTITY || entOrSet[1] == iRel_ENTITY ) ERRORR( iBase_FAILURE, "Invalid relation type" );
174 
175  // set set1 => set2
176  if( relStatus[0] == iRel_ACTIVE ) CHK_ERRORR( relSides[0]->set_relation_side( &set1, 1, &set2 ) );
177 
178  // set set1 <= set2
179  if( relStatus[1] == iRel_ACTIVE ) CHK_ERRORR( relSides[1]->set_relation_side( &set2, 1, &set1 ) );
180 
181  // if either side is a 'both'-type association, set the contents of set1
182  // to point to set2 as well (and/or vice-versa)
183  if( entOrSet[0] == iRel_BOTH ) CHK_ERRORR( populate_recursive( 0, set1, set2 ) );
184  if( entOrSet[1] == iRel_BOTH ) CHK_ERRORR( populate_recursive( 1, set2, set1 ) );
185 
187 }

References CHK_ERRORR, entOrSet, ERRORR, iBase_FAILURE, iBase_SUCCESS, iRel_ACTIVE, iRel_BOTH, iRel_ENTITY, populate_recursive(), relSides, relStatus, and RETURNR.

◆ unpopulate_recursive()

int AssocPair::unpopulate_recursive ( int  iface_no,
iBase_EntitySetHandle  set 
)
private

Definition at line 533 of file AssocPair.cpp.

534 {
536  int entities_alloc = 0, entities_size;
537 
538  CHK_ERRORR( relSides[iface_no]->get_entities( -1, set, &entities, &entities_alloc, &entities_size ) );CHK_ERRORR( relSides[iface_no]->rmv_relation_side( entities, entities_size ) );
539 
540  free( entities );
542 }

References CHK_ERRORR, entities, get_entities(), iBase_SUCCESS, relSides, and RETURNR.

Referenced by change_type().

Friends And Related Function Documentation

◆ Lasso

friend class Lasso
friend

Definition at line 14 of file AssocPair.hpp.

Member Data Documentation

◆ currId

int AssocPair::currId = 0
staticprivate

Definition at line 98 of file AssocPair.hpp.

Referenced by AssocPair().

◆ entOrSet

iRel_RelationType AssocPair::entOrSet[2]
private

◆ instance

iRel_Instance AssocPair::instance
private

Definition at line 92 of file AssocPair.hpp.

Referenced by AssocPair(), contains(), and equivalent().

◆ pairId

int AssocPair::pairId
private

Definition at line 96 of file AssocPair.hpp.

Referenced by AssocPair().

◆ relSides

◆ relStatus

iRel_RelationStatus AssocPair::relStatus[2]
private

The documentation for this class was generated from the following files: