/* $Id: slist.c,v 1.1 1996/10/10 10:01:22 roitzsch Exp $ (C)opyright 1996 by Konrad-Zuse-Center, Berlin All rights reserved. Part of the Kaskade distribution */ #include "slist.h" template SList:: SList() { noOfElements = 0; first = last = 0; } template void SList:: add(T* elem) { if (first != 0) last->next = elem; else first = elem; last = elem; elem->next = 0; ++noOfElements; } template void SList:: insert(T* elem) { if (first != 0) elem->next = first; else { elem->next = 0; last = elem; } first = elem; ++noOfElements; } template int SList:: insertAfter(T* elem, T* target) { T *lp; for (lp=first; lp; lp=lp->next) { if (lp->equal(target)) { if (lp->equal(last)) last = elem; elem->next = lp->next; lp->next = elem; ++noOfElements; return 1; } } return 0; } template int SList:: insertBefore (T* elem, T* target) { T *lp, *prev=0; for (lp=first; lp; lp=lp->next) { if (lp->equal(target)) { if (lp->equal(first)) { elem->next = first; first = elem; } else { elem->next = lp; prev->next = elem; } return 1; } ++noOfElements; prev = lp; } return 0; } template T* SList:: search(T* target) { T *lp; for (lp=first; lp; lp=lp->next) if (lp->equal(target)) return lp; return 0; } template T* SList:: inList(T* elem) { T *lp; for (lp=first; lp; lp=lp->next) if (lp->equal(elem)) return lp; return 0; } template void SList:: revert() { T* temp, *prev; last = first; prev = 0; while(first) { temp = first->next; first->next = prev; prev = first; first = temp; } first = prev; } //------------------------------------------------------------------------- template void SList:: deleteAll() { if (first) { T* elem; while (first) { elem = first; first = first->next; delete elem; } } noOfElements = 0; first = last = 0; } //------------------------------------------------------------------------- template int SList:: MemSpace() const { return noOfElements*sizeof(T) + 2*sizeof(T*) + sizeof(int); } //------------------------------------------------------------------------- template void SList:: print() { T* l; for (l=first; l; l=l->next) l->print(); }