⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 linkedlistiterext.h

📁 用于词法分析的词法分析器
💻 H
字号:
/*  $Id: LinkedListIterExt.h,v 1.2 1997/02/02 01:31:04 matt Exp $  Extended linked list iterator with insert/remove.    (c) Apr 95 Matt Phillips.  */#ifndef _LLISTXI_H#define _LLISTXI_H#include "LinkedList.h"// NOTE: this iterator can be used on any class derived from the// LinkedList class, but ensure first that it does not cause itegrity// violations.  Some alternative extended iterators exist for classes// where this iterator is not appropriate. template <class T, class E>class LinkedListImpIterExt : public LinkedListImpIter<T, E>{public:     LinkedListImpIterExt (LinkedListImp<T, E> &l) :     prev (0), LinkedListImpIter<T, E> (l) {}     int hasPrev () const {return prev != 0;}  T &refPrev () const  {CHECK (prev, "null prev reference"); return prev->ref ();}  virtual void reset () {LinkedListImpIter<T, E>::reset (); prev = 0;}  virtual void operator ++ (int)  {prev = i; LinkedListImpIter<T, E>::operator ++ (0);}  // insert t before current item  void insert (T &t)  {    ITER_CURRENT (prev);    E *e = new E (t, i);    if (prev)    {      prev->next = e;      prev = e;    } else      setHead (e);    incNItems ();  }  // remove current item (current item = next afterwards)  void remove ();   protected:  E *prev;};template <class T, class E>void LinkedListImpIterExt<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 ();}#define TypeDLinkedListIterExt(T)  LinkedListImpIterExt<T, DLinkedItem <T> >#define TypeILinkedListIterExt(T)  LinkedListImpIterExt<T, ILinkedItem <T, 0> >#define TypeIOLinkedListIterExt(T) LinkedListImpIterExt<T, ILinkedItem <T, 1> >#endif

⌨️ 快捷键说明

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