|
lasso
|
#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.
: instance(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] = status0; relStatus[1] = status1; }
Definition at line 62 of file AssocPair.cpp.
{
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 398 of file AssocPair.cpp.
{
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 355 of file AssocPair.cpp.
{
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 | ) |
| bool AssocPair::equivalent | ( | iBase_Instance | iface1, |
| iBase_Instance | iface2, | ||
| bool * | order_switched = NULL |
||
| ) |
Definition at line 500 of file AssocPair.cpp.
{
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 517 of file AssocPair.cpp.
| int AssocPair::get_all_entities | ( | int | iface_no, |
| int | dimension, | ||
| iBase_EntityHandle ** | entities, | ||
| int * | entities_alloc, | ||
| int * | entities_size | ||
| ) |
Definition at line 68 of file AssocPair.cpp.
{
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 76 of file AssocPair.cpp.
{
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 343 of file AssocPair.cpp.
| int AssocPair::get_dims | ( | int | iface_no, |
| iBase_EntitySetHandle * | sets, | ||
| int | num_sets, | ||
| int * | tag_values | ||
| ) |
Definition at line 349 of file AssocPair.cpp.
| 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 82 of file AssocPair.cpp.
{
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 91 of file AssocPair.cpp.
{
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 331 of file AssocPair.cpp.
| int AssocPair::get_gids | ( | int | iface_no, |
| iBase_EntitySetHandle * | sets, | ||
| int | num_sets, | ||
| int * | tag_values | ||
| ) |
Definition at line 337 of file AssocPair.cpp.
| int AssocPair::get_relation | ( | int | iface_no, |
| iBase_EntityHandle * | entities, | ||
| int | num_entities, | ||
| iBase_EntityHandle * | tag_values | ||
| ) |
Definition at line 205 of file AssocPair.cpp.
{
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 217 of file AssocPair.cpp.
{
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 228 of file AssocPair.cpp.
{
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 240 of file AssocPair.cpp.
{
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 251 of file AssocPair.cpp.
{
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 263 of file AssocPair.cpp.
{
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 109 of file AssocPair.hpp.
| iRel_IfaceType AssocPair::iface_type | ( | int | iface_no | ) | const [inline] |
Definition at line 114 of file AssocPair.hpp.
| int AssocPair::populate_recursive | ( | int | iface_no, |
| iBase_EntitySetHandle | set, | ||
| iBase_EntityHandle | related_ent | ||
| ) | [private] |
Definition at line 540 of file AssocPair.cpp.
{
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 558 of file AssocPair.cpp.
{
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] |
Definition at line 124 of file AssocPair.hpp.
{
return relStatus[iface_no];
}
| iRel_RelationType AssocPair::relation_type | ( | int | iface_no | ) | const [inline] |
Definition at line 119 of file AssocPair.hpp.
{
return entOrSet[iface_no];
}
| int AssocPair::rmv_relation | ( | int | iface_no, |
| iBase_EntityHandle * | entities, | ||
| int | num_entities | ||
| ) |
Definition at line 275 of file AssocPair.cpp.
{
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 304 of file AssocPair.cpp.
{
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 99 of file AssocPair.cpp.
{
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 153 of file AssocPair.cpp.
{
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.
{
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 181 of file AssocPair.cpp.
{
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 576 of file AssocPair.cpp.
{
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 106 of file AssocPair.hpp.
iRel_RelationType AssocPair::entOrSet[2] [private] |
Definition at line 102 of file AssocPair.hpp.
iRel_Instance AssocPair::instance [private] |
Definition at line 100 of file AssocPair.hpp.
int AssocPair::pairId [private] |
Definition at line 104 of file AssocPair.hpp.
AssocPairSide* AssocPair::relSides[2] [private] |
Definition at line 101 of file AssocPair.hpp.
iRel_RelationStatus AssocPair::relStatus[2] [private] |
Definition at line 103 of file AssocPair.hpp.