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

📄 _dl_itr.h

📁 EDA PCB 电路设计工具源码 c/c++ for Linux, Windows, Mac, 2008.8 最新
💻 H
字号:
/*! \file kbool/include/kbool/_dl_itr.h    \author Probably Klaas Holwerda     Copyright: 2001-2004 (C) Probably Klaas Holwerda    Licence: wxWidgets Licence    RCS-ID: $Id: _dl_itr.h,v 1.1 2005/05/24 19:13:35 titato Exp $*///! author="Klaas Holwerda"/* * Definitions of classes, for list implementation * template list and iterator for any list node type*/#ifndef _DL_Iter_H#define _DL_Iter_H#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)#pragma interface#endif#include <stdlib.h>#include "../include/booleng.h"#ifndef _STATUS_ENUM#define _STATUS_ENUM	//!<enum Error codes for List and iterator class	enum  Lerror  {   		  			NO_MES,              /*!<No Message will be generated */   					NO_LIST,             /*!<List is not attached to the iterator*/                  NO_LIST_OTHER,       /*!<no attached list on other iter*/                  AC_ITER_LIST_OTHER,  /*!<iter not allowed on other list  */                  SAME_LIST,           /*!<same list not allowed*/                  NOT_SAME_LIST,       /*!<must be same list*/                  ITER_GT_1,           /*!<more then one iteriter at root*/                  ITER_GT_0,           /*!<iter not allowed*/                  ITER_HITROOT,        /*!<iter at root*/                  NO_ITEM,             /*!<no item at current*/                  NO_NEXT,             /*!<no next after current*/                  NO_PREV,             /*!<no prev before current */                  EMPTY,               /*!<list is empty*/                  NOT_ALLOW,           /*!<not allowed*/                  ITER_NEG             /*!<to much iters deleted*/                 };#endif#define SWAP(x,y,t)((t)=(x),(x)=(y),(y)=(t))#define RT _list->_root#define HD _list->_root->_next#define TL _list->_root->_prev#define NB _list->_nbitemstemplate <class Dtype> class DL_List;template <class Dtype> class DL_Iter;template <class Dtype> class DL_SortIter;//!   Template class DL_Nodetemplate <class Dtype>  class DL_Node{	   friend class DL_List<Dtype>;   	friend class DL_Iter<Dtype>;   	friend class DL_SortIter<Dtype>;      //!Public members      public:			//!Template constructor no contents			//!Construct a node for a list object         DL_Node();         //!constructor with init of Dtype         DL_Node( Dtype n ); 		   //!Destructor         ~DL_Node();      //!Public members   	public:         //!data in node         Dtype _item;         //!pointer to next node         DL_Node* _next;         //!pointer to previous node         DL_Node* _prev;};//!Template class DL_Listtemplate <class Dtype> class DL_List{   	friend class DL_Iter<Dtype>;   	friend class DL_SortIter<Dtype>;      public:		   //!Constructor			//!Construct a list object			//!!tcarg class | Dtype | list object         DL_List();		   //!destructor         ~DL_List();		   //!Report off List Errors   		void Error(const char* function,Lerror a_error);		   //!Number of items in the list         int  count();		   //!Empty List?         bool empty();		   //!insert the object given at the end of the list, after tail         DL_Node<Dtype>* insend( Dtype n );		   //!insert the object given at the begin of the list, before head         DL_Node<Dtype>* insbegin( Dtype n );		   //!remove the object at the begin of the list (head)         void removehead();		   //! remove the object at the end of the list (tail)         void removetail();		   //!remove all objects from the list         void remove_all( bool deleteObject = false );		   //!Get the item at the head of the list         Dtype headitem();		   //!Get the item at the tail of the list         Dtype tailitem();         //! to move all objects in a list to this list.         void takeover(DL_List<Dtype>* otherlist);       public:		   //!the root node pointer of the list, the first and last node         //! in the list are connected to the root node. The root node is used         //! to detect the end / beginning of the list while traversing it.         DL_Node<Dtype>*  _root;		   //!the number of items in the list, if empty list it is 0         int _nbitems;         //!number of iterators on the list, Attaching or instantiating an iterator to list,         //! will increment this member, detaching and         //! destruction of iterator for a list will decrement this number         short int _iterlevel;};//!  Template class DL_Iter  for iterator on DL_Listtemplate <class Dtype>class DL_Iter{	public:	   //!Construct an iterator object for a given list of type Dtype		DL_Iter(DL_List<Dtype>* newlist);		//!Constructor of iterator for the same list as another iterator		DL_Iter(DL_Iter* otheriter);		//!Constructor without an attached list		DL_Iter();		//!destructor		~DL_Iter();	   //!Report off Iterator Errors		void 	  Error(const char* function,Lerror a_error);      //!This attaches an iterator to a list of a given type.		void    Attach(DL_List<Dtype>* newlist);      //!This detaches an iterator from a list      void    Detach();      //!execute given function for each item in the list/iterator		void 	  foreach_f(void (*fp) (Dtype n) );		//! list mutations	   //!insert after tail item		DL_Node<Dtype>*  insend(Dtype n);	   //!insert before head item		DL_Node<Dtype>* insbegin(Dtype n);	   //!insert before current iterator position        DL_Node<Dtype>* insbefore(Dtype n);	   //!insert after current iterator position		DL_Node<Dtype>* insafter(Dtype n);      //!to move all objects in a list to the list of the iterator.		void    takeover(DL_List<Dtype>* otherlist);      //!to move all objects in a list (using iterator of that list) to the list of the iterator		void    takeover(DL_Iter* otheriter);      //! to move maxcount objects in a list (using iterator of that list) to the list of the iterator      void    takeover(DL_Iter* otheriter, int maxcount);      //!remove object at current iterator position from the list.		void    remove();	   //!Remove head item		void    removehead();	   //!Remove tail item		void    removetail();	   //!Remove all items		void    remove_all();		/*		void 	  foreach_mf(void (Dtype::*mfp)() ); //call Dtype::mfp for each item */	   //!is list empty (contains items or not)?		bool  empty();	   //!is iterator at root node (begin or end)?		bool  hitroot();	   //!is iterator at head/first node?		bool  athead();	   //!is iterator at tail/last node?		bool  attail();      //!is given item member of the list		bool  has(Dtype otheritem);	   //!Number of items in the list		int count();		/* cursor movements */		//!go to last item,  if list is empty goto hite      void 	totail();		//!go to first item, if list is empty goto hite      void 	tohead();		//!set the iterator position to the root (empty dummy) object in the list.		void 	toroot();		//! set the iterator position to next object in the list ( can be the root also).		void    operator++      (void);      //!set iterator to next item (pre fix)		void    operator++      (int);		//!set the iterator position to previous object in the list ( can be the root also)(postfix).		void    operator--      (void);		//!set the iterator position to previous object in the list ( can be the root also)(pre fix).		void    operator--      (int);      //!set the iterator position n objects in the next direction ( can be the root also).		void    operator>>      (int);      //!set the iterator position n objects in the previous direction ( can be the root also).		void    operator<<      (int);      //!set the iterator position to next object in the list, if this would be the root object,      //!then set the iterator at the head object      void next_wrap();      //!set the iterator position to previous object in the list, if this would be the root object,		//!then set the iterator at the tail object      void prev_wrap();      //!move root in order to make the current node the tail      void reset_tail();      //!move root in order to make the current node the head      void reset_head();      //!put the iterator at the position of the given object in the list.		bool toitem(Dtype);      //!put the iterator at the same position as the given iterator in the list.		void toiter(DL_Iter* otheriter);      //!put the iterator at the position of the given node in the list.		bool tonode(DL_Node<Dtype>*);      //!iterate through all items of the list		bool iterate(void);		//!To get the item at the current iterator position		Dtype item();        //! get node at iterator        DL_Node<Dtype>* node();		//!sort list with mergesort		void mergesort(int (*fcmp) (Dtype, Dtype));		//!sort list with cocktailsort        /*!                 \return number of swaps done.          */		int cocktailsort(int (*)(Dtype,Dtype), bool (*)(Dtype,Dtype)=NULL);	protected:		//!sort list with mergesort		void mergesort_rec(int (*fcmp)(Dtype,Dtype), DL_Node<Dtype> *RT1,int n);		//!sort list with mergesort		void mergetwo(int (*fcmp)(Dtype,Dtype), DL_Node<Dtype> *RT1,DL_Node<Dtype> *RT2);		//!set the iterator position to next object in the list ( can be the root also).		void next();		//!set the iterator position to previous object in the list ( can be the root also).		void prev();      //!the list for this iterator		DL_List<Dtype> *_list;      //!the current position of the iterator		DL_Node<Dtype> *_current;};//!  template class DL_StackIter class for stack iterator on DL_Listtemplate <class Dtype>class DL_StackIter :protected DL_Iter<Dtype>{	public:	   //!Constructor of stack iterator for given list		DL_StackIter(DL_List<Dtype> *);	   //!Constructor of stack iterator no list attached		DL_StackIter();	   //!Destructor of stack iterator		~DL_StackIter();	   //!Remove all items from the stack		void remove_all();	   //!push given item on the stack		void push(Dtype n);      //!get last inserted item from stack		Dtype pop();   	//!is stack empty?		bool empty();      //!number of items on the stack		int count();};//!template class DL_SortItertemplate <class DType> class DL_SortIter :public DL_Iter<DType>{	public:	   //!Constructor of sort iterator for given list and sort function		DL_SortIter(DL_List<DType>* nw_list, int (*new_func)(DType ,DType ));	   //!Constructor of sort iterator with sort function and no list attached		DL_SortIter(int (*newfunc)(DType,DType));	   //!Destructor of sort iterator		~DL_SortIter();      //!insert item in sorted order		void insert (DType new_item);      /*override following functions to give an error */	   //!Not allowed		void   insend (bool n){sortitererror();};	   //!Not allowed		void   insbegin (bool n){sortitererror();};	   //!Not allowed      void   insbefore (bool n){sortitererror();};	   //!Not allowed		void   insafter (bool n){sortitererror();};	   //!Not allowed		void   takeover (DL_List<DType>*){sortitererror();};	   //!Not allowed		void   takeover (DL_Iter<DType>*){sortitererror();};	   //!Not allowed		void   takeover (DL_Iter<DType>* otheriter, int maxcount){sortitererror();};	   //!Not allowed      void   next_wrap() {sortitererror();};	   //!Not allowed      void   prev_wrap() {sortitererror();};	   //!Not allowed      void   reset_tail() {sortitererror();};	   //!Not allowed      void   reset_head() {sortitererror();};	private:	   //!Report off Iterator Errors      void sortitererror();		//!comparefunction used to insert items in sorted order		int  (*comparef)(DType, DType);};#include "../include/_dl_itr.cpp"#endif

⌨️ 快捷键说明

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