source: git/factory/include/factory/templates/ftmpl_list.h @ b1d287

spielwiese
Last change on this file since b1d287 was 362fc67, checked in by Martin Lee <martinlee84@…>, 12 years ago
chg: remove $Id$
  • Property mode set to 100644
File size: 2.9 KB
Line 
1/* emacs edit mode for this file is -*- C++ -*- */
2
3#ifndef INCL_LIST_H
4#define INCL_LIST_H
5
6// #include <factory/factoryconf.h>
7
8#ifndef NOSTREAMIO
9#ifdef HAVE_IOSTREAM
10#include <iostream>
11#define OSTREAM std::ostream
12#elif defined(HAVE_IOSTREAM_H)
13#include <iostream.h>
14#define OSTREAM ostream
15#endif
16#endif /* NOSTREAMIO */
17
18template <class T>
19class ListIterator;
20
21template <class T>
22class List;
23
24#ifndef NOSTREAMIO
25template <class T>
26OSTREAM& operator<< ( OSTREAM &, const List<T> &);
27#endif
28
29template <class T>
30class ListItem
31{
32private:
33    ListItem * next;
34    ListItem * prev;
35    T * item;
36public:
37    ListItem( const ListItem<T>& );
38    ListItem( const T&, ListItem<T>*, ListItem<T>* );
39    ListItem( T* , ListItem<T>* , ListItem<T>* );
40    ~ListItem();
41    ListItem<T>& operator= ( const ListItem<T>& );
42    ListItem<T>* getNext();
43    ListItem<T>* getPrev();
44    T& getItem();
45#ifndef NOSTREAMIO
46    void print ( OSTREAM& );
47#endif /* NOSTREAMIO */
48    friend class ListIterator<T>;
49    friend class List<T>;
50};
51
52template <class T>
53class List
54{
55private:
56    ListItem<T> *first;
57    ListItem<T> *last;
58    int _length;
59public:
60    List();
61    List( const List<T>& );
62    List( const T& );
63    ~List();
64    List<T>& operator= ( const List<T>& );
65    void insert ( const T& );
66    void insert ( const T&, int (*cmpf)( const T&, const T& ) );
67    void insert ( const T&, int (*cmpf)( const T&, const T& ), void (*insf)( T&, const T& ) );
68    void append ( const T& );
69    int isEmpty() const;
70    int length() const;
71    T getFirst() const;
72    void removeFirst();
73    T getLast() const;
74    void removeLast();
75    void sort ( int (*) ( const T&, const T& ) );
76#ifndef NOSTREAMIO
77    void print ( OSTREAM & ) const;
78    friend OSTREAM& operator<< <T>( OSTREAM & os, const List<T> & l );
79#endif /* NOSTREAMIO */
80    friend class ListIterator<T>;
81};
82
83#ifndef NOSTREAMIO
84template <class T>
85OSTREAM& operator<< ( OSTREAM & os, const List<T> & l );
86#endif /* NOSTREAMIO */
87
88template <class T>
89class ListIterator {
90private:
91    List<T> *theList;
92    ListItem<T> *current;
93public:
94    ListIterator();
95    ListIterator( const ListIterator<T>& );
96    ListIterator( const List<T>& );
97    ~ListIterator();
98    ListIterator<T>& operator = ( const ListIterator<T>& );
99    ListIterator<T>& operator = ( const List<T>& );
100    T& getItem() const;
101    int hasItem();
102    void operator++();
103    void operator--();
104    void operator++( int );
105    void operator--( int );
106    void firstItem();
107    void lastItem();
108    void insert( const T& );
109    void append( const T& );
110    void remove( int moveright );
111};
112
113template <class T>
114List<T> Union ( const List<T>&, const List<T>& );
115
116template <class T>
117List<T> Difference ( const List<T>&, const List<T>& );
118
119template <class T>
120List<T> Union ( const List<T>&, const List<T>&, int (*cmpf)( const T&, const T& ), void (*insf)( T&, const T& ) );
121
122template <class T>
123T prod ( const List<T>& );
124
125template <class T>
126bool find (const List<T>&, const T& t);
127
128#endif /* ! INCL_LIST_H */
Note: See TracBrowser for help on using the repository browser.