next up previous contents
Next: The Graph Class: Up: The Bag Classes: Previous: The GnodePtrBagIter Class Implementation:

The GnodePtrBagManip Class Implementation:

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;
}



Jim Peterson
1999-05-17