bool FrQueue::remove(const FrObject *item) { FrList *prev = 0 ; FrList *curr = qhead ; while (curr && curr->first() != item) { prev = curr ; curr = curr->rest() ; } if (curr) { if (prev) prev->replacd(curr->rest()) ; else qhead = curr->rest() ; curr->replaca(0) ; curr->replacd(0) ; delete curr ; qlength-- ; return true ; } else return false ; }
void FrQueue::addFront(const FrObject *item, bool do_copy) { FrList *newitem = new FrList ; newitem->replaca((item && do_copy) ? item->deepcopy() : item) ; newitem->replacd(qhead) ; if (qhead) qhead = newitem ; else qhead = qtail = newitem ; qlength++ ; }