#include "mylinks.h" // Implementation follows void mylinkage::set_prev(mylinkage * L) { prev = L; } void mylinkage::set_next(mylinkage* L) { next = L; } mylinkage * mylinkage::succ() { return next; } mylinkage * mylinkage::pred() { return prev; } mylink * Collection::out() { mylinkage * L; if (L=next) { next = L->succ(); next->set_prev(this); L->set_prev(NULL); L->set_next(NULL); } return (mylink*) L; } void Collection::out_of(mylink * g) { mylink * l1; l1 = out(); while (l1 != g) { l1->append(this); l1 = out(); } } void Collection::add_before(mylinkage* L,mylink* M) { M->set_next(L); L->pred()->set_next(M); M->set_prev(L->pred()); L->set_prev(M); } int Collection::empty(){return next==this;} mylinkage::mylinkage() { prev = NULL; next = NULL; } mylink* Collection::first() { if(this==next) return NULL; return (mylink*)next; } mylink* Collection::last() { if(this==next) return NULL; return (mylink*)prev; } Collection::Collection() { next = this; prev = this; } void Collection::append(mylink * l) { if(empty()) l->into(this); else { l->set_next(this); l->set_prev(last()); last()->set_next(l); prev = l; } } void mylink::into(Collection * Q) { next = Q->succ(); Q->succ()->set_prev(this); Q->set_next(this); prev = Q; } void mylink::append(Collection * Q) { if(Q->empty()) into(Q); else { next = Q; Q->pred()->set_next(this); prev = Q->pred(); Q->set_prev(this); } } mylink* mylink::out() { pred()->set_next(succ()); succ()->set_prev(pred()); prev = NULL; next = NULL; return this; }