cgma
|
#include <TDUniqueId.hpp>
Public Member Functions | |
TDUniqueId (ToolDataUser *owner, const int id=0) | |
virtual | ~TDUniqueId () |
int | unique_id () |
void | unique_id (const int id) |
ToolDataUser * | owner_entity () |
void | owner_entity (ToolDataUser *owner) |
SetDynamicMemoryAllocation (memoryManager) static void set_memory_allocation_increment(int increment=0) | |
Static Public Member Functions | |
static int | generate_unique_id () |
static void | clear_copy_map () |
static int | is_unique_id (const ToolData *td) |
static int | get_unique_id (ToolDataUser *owner, const CubitBoolean create_new=CUBIT_TRUE) |
static int | get_unique_id_for_copy (int original_id) |
static ToolDataUser * | find_td_unique_id (const int temp_id, const RefEntity *related_entity=NULL) |
static int | find_td_unique_id (const int temp_id, DLIList< ToolDataUser * > &td_list, const RefEntity *related_entity=NULL) |
static void | destroy_memory () |
Static Private Member Functions | |
static int | initialize () |
static TDUIDList & | unique_id_list () |
Private Attributes | |
int | uniqueId |
ToolDataUser * | ownerEntity |
Static Private Attributes | |
static MemoryManager | memoryManager |
static TDUIDList | uniqueIdList |
static COPYUIDMap | mapForCopying |
Definition at line 36 of file TDUniqueId.hpp.
TDUniqueId::TDUniqueId | ( | ToolDataUser * | owner, |
const int | id = 0 |
||
) |
Definition at line 56 of file TDUniqueId.cpp.
{ ownerEntity = owner; uniqueId = id == 0 ? generate_unique_id() : id; TDUIDList::value_type this_pair(uniqueId, this); unique_id_list().insert(this_pair); ownerEntity->add_TD(this); // update the attribute if this is a CAU CubitAttribUser *cau = CAST_TO(owner, CubitAttribUser); if (cau) { CubitAttrib *attrib = cau->get_cubit_attrib(CA_UNIQUE_ID); attrib->has_updated(CUBIT_FALSE); attrib->update(); } }
TDUniqueId::~TDUniqueId | ( | ) | [virtual] |
Definition at line 81 of file TDUniqueId.cpp.
{ // remove this from the list //- With multimaps, keys do not have to be unique. With the erase(Key) function, //- the multimap code will remove all entries with that key from the multimap. //- The erase(iterator) function only removes the information at that iteration. //- Here, we search for the proper entry if there is more than one entry for a //- particular key. Increment the iterator and compare the element to 'this'. If //- it is a match, erase it by iterator. This will leave the other entry with //- the similar key in the list, which is necessary for save/restore, and remove the //- deactivated geometry due to the merge. std::pair<TDUIDList::iterator, TDUIDList::iterator> bounds_pair = unique_id_list().equal_range(uniqueId); TDUIDList::iterator it; for(it = bounds_pair.first; it != bounds_pair.second; ++it) { if(it->second == this) { unique_id_list().erase( it ); break; } } }
void TDUniqueId::clear_copy_map | ( | ) | [static] |
Definition at line 206 of file TDUniqueId.cpp.
{ //remove TDs off of entities COPYUIDMap::iterator iter = mapForCopying.begin(); for(; iter != mapForCopying.end(); iter++ ) { DLIList<ToolDataUser*> tool_data_users; int num_tool_datas = find_td_unique_id( (*iter).second, tool_data_users ); for( ; num_tool_datas--; ) { ToolDataUser *td_user = tool_data_users.get_and_step(); //make sure the pointer isn't null ToolData *tool_data = NULL; if(td_user) tool_data = td_user->remove_TD(TDUniqueId::is_unique_id); //delete the TDUniqueId as well if( tool_data ) delete tool_data; td_user = find_td_unique_id( (*iter).second ); } } //clear out the map if (mapForCopying.empty()) return; mapForCopying.clear(); }
static void TDUniqueId::destroy_memory | ( | ) | [inline, static] |
Definition at line 108 of file TDUniqueId.hpp.
ToolDataUser * TDUniqueId::find_td_unique_id | ( | const int | temp_id, |
const RefEntity * | related_entity = NULL |
||
) | [static] |
Definition at line 174 of file TDUniqueId.cpp.
{ //ToolDataUser *tdu = NULL; DLIList<ToolDataUser*> td_list; find_td_unique_id(temp_id, td_list, related_entity); if (0 == td_list.size()) return NULL; else { td_list.reset(); return td_list.get(); } }
int TDUniqueId::find_td_unique_id | ( | const int | temp_id, |
DLIList< ToolDataUser * > & | td_list, | ||
const RefEntity * | related_entity = NULL |
||
) | [static] |
Definition at line 119 of file TDUniqueId.cpp.
{ td_list.clean_out(); int unique_id = temp_id; //if we are not doing an undo and importing and merging within a file... if( !GSaveOpen::performingUndo && GeometryQueryTool::importingSolidModel && !GeometryQueryTool::mergeGloballyOnImport) { //see if the old id maps to a new id...if so, use the new id UIDMap old_uid_to_new_uid_map = CAUniqueId::get_old_to_new_uid_map(); UIDMap::iterator iter; iter = old_uid_to_new_uid_map.find( unique_id ); if( iter != old_uid_to_new_uid_map.end() ) unique_id = (*iter).second; } std::pair<TDUIDList::iterator, TDUIDList::iterator> bounds_pair = unique_id_list().equal_range(unique_id); TDUIDList::iterator it = bounds_pair.first, upper = bounds_pair.second; if(it == unique_id_list().end()) return 0; if ((*it).first == unique_id ) { // the lower bound key is equal to unique_id, so this id is in the list // look for duplicate id's, return one that's directly related // get all td's with that id for (; it != upper; it++) { bool related = true; ToolDataUser *temp_tdu = (*it).second->owner_entity(); if (NULL != related_entity) { TopologyEntity *topo_ent = CAST_TO(temp_tdu, TopologyEntity); RefEntity* temp_entity = const_cast<RefEntity*>(related_entity); if (!topo_ent || !topo_ent->is_directly_related(CAST_TO(temp_entity, TopologyEntity))) related = false; } if (related) td_list.append(temp_tdu); } } return td_list.size(); }
int TDUniqueId::generate_unique_id | ( | ) | [static] |
Definition at line 26 of file TDUniqueId.cpp.
{ int result; // initialize the random number generator, using time as a seed; do it here // instead of as a static variable of the class to add a little more randomness // to the seed (which uses the time) static RandomMersenne rng(time(NULL)); // generate random no. and check for duplicate; keep generating until // we find a non-duplicate; initialize found to true so that we can // test for duplicates in the loop below bool found = false; TDUIDList::iterator found_value; do { result = (int)(rng.genrand_int31()); found_value = uniqueIdList.lower_bound(result); if(found_value != uniqueIdList.end()) { found = ((*found_value).first == result); if (found) DIAGNOSTIC("Duplicate UID found - very unusual!\n"); } } while (found); return result; }
int TDUniqueId::get_unique_id | ( | ToolDataUser * | owner, |
const CubitBoolean | create_new = CUBIT_TRUE |
||
) | [static] |
Definition at line 107 of file TDUniqueId.cpp.
{ assert(owner != 0); TDUniqueId *uid = (TDUniqueId *) owner->get_TD(&TDUniqueId::is_unique_id); if (!uid && create_new == CUBIT_TRUE) { uid = new TDUniqueId(owner); } return (uid ? uid->unique_id() : 0); }
int TDUniqueId::get_unique_id_for_copy | ( | int | original_id | ) | [static] |
Definition at line 187 of file TDUniqueId.cpp.
{ //check in the map if the original is already there //if so, get the corresponding id in the map (this is the new //unique id on the copy) COPYUIDMap::iterator iter; iter = mapForCopying.find( original_id ); if( iter != mapForCopying.end() ) return (*iter).second; //else, a) generate another unique id b) put the original id in the map with //the new id directly across from it int new_uid = generate_unique_id(); COPYUIDMap::value_type tmp_pair( original_id, new_uid ); mapForCopying.insert( tmp_pair ); return new_uid; }
static int TDUniqueId::initialize | ( | ) | [static, private] |
int TDUniqueId::is_unique_id | ( | const ToolData * | td | ) | [static] |
Definition at line 76 of file TDUniqueId.cpp.
{ return (CAST_TO(const_cast<ToolData*>(td), TDUniqueId) != NULL); }
ToolDataUser* TDUniqueId::owner_entity | ( | ) | [inline] |
Definition at line 88 of file TDUniqueId.hpp.
{return ownerEntity;};
void TDUniqueId::owner_entity | ( | ToolDataUser * | owner | ) | [inline] |
Definition at line 89 of file TDUniqueId.hpp.
{ownerEntity = owner;};
TDUniqueId::SetDynamicMemoryAllocation | ( | memoryManager | ) | [inline, pure virtual] |
Definition at line 101 of file TDUniqueId.hpp.
{memoryManager.set_memory_allocation_increment(increment);}
int TDUniqueId::unique_id | ( | ) |
Definition at line 238 of file TDUniqueId.cpp.
{ //if we're doing a copy, don't use the Unique id on the original. //generate another one if( GeometryModifyTool::instance()->get_copy_entity() ) { int unique_id_for_copy = get_unique_id_for_copy( uniqueId ); return unique_id_for_copy; } else return uniqueId; }
void TDUniqueId::unique_id | ( | const int | id | ) | [inline] |
Definition at line 81 of file TDUniqueId.hpp.
TDUIDList & TDUniqueId::unique_id_list | ( | ) | [inline, static, private] |
Definition at line 114 of file TDUniqueId.hpp.
{ return uniqueIdList; }
COPYUIDMap TDUniqueId::mapForCopying [static, private] |
Definition at line 53 of file TDUniqueId.hpp.
MemoryManager TDUniqueId::memoryManager [static, private] |
Definition at line 47 of file TDUniqueId.hpp.
ToolDataUser* TDUniqueId::ownerEntity [private] |
Definition at line 43 of file TDUniqueId.hpp.
int TDUniqueId::uniqueId [private] |
Definition at line 40 of file TDUniqueId.hpp.
TDUIDList TDUniqueId::uniqueIdList [static, private] |
Definition at line 50 of file TDUniqueId.hpp.