/* emacs edit mode for this file is -*- C++ -*- */ /* $Id: ftmpl_list.h,v 1.5 1997-12-08 18:49:16 schmidt Exp $ */ #ifndef INCL_LIST_H #define INCL_LIST_H #include #ifndef NOSTREAMIO #include #endif /* NOSTREAMIO */ template class ListIterator; template class List; template class ListItem { private: ListItem * next; ListItem * prev; T * item; public: ListItem( const ListItem& ); ListItem( const T&, ListItem*, ListItem* ); ListItem( T* , ListItem* , ListItem* ); ~ListItem(); ListItem& operator= ( const ListItem& ); ListItem* getNext(); ListItem* getPrev(); T& getItem(); #ifndef NOSTREAMIO void print ( ostream& ); #endif /* NOSTREAMIO */ friend class ListIterator; friend class List; }; template class List { private: ListItem *first; ListItem *last; int _length; public: List(); List( const List& ); List( const T& ); ~List(); List& operator= ( const List& ); void insert ( const T& ); void insert ( const T&, int (*cmpf)( const T&, const T& ) ); void insert ( const T&, int (*cmpf)( const T&, const T& ), void (*insf)( T&, const T& ) ); void append ( const T& ); int isEmpty() const; int length() const; T getFirst() const; void removeFirst(); T getLast() const; void removeLast(); void sort ( int (*) ( const T&, const T& ) ); #ifndef NOSTREAMIO void print ( ostream & ) const; #endif /* NOSTREAMIO */ friend class ListIterator; }; #ifndef NOSTREAMIO template ostream& operator<<( ostream & os, const List & l ); #endif /* NOSTREAMIO */ template class ListIterator { private: List *theList; ListItem *current; public: ListIterator(); ListIterator( const ListIterator& ); ListIterator( const List& ); ~ListIterator(); ListIterator& operator = ( const ListIterator& ); ListIterator& operator = ( const List& ); T& getItem() const; int hasItem(); void operator++(); void operator--(); void operator++( int ); void operator--( int ); void firstItem(); void lastItem(); void insert( const T& ); void append( const T& ); void remove( int moveright ); }; template List Union ( const List&, const List& ); template List Difference ( const List&, const List& ); template List Union ( const List&, const List&, int (*cmpf)( const T&, const T& ), void (*insf)( T&, const T& ) ); template T prod ( const List& ); #endif /* ! INCL_LIST_H */