// ННГУ, ВМК, Курс "Методы программирования-2", С++, ООП // // datlist.h - Copyright (c) Гергель В.П. 09.08.2000 // // Cписки #ifndef __DATLIST_H #define __DATLIST_H #include "datacom.h" #include "datlink.h" #define ListOK 0 // ошибок нет #define ListEmpty -101 // список пуст #define ListNoMem -102 // нет памяти #define ListNoPos -103 // ошибочное положение // текущего указателя enum TLinkPos { FIRST, CURRENT, LAST }; class TDatList : public TDataCom { protected: PTDatLink pFirst; // первое звено PTDatLink pLast; // последнее звено PTDatLink pCurrLink; // текущее звено PTDatLink pPrevLink; // звено перед текущим PTDatLink pStop; // значение указателя, означающего конец списка (=NULL) int CurrPos; // номер текущего знена (нумерация от 0) int ListLen; // количество звеньев в списке protected: // методы PTDatLink GetLink ( PTDatValue pVal=NULL, PTDatLink pLink=NULL ); void DelLink ( PTDatLink pLink ); // удаление звена public: TDatList(); ~TDatList() { DelList(); } // доступ PTDatValue GetDatValue ( TLinkPos mode = CURRENT ) const; // значение virtual int IsEmpty() const { return pFirst==pStop; } // список пуст ? int GetListLength() const { return ListLen; } // к-во звеньев // навигация int SetCurrentPos ( int pos ); // установить текущее звено int GetCurrentPos ( void ) const; // получить номер текущего звена virtual int Reset ( void ); // установить на начало списка virtual int IsListEnded ( void ) const; // список завершен ? int GoNext ( void ); // сдвиг вправо текущего звена // (=1 после применения GoNext для последнего звена списка) // вставка звеньев virtual void InsFirst ( PTDatValue pVal=NULL ); // вставить перед первым virtual void InsLast ( PTDatValue pVal=NULL ); // вставить последним virtual void InsCurrent( PTDatValue pVal=NULL ); // вставить перед текущим // удаление звеньев virtual void DelFirst ( void ); // удалить первое звено virtual void DelCurrent( void ); // удалить текущее звено virtual void DelList ( void ); // удалить весь список }; typedef TDatList *PTDatList; #endif