linkedlistwithtailiterext.h

来自「用于词法分析的词法分析器」· C头文件 代码 · 共 99 行

H
99
字号
/*  $Id: LinkedListWithTailIterExt.h,v 1.2 1997/02/02 01:31:05 matt Exp $  Extended linked list with tail iterator with insert/remove.    (c) Aug 95 Matt Phillips.  */#ifndef _LLISTTXI_H#define _LLISTTXI_H#include "LinkedListWithTail.h"// NOTE: this class cannot inherit from the LinkedListExtIter class// because then it would not have access to the LinkedListWithTail// class' tail member via the LinkedListWithTailIter class.template <class T, class E>class LinkedListWithTailImpIterExt : public LinkedListWithTailImpIter<T, E>{public:     LinkedListWithTailImpIterExt (LinkedListWithTailImp<T, E> &l) :     prev (0), LinkedListWithTailImpIter<T, E> (l) {}     int hasPrev () const {return prev != 0;}  T &refPrev () const  {    CHECK (prev, "null prev reference");    return prev->ref ();  }  virtual void reset ()  {    LinkedListWithTailImpIter<T, E>::reset ();    prev = 0;  }     virtual void operator ++ (int)  {    prev = i;    LinkedListWithTailImpIter<T, E>::operator ++ (0);  }  // insert t before current item  void insert (T &t);  // remove current item (current item = next afterwards)  void remove ();   protected:  E *prev;};template <class T, class E>void LinkedListWithTailImpIterExt<T, E>::insert (T &t){  ITER_CURRENT (prev);     E *e = new E (t, i);     if (prev)  {    prev->next = e;    prev = e;  } else    setHead (e);     incNItems ();}template <class T, class E>void LinkedListWithTailImpIterExt<T, E>::remove (){  ITER_CURRENT (i);		// check for valid iterator  E *next = i->next;     if (prev)    prev->next = i->next;  else    setHead (i->next);     delete i;  i = next;     decNItems ();  if (i->next == 0) setTail (prev);}#define TypeDLinkedListWithTailIterExt(T) LinkedListWithTailImpIterExt<T, DLinkedItem<T> >#define TypeILinkedListWithTailIterExt(T) LinkedListWithTailImpIterExt<T, ILinkedItem<T, 0> >#define TypeIOLinkedListWithTailIterExt(T) LinkedListWithTailImpIterExt<T, ILinkedItem<T, 1> >#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?