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

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