cgma
|
00001 #include "ToolDataUser.hpp" 00002 #include "TDUPtr.hpp" 00003 00004 00005 void TDPtr::remove_from_TD( TDUPtrListNode* ptr, ToolDataUser* tdu ) 00006 { 00007 if ( !tdu ) 00008 return; 00009 00010 TDPtr* td = (TDPtr*)(tdu->get_TD(&is_ptr)); 00011 assert(td != NULL); 00012 00013 if (ptr == td->listHead) { 00014 td->listHead = ptr->nextInTD; 00015 if (!td->listHead ) { 00016 delete tdu->remove_TD(&is_ptr); 00017 } 00018 } 00019 else { 00020 TDUPtrListNode* prev = td->listHead; 00021 while (prev->nextInTD != ptr) { 00022 prev = prev->nextInTD; 00023 assert(prev != NULL); 00024 } 00025 prev->nextInTD = ptr->nextInTD; 00026 } 00027 00028 ptr->nextInTD = 0; 00029 } 00030 00031 void TDPtr::add_to_TD( TDUPtrListNode* ptr, ToolDataUser* tdu ) 00032 { 00033 if( !tdu ) 00034 return; 00035 00036 TDPtr* td = (TDPtr*)(tdu->get_TD(&is_ptr)); 00037 if( ! td ) { 00038 tdu->add_TD(td = new TDPtr); 00039 } 00040 00041 assert(ptr && !ptr->nextInTD); 00042 ptr->nextInTD = td->listHead; 00043 td->listHead = ptr; 00044 } 00045 00046 TDPtr::~TDPtr() 00047 { 00048 while (listHead) { 00049 TDUPtrListNode* dead = listHead; 00050 listHead = dead->nextInTD; 00051 dead->nextInTD = 0; 00052 dead->nullify(); 00053 } 00054 } 00055 00056 00057