Finally, we implement the manipulator class needed for the node bag pointers.
GnodePtrBagManip::GnodePtrBagManip(const GnodePtrBagManip& T)
{
d_addrLink_p = T.d_addrLink_p;
L = T.L;
}
GnodePtrBagManip& GnodePtrBagManip::operator=(const GnodePtrBagManip& T)
{
if(&T!=this){
d_addrLink_p = T.d_addrLink_p;
L = T.L;
return(*this);
}
else{
return(*this);
}
}
GnodePtrBagManip::GnodePtrBagManip(GnodePtrBag* bag)
{
d_addrLink_p = &(bag->d_root_p);
L = *d_addrLink_p;
}
GnodePtrBagManip::~GnodePtrBagManip(){}
void GnodePtrBagManip::advance()
{
L = L->next();
}
void GnodePtrBagManip::remove()
{
GnodePtrBagLink *tmp = L;
L = L->next();
GnodePtrBagLink *Now = *d_addrLink_p;
GnodePtrBagLink *Prev;
if(tmp==Now){
*d_addrLink_p = (*d_addrLink_p)->next();
delete Now;
}
else{
Prev = Now;
Now = Now->next();
while(Now!=tmp) ){
Prev = Now;
Now = Now->next();
}
Prev->d_next_p = Now->next();
delete Now;
}
}
Gnode *GnodePtrBagManip::operator()() const
{
if( L!=NULL )
return L->d_pointer_p;
else
return NULL;
}
GnodePtrBagManip::operator const void *() const
{
if( L==NULL) return (const void *)0;
else return (const void *)1;
}