Starshatter_Open
Open source Starshatter engine
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
List.h
Go to the documentation of this file.
1 /* Project FoundationEx
2  Destroyer Studios LLC
3  Copyright © 1997-2004. All Rights Reserved.
4 
5  SUBSYSTEM: FoundationEx
6  FILE: List.h
7  AUTHOR: John DiCamillo
8 
9 
10  OVERVIEW
11  ========
12  Declaration of the List class template
13 */
14 
15 #ifndef List_h
16 #define List_h
17 
18 // +-------------------------------------------------------------------+
19 
20 template <class T> class List;
21 template <class T> class ListIter;
22 
23 // +-------------------------------------------------------------------+
24 
25 template <class T> class List
26 {
27 public:
28  List() : items(0), extent(0), array(0) { }
29  List(const List<T>& l);
30  ~List() { delete [] array; }
31 
32  T*& operator[](int i);
33  T* operator[](int i) const;
34  T*& at(int i);
35  T* at(int i) const;
36 
37  void append(List<T>& list);
38  void append(const T* val);
39  void insert(const T* val, int index=0);
40  void insertSort(const T* val);
41 
42  T* first() const { return operator[](0); }
43  T* last() const { return operator[](items-1); }
44  T* remove(const T* val);
45  T* removeIndex(int index);
46 
47  void clear();
48  void destroy();
49 
50  int size() const { return items; }
51  bool isEmpty() const { return !items; }
52 
53  bool contains(const T* val) const;
54  int count(const T* val) const;
55  int index(const T* val) const;
56  T* find(const T* val) const;
57 
58  void sort();
59  void shuffle();
60 
61 private:
62  typedef T* PTR;
63  void qsort(T** a, int lo, int hi);
64  void resize(int newsize);
65  bool check(int& index) const;
66  void swap(T** a, int i, int j);
67 
68  int items;
69  int extent;
70  PTR* array;
71 
72  friend class ListIter<T>;
73 };
74 
75 // +-------------------------------------------------------------------+
76 
77 template <class T> class ListIter
78 {
79 public:
80  ListIter() : list(0), step(-1) { }
81  ListIter(const ListIter<T>& i) : list(i.list), step(i.step) { }
82  ListIter(List<T>& l) : list(&l), step(-1) { }
83 
84  int operator++() { return next() != 0; }
85  int operator--() { return prev() != 0; }
86  T* operator->() { return value(); }
87  T& operator* () { return *value(); }
88 
89  void reset() { step = -1; }
90  T* next();
91  T* prev();
92  T* value();
93  T* removeItem();
94 
95  void attach(List<T>& l);
96  List<T>& container();
97  int size();
98  int index() { return step; }
99 
100 private:
101  List<T>* list;
102  int step;
103 };
104 
105 #include "List.inl"
106 #endif List_h
107