![]() |
Mesh Oriented datABase
(version 5.4.1)
Array-based unstructured mesh datastructure
|
#include <AssocPair.hpp>
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 |
AssocPairSide * | relSides [2] |
iRel_RelationType | entOrSet [2] |
iRel_RelationStatus | relStatus [2] |
int | pairId |
Static Private Attributes | |
static int | currId = 0 |
Friends | |
class | Lasso |
Definition at line 11 of file AssocPair.hpp.
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.
References currId, entOrSet, instance, iRel_FBIGEOM_IFACE, iRel_IGEOM_IFACE, iRel_IMESH_IFACE, pairId, relSides, and relStatus.
: instance( p_instance )
{
pairId = currId++;
iBase_Instance ifaces[] = { iface0, iface1 };
iRel_IfaceType types[] = { type0, type1 };
for( int i = 0; i < 2; i++ )
{
switch( types[i] )
{
#ifdef ENABLE_IGEOM
case iRel_IGEOM_IFACE:
relSides[i] = new GeomAssocPairSide( instance, ifaces[i], pairId );
break;
#endif
#ifdef ENABLE_FBIGEOM
case iRel_FBIGEOM_IFACE:
relSides[i] = new FBGeomAssocPairSide( instance, ifaces[i], pairId );
break;
#endif
#ifdef ENABLE_IMESH
case iRel_IMESH_IFACE:
relSides[i] = new MeshAssocPairSide( instance, ifaces[i], pairId );
break;
#endif
default:
relSides[i] = NULL;
}
}
entOrSet[0] = ent_or_set0;
entOrSet[1] = ent_or_set1;
relStatus[0] = p_status0;
relStatus[1] = p_status1;
}
Definition at line 64 of file AssocPair.cpp.
References relSides.
{
for( int i = 0; i < 2; i++ )
delete relSides[i];
}
AssocPair::AssocPair | ( | ) | [private] |
int AssocPair::change_status | ( | int | iface_no, |
iRel_RelationStatus | status | ||
) |
Definition at line 360 of file AssocPair.cpp.
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().
{
if( relStatus[iface_no] == status ) RETURNR( iBase_SUCCESS );
relStatus[iface_no] = status;
if( status == iRel_NOTEXIST )
{
// Destroy the assoc tag
CHK_ERRORR( relSides[iface_no]->destroy_relation_side() );
}
else if( status == iRel_INACTIVE )
{
// Create the assoc tag
CHK_ERRORR( relSides[iface_no]->create_relation_side() );
}
// Update the assoc tag
else if( status == iRel_ACTIVE )
{
CHK_ERRORR( relSides[iface_no]->destroy_relation_side() );CHK_ERRORR( relSides[iface_no]->create_relation_side() );
if( entOrSet[!iface_no] == iRel_ENTITY )
{
iBase_EntityHandle* entities = NULL;
int ent_alloc = 0, ent_size;
CHK_ERRORR( relSides[!iface_no]->get_related_ents( &entities, &ent_alloc, &ent_size ) );
if( entOrSet[iface_no] == iRel_ENTITY )
{
std::vector< iBase_EntityHandle > related_ents( ent_size );
int result = relSides[!iface_no]->get_relation_side( entities, ent_size, &related_ents[0] );
if( result == iBase_SUCCESS )
{
if( iface_no == 0 )
for( int i = 0; i < ent_size; i++ )
CHK_ERRORR( set_relation( related_ents[i], entities[i] ) );
else
for( int i = 0; i < ent_size; i++ )
CHK_ERRORR( set_relation( entities[i], related_ents[i] ) );
}
}
else
{
std::vector< iBase_EntitySetHandle > related_sets( ent_size );
int result = relSides[!iface_no]->get_relation_side( entities, ent_size, &related_sets[0] );
if( result == iBase_SUCCESS )
{
if( iface_no == 0 )
for( int i = 0; i < ent_size; i++ )
CHK_ERRORR( set_relation( related_sets[i], entities[i] ) );
else
for( int i = 0; i < ent_size; i++ )
CHK_ERRORR( set_relation( entities[i], related_sets[i] ) );
}
}
free( entities );
}
else
{
iBase_EntitySetHandle* sets = NULL;
int set_alloc = 0, set_size;
CHK_ERRORR( relSides[!iface_no]->get_related_sets( &sets, &set_alloc, &set_size ) );
if( entOrSet[iface_no] == iRel_ENTITY )
{
std::vector< iBase_EntityHandle > related_ents( set_size );
int result = relSides[!iface_no]->get_relation_side( sets, set_size, &related_ents[0] );
if( result == iBase_SUCCESS )
{
if( iface_no == 0 )
for( int i = 0; i < set_size; i++ )
CHK_ERRORR( set_relation( related_ents[i], sets[i] ) );
else
for( int i = 0; i < set_size; i++ )
CHK_ERRORR( set_relation( sets[i], related_ents[i] ) );
}
}
else
{
std::vector< iBase_EntitySetHandle > related_sets( set_size );
int result = relSides[!iface_no]->get_relation_side( sets, set_size, &related_sets[0] );
if( result == iBase_SUCCESS )
{
if( iface_no == 0 )
for( int i = 0; i < set_size; i++ )
CHK_ERRORR( set_relation( related_sets[i], sets[i] ) );
else
for( int i = 0; i < set_size; i++ )
CHK_ERRORR( set_relation( sets[i], related_sets[i] ) );
}
}
free( sets );
}
}
else
{
ERRORR( iBase_INVALID_ARGUMENT, "Invalid argument for relation status" );
}
RETURNR( iBase_SUCCESS );
}
int AssocPair::change_type | ( | int | iface_no, |
iRel_RelationType | type | ||
) |
Definition at line 321 of file AssocPair.cpp.
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().
{
if( entOrSet[iface_no] == type ) RETURNR( iBase_SUCCESS );
if( entOrSet[iface_no] == iRel_ENTITY || type == iRel_ENTITY )
ERRORR( iBase_FAILURE, "Can only change type from \"set\" to \"both\", or "
"vice-versa" );
entOrSet[iface_no] = type;
if( relStatus[iface_no] != iRel_ACTIVE ) RETURNR( iBase_SUCCESS );
iBase_EntitySetHandle* sets = NULL;
int set_alloc = 0, set_size;CHK_ERRORR( relSides[iface_no]->get_related_sets( &sets, &set_alloc, &set_size ) );
if( type == iRel_BOTH )
{
if( entOrSet[!iface_no] == iRel_ENTITY )
{
std::vector< iBase_EntityHandle > related_ents( set_size );CHK_ERRORR( relSides[iface_no]->get_relation_side( sets, set_size, &related_ents[0] ) );
for( int i = 0; i < set_size; i++ )
CHK_ERRORR( populate_recursive( iface_no, sets[i], related_ents[i] ) );
}
else
{
std::vector< iBase_EntitySetHandle > related_sets( set_size );CHK_ERRORR( relSides[iface_no]->get_relation_side( sets, set_size, &related_sets[0] ) );
for( int i = 0; i < set_size; i++ )
CHK_ERRORR( populate_recursive( iface_no, sets[i], related_sets[i] ) );
}
}
else if( type == iRel_SET )
{
for( int i = 0; i < set_size; i++ )
CHK_ERRORR( unpopulate_recursive( iface_no, sets[i] ) );
}
free( sets );
RETURNR( iBase_SUCCESS );
}
bool AssocPair::contains | ( | iBase_Instance | iface | ) |
Definition at line 500 of file AssocPair.cpp.
References instance, and relSides.
{
return ( iface == relSides[0]->instance() || iface == relSides[1]->instance() );
}
bool AssocPair::equivalent | ( | iBase_Instance | iface1, |
iBase_Instance | iface2, | ||
bool * | order_switched = NULL |
||
) |
Definition at line 468 of file AssocPair.cpp.
References instance, and relSides.
{
if( iface0 == relSides[0]->instance() && iface1 == relSides[1]->instance() )
{
if( order_switched ) *order_switched = false;
return true;
}
else if( iface0 == relSides[1]->instance() && iface1 == relSides[0]->instance() )
{
if( order_switched ) *order_switched = true;
return true;
}
else
return false;
}
bool AssocPair::equivalent | ( | iRel_IfaceType | type1, |
iRel_IfaceType | type2, | ||
bool * | order_switched = NULL |
||
) |
Definition at line 484 of file AssocPair.cpp.
References relSides.
{
if( type0 == relSides[0]->type() && type1 == relSides[1]->type() )
{
if( order_switched ) *order_switched = false;
return true;
}
else if( type0 == relSides[1]->type() && type1 == relSides[0]->type() )
{
if( order_switched ) *order_switched = true;
return true;
}
else
return false;
}
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.
References AssocPairSide::get_all_entities(), and relSides.
{
return relSides[iface_no]->get_all_entities( dimension, entities, entities_alloc, entities_size );
}
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.
References AssocPairSide::get_all_sets(), and relSides.
{
return relSides[iface_no]->get_all_sets( sets, sets_alloc, sets_size );
}
int AssocPair::get_dims | ( | int | iface_no, |
iBase_EntityHandle * | entities, | ||
int | num_entities, | ||
int * | tag_values | ||
) |
Definition at line 311 of file AssocPair.cpp.
References AssocPairSide::get_dims(), and relSides.
{
return relSides[iface_no]->get_dims( entities, num_entities, tag_values );
}
int AssocPair::get_dims | ( | int | iface_no, |
iBase_EntitySetHandle * | sets, | ||
int | num_sets, | ||
int * | tag_values | ||
) |
Definition at line 316 of file AssocPair.cpp.
References AssocPairSide::get_dims(), and relSides.
{
return relSides[iface_no]->get_dims( sets, num_sets, tag_values );
}
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.
References AssocPairSide::get_entities(), and relSides.
Referenced by populate_recursive(), and unpopulate_recursive().
{
return relSides[iface_no]->get_entities( dimension, set_handle, entities, entities_alloc, entities_size );
}
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.
References AssocPairSide::get_ents_dims(), and relSides.
{
return relSides[iface_no]->get_ents_dims( entities, entities_size, ent_types, ent_types_alloc, ent_types_size );
}
int AssocPair::get_gids | ( | int | iface_no, |
iBase_EntityHandle * | entities, | ||
int | num_entities, | ||
int * | tag_values | ||
) |
Definition at line 301 of file AssocPair.cpp.
References AssocPairSide::get_gids(), and relSides.
{
return relSides[iface_no]->get_gids( entities, num_entities, tag_values );
}
int AssocPair::get_gids | ( | int | iface_no, |
iBase_EntitySetHandle * | sets, | ||
int | num_sets, | ||
int * | tag_values | ||
) |
Definition at line 306 of file AssocPair.cpp.
References AssocPairSide::get_gids(), and relSides.
{
return relSides[iface_no]->get_gids( sets, num_sets, tag_values );
}
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.
References 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().
{
if( relStatus[iface_no] == iRel_NOTEXIST ) ERRORR( iBase_FAILURE, "Relation does not exist on this side" );
if( entOrSet[!iface_no] != iRel_ENTITY ) // other iface is sets
ERRORR( iBase_INVALID_ENTITY_HANDLE, "Expected EntitySet, got Entity" );
return relSides[iface_no]->get_relation_side( entities, num_entities, tag_values );
}
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.
References entOrSet, ERRORR, AssocPairSide::get_relation_side(), iBase_FAILURE, iBase_INVALID_ENTITY_HANDLE, iRel_ENTITY, iRel_NOTEXIST, relSides, and relStatus.
{
if( relStatus[iface_no] == iRel_NOTEXIST ) ERRORR( iBase_FAILURE, "Relation does not exist on this side" );
if( entOrSet[!iface_no] != iRel_ENTITY ) // other iface is sets
ERRORR( iBase_INVALID_ENTITY_HANDLE, "Expected EntitySet, got Entity" );
return relSides[iface_no]->get_relation_side( sets, num_sets, tag_values );
}
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.
References entOrSet, ERRORR, AssocPairSide::get_relation_side(), iBase_FAILURE, iBase_INVALID_ENTITY_HANDLE, iRel_ENTITY, iRel_NOTEXIST, relSides, and relStatus.
{
if( relStatus[iface_no] == iRel_NOTEXIST ) ERRORR( iBase_FAILURE, "Relation does not exist on this side" );
if( entOrSet[!iface_no] == iRel_ENTITY ) // other iface is not sets
ERRORR( iBase_INVALID_ENTITY_HANDLE, "Expected Entity, got EntitySet" );
return relSides[iface_no]->get_relation_side( entities, num_entities, tag_values );
}
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.
References entOrSet, ERRORR, AssocPairSide::get_relation_side(), iBase_FAILURE, iBase_INVALID_ENTITY_HANDLE, iRel_ENTITY, iRel_NOTEXIST, relSides, and relStatus.
{
if( relStatus[iface_no] == iRel_NOTEXIST ) ERRORR( iBase_FAILURE, "Relation does not exist on this side" );
if( entOrSet[!iface_no] == iRel_ENTITY ) // other iface is not sets
ERRORR( iBase_INVALID_ENTITY_HANDLE, "Expected Entity, got EntitySet" );
return relSides[iface_no]->get_relation_side( sets, num_sets, tag_values );
}
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.
References CHK_ERRORR, get_relation(), iBase_SUCCESS, relSides, and RETURNR.
{
std::vector< iBase_EntitySetHandle > sets( num_entities );CHK_ERRORR( get_relation( iface_no, entities, num_entities, &sets[0] ) );
for( int i = 0; i < num_entities; i++ )
CHK_ERRORR( relSides[i]->get_iterator( sets[i], &tag_values[i] ) );
RETURNR( iBase_SUCCESS );
}
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.
References CHK_ERRORR, get_relation(), iBase_SUCCESS, relSides, and RETURNR.
{
std::vector< iBase_EntitySetHandle > sets2( num_sets );CHK_ERRORR( get_relation( iface_no, sets, num_sets, &sets2[0] ) );
for( int i = 0; i < num_sets; i++ )
CHK_ERRORR( relSides[iface_no]->get_iterator( sets2[i], &tag_values[i] ) );
RETURNR( iBase_SUCCESS );
}
iBase_Instance AssocPair::iface_instance | ( | int | iface_no | ) | const [inline] |
Definition at line 101 of file AssocPair.hpp.
References AssocPairSide::instance(), and relSides.
{
return relSides[iface_no]->instance();
}
iRel_IfaceType AssocPair::iface_type | ( | int | iface_no | ) | const [inline] |
Definition at line 106 of file AssocPair.hpp.
References relSides, and AssocPairSide::type().
{
return relSides[iface_no]->type();
}
int AssocPair::populate_recursive | ( | int | iface_no, |
iBase_EntitySetHandle | set, | ||
iBase_EntityHandle | related_ent | ||
) | [private] |
Definition at line 505 of file AssocPair.cpp.
References CHK_ERRORR, entities, get_entities(), iBase_SUCCESS, relSides, and RETURNR.
Referenced by change_type(), and set_relation().
{
iBase_EntityHandle* entities = NULL;
int entities_alloc = 0, entities_size;
CHK_ERRORR( relSides[iface_no]->get_entities( -1, set, &entities, &entities_alloc, &entities_size ) );
for( int i = 0; i < entities_size; i++ )
CHK_ERRORR( relSides[iface_no]->set_relation_side( entities + i, 1, &related_ent ) );
free( entities );
RETURNR( iBase_SUCCESS );
}
int AssocPair::populate_recursive | ( | int | iface_no, |
iBase_EntitySetHandle | set, | ||
iBase_EntitySetHandle | related_set | ||
) | [private] |
Definition at line 519 of file AssocPair.cpp.
References CHK_ERRORR, entities, get_entities(), iBase_SUCCESS, relSides, and RETURNR.
{
iBase_EntityHandle* entities = NULL;
int entities_alloc, entities_size;
CHK_ERRORR( relSides[iface_no]->get_entities( -1, set, &entities, &entities_alloc, &entities_size ) );
for( int i = 0; i < entities_size; i++ )
CHK_ERRORR( relSides[iface_no]->set_relation_side( entities + i, 1, &related_set ) );
free( entities );
RETURNR( iBase_SUCCESS );
}
iRel_RelationStatus AssocPair::relation_status | ( | int | iface_no | ) | const [inline] |
iRel_RelationType AssocPair::relation_type | ( | int | iface_no | ) | const [inline] |
int AssocPair::rmv_relation | ( | int | iface_no, |
iBase_EntityHandle * | entities, | ||
int | num_entities | ||
) |
Definition at line 257 of file AssocPair.cpp.
References CHK_ERRORR, entOrSet, ERRORR, get_relation(), iBase_FAILURE, iRel_ACTIVE, iRel_ENTITY, iRel_NOTEXIST, relSides, relStatus, and AssocPairSide::rmv_relation_side().
{
if( relStatus[iface_no] == iRel_NOTEXIST ) ERRORR( iBase_FAILURE, "Relation does not exist on this side" );
// TODO: handle "both" case
// Remove the opposite side first
if( relStatus[!iface_no] == iRel_ACTIVE )
{
if( entOrSet[!iface_no] == iRel_ENTITY )
{
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 ) );
}
else
{
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 ) );
}
}
return relSides[iface_no]->rmv_relation_side( entities, num_entities );
}
int AssocPair::rmv_relation | ( | int | iface_no, |
iBase_EntitySetHandle * | sets, | ||
int | num_sets | ||
) |
Definition at line 279 of file AssocPair.cpp.
References CHK_ERRORR, entOrSet, ERRORR, get_relation(), iBase_FAILURE, iRel_ACTIVE, iRel_ENTITY, iRel_NOTEXIST, relSides, relStatus, and AssocPairSide::rmv_relation_side().
{
if( relStatus[iface_no] == iRel_NOTEXIST ) ERRORR( iBase_FAILURE, "Relation does not exist on this side" );
// TODO: handle "both" case
// Remove the opposite side first
if( relStatus[!iface_no] == iRel_ACTIVE )
{
if( entOrSet[!iface_no] == iRel_ENTITY )
{
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 ) );
}
else
{
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 ) );
}
}
return relSides[iface_no]->rmv_relation_side( sets, num_sets );
}
int AssocPair::set_relation | ( | iBase_EntityHandle | ent1, |
iBase_EntityHandle | ent2 | ||
) |
Definition at line 104 of file AssocPair.cpp.
References CHK_ERRORR, entOrSet, ERRORR, iBase_FAILURE, iBase_SUCCESS, iRel_ACTIVE, iRel_BOTH, iRel_SET, relSides, relStatus, and RETURNR.
Referenced by change_status().
{
if( entOrSet[0] == iRel_SET || entOrSet[1] == iRel_SET ) ERRORR( iBase_FAILURE, "Invalid relation type" );
// check that if we're passing in an ent for a 'both'-type
// assoc, there's already a set associated to the other ent
iBase_EntityHandle tmp_ent;
if( entOrSet[0] == iRel_BOTH && relSides[1]->get_relation_side( &ent2, 1, &tmp_ent ) != iBase_SUCCESS )
ERRORR( iBase_FAILURE, "Couldn't find associated set on left side" );
if( entOrSet[1] == iRel_BOTH && relSides[0]->get_relation_side( &ent1, 1, &tmp_ent ) != iBase_SUCCESS )
ERRORR( iBase_FAILURE, "Couldn't find associated set on right side" );
// set ent1 => ent2
if( relStatus[0] == iRel_ACTIVE ) CHK_ERRORR( relSides[0]->set_relation_side( &ent1, 1, &ent2 ) );
// set ent1 <= ent2
if( relStatus[1] == iRel_ACTIVE ) CHK_ERRORR( relSides[1]->set_relation_side( &ent2, 1, &ent1 ) );
RETURNR( iBase_SUCCESS );
}
int AssocPair::set_relation | ( | iBase_EntitySetHandle | set1, |
iBase_EntityHandle | ent2 | ||
) |
Definition at line 148 of file AssocPair.cpp.
References CHK_ERRORR, entOrSet, ERRORR, iBase_FAILURE, iBase_SUCCESS, iRel_ACTIVE, iRel_BOTH, iRel_ENTITY, iRel_SET, populate_recursive(), relSides, relStatus, and RETURNR.
{
if( entOrSet[0] == iRel_ENTITY || entOrSet[1] == iRel_SET ) ERRORR( iBase_FAILURE, "Invalid relation type" );
// check that if we're passing in an ent for a 'both'-type
// assoc, there's already a set associated to the other ent
iBase_EntityHandle tmp_ent;
if( entOrSet[1] == iRel_BOTH && relSides[0]->get_relation_side( &set1, 1, &tmp_ent ) != iBase_SUCCESS )
ERRORR( iBase_FAILURE, "Couldn't find associated set on right side" );
// set set1 => ent2
if( relStatus[0] == iRel_ACTIVE ) CHK_ERRORR( relSides[0]->set_relation_side( &set1, 1, &ent2 ) );
// set ent1 <= set2
if( relStatus[1] == iRel_ACTIVE ) CHK_ERRORR( relSides[1]->set_relation_side( &ent2, 1, &set1 ) );
// if the left side is a 'both'-type association, set the contents of set1
// to point to ent2 as well
if( entOrSet[0] == iRel_BOTH ) CHK_ERRORR( populate_recursive( 0, set1, ent2 ) );
RETURNR( iBase_SUCCESS );
}
int AssocPair::set_relation | ( | iBase_EntityHandle | ent1, |
iBase_EntitySetHandle | set2 | ||
) |
Definition at line 125 of file AssocPair.cpp.
References CHK_ERRORR, entOrSet, ERRORR, iBase_FAILURE, iBase_SUCCESS, iRel_ACTIVE, iRel_BOTH, iRel_ENTITY, iRel_SET, populate_recursive(), relSides, relStatus, and RETURNR.
{
if( entOrSet[0] == iRel_SET || entOrSet[1] == iRel_ENTITY ) ERRORR( iBase_FAILURE, "Invalid relation type" );
// check that if we're passing in an ent for a 'both'-type
// assoc, there's already a set associated to the other ent
iBase_EntityHandle tmp_ent;
if( entOrSet[0] == iRel_BOTH && relSides[1]->get_relation_side( &set2, 1, &tmp_ent ) != iBase_SUCCESS )
ERRORR( iBase_FAILURE, "Couldn't find associated set on left side" );
// set ent1 => set2
if( relStatus[0] == iRel_ACTIVE ) CHK_ERRORR( relSides[0]->set_relation_side( &ent1, 1, &set2 ) );
// set ent1 <= set2
if( relStatus[1] == iRel_ACTIVE ) CHK_ERRORR( relSides[1]->set_relation_side( &set2, 1, &ent1 ) );
// if the right side is a 'both'-type association, set the contents of set2
// to point to ent1 as well
if( entOrSet[1] == iRel_BOTH ) CHK_ERRORR( populate_recursive( 1, set2, ent1 ) );
RETURNR( iBase_SUCCESS );
}
int AssocPair::set_relation | ( | iBase_EntitySetHandle | set1, |
iBase_EntitySetHandle | set2 | ||
) |
Definition at line 171 of file AssocPair.cpp.
References CHK_ERRORR, entOrSet, ERRORR, iBase_FAILURE, iBase_SUCCESS, iRel_ACTIVE, iRel_BOTH, iRel_ENTITY, populate_recursive(), relSides, relStatus, and RETURNR.
{
if( entOrSet[0] == iRel_ENTITY || entOrSet[1] == iRel_ENTITY ) ERRORR( iBase_FAILURE, "Invalid relation type" );
// set set1 => set2
if( relStatus[0] == iRel_ACTIVE ) CHK_ERRORR( relSides[0]->set_relation_side( &set1, 1, &set2 ) );
// set set1 <= set2
if( relStatus[1] == iRel_ACTIVE ) CHK_ERRORR( relSides[1]->set_relation_side( &set2, 1, &set1 ) );
// if either side is a 'both'-type association, set the contents of set1
// to point to set2 as well (and/or vice-versa)
if( entOrSet[0] == iRel_BOTH ) CHK_ERRORR( populate_recursive( 0, set1, set2 ) );
if( entOrSet[1] == iRel_BOTH ) CHK_ERRORR( populate_recursive( 1, set2, set1 ) );
RETURNR( iBase_SUCCESS );
}
int AssocPair::unpopulate_recursive | ( | int | iface_no, |
iBase_EntitySetHandle | set | ||
) | [private] |
Definition at line 533 of file AssocPair.cpp.
References CHK_ERRORR, entities, get_entities(), iBase_SUCCESS, relSides, and RETURNR.
Referenced by change_type().
{
iBase_EntityHandle* entities = NULL;
int entities_alloc = 0, entities_size;
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 ) );
free( entities );
RETURNR( iBase_SUCCESS );
}
friend class Lasso [friend] |
Definition at line 14 of file AssocPair.hpp.
int AssocPair::currId = 0 [static, private] |
Definition at line 98 of file AssocPair.hpp.
Referenced by AssocPair().
iRel_RelationType AssocPair::entOrSet[2] [private] |
Definition at line 94 of file AssocPair.hpp.
Referenced by AssocPair(), change_status(), change_type(), get_relation(), relation_type(), rmv_relation(), and set_relation().
iRel_Instance AssocPair::instance [private] |
Definition at line 92 of file AssocPair.hpp.
Referenced by AssocPair(), contains(), and equivalent().
int AssocPair::pairId [private] |
Definition at line 96 of file AssocPair.hpp.
Referenced by AssocPair().
AssocPairSide* AssocPair::relSides[2] [private] |
Definition at line 93 of file AssocPair.hpp.
Referenced by AssocPair(), change_status(), change_type(), contains(), equivalent(), get_all_entities(), get_all_sets(), get_dims(), get_entities(), get_ents_dims(), get_gids(), get_relation(), iface_instance(), iface_type(), populate_recursive(), rmv_relation(), set_relation(), unpopulate_recursive(), and ~AssocPair().
iRel_RelationStatus AssocPair::relStatus[2] [private] |
Definition at line 95 of file AssocPair.hpp.
Referenced by AssocPair(), change_status(), change_type(), get_relation(), relation_status(), rmv_relation(), and set_relation().