source: git/factory/templates/ftmpl_list.h @ 1dc616

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