//=========================================================================== //========= Base types for Lists ============================================ //=========================================================================== void BaseList::Insert(BaseLink* a) { if (pLast) { a->pNext = pLast->pNext; pLast = pLast->pNext = a; } else pLast = a->pNext = a; } //---------------------------------------------------------------------------- BaseListIterator BaseListIterator::operator++(int) { if(pCurr) { if(pCurr==pBaseList->pLast) pCurr=0; else pCurr=pCurr->pNext; } return *this; } //---------------------------------------------------------------------------- void BaseListIterator::GotoFirst() { if(pBaseList->pLast) pCurr=pBaseList->pLast->pNext; else pCurr=0; } //---------------------------------------------------------------------------- BaseListIterator::BaseListIterator(BaseList &s) { pBaseList = &s; GotoFirst(); } //---------------------------------------------------------------------------- BaseLink* BaseListIterator::operator()() { return pCurr; } //---------------------------------------------------------------------------- template T* ListIterator::operator->() { if(!pCurr) return 0; else return &(( (Link*)pCurr)->info); } //---------------------------------------------------------------------------- template T ListIterator::operator()() { return ((Link*) BaseListIterator::operator()() )->info; } //---------------------------------------------------------------------------- template ListIterator::operator T*() // type tranform to pointer on content { if (pCurr) return &( ((Link*)pCurr)->info); else return 0; }