NAMD
UniqueSetIter.h
Go to the documentation of this file.
1 
7 /*
8  UniqueSet template - (hashtable)
9 */
10 
11 #ifndef USITER_H
12 #define USITER_H
13 
14 #include "InfoStream.h"
15 #include "UniqueSetRaw.h"
16 #include "UniqueSet.h"
17 
18 
19 template <class T> class UniqueSetIter {
20 
21  private:
22 
23  UniqueSet<T> *us;
24  EntryGlob<T> *eg;
25  int index;
26 
27  public:
28 
29  UniqueSetIter(void) { us = NULL; eg = NULL; index = 0; }
30 
32  us = &us_param; eg = us_param.rep->globHead; index = 0;
33  }
34 
36  us = iter.us; eg = iter.eg; index = iter.index;
37  }
38 
40  us = iter.us; eg = iter.eg; index = iter.index; return (*this);
41  }
42 
43  ~UniqueSetIter(void) {}
44 
45  T *operator->(void) {
46  gotoUsed();
47  if (eg)
48  return (T *)&(eg->glob[index].obj);
49  else {
50  index = 0;
51  return(NULL);
52  }
53  }
54 
55  UniqueSetIter<T> begin(void) const {
56  UniqueSetIter<T> iter;
57  iter.us = us;
58  iter.index = 0;
59  iter.eg = us->rep->globHead;
60  iter.gotoUsed();
61  return(iter);
62  }
63 
64  UniqueSetIter<T> end(void) const {
65  UniqueSetIter<T> iter;
66  iter.us = us;
67  iter.index = 0;
68  iter.eg = NULL;
69  return(iter);
70  }
71 
72  int operator!= (const UniqueSetIter<T> &iter) const {
73  return (iter.index != index || iter.eg != eg);
74  }
75 
76  int operator== (const UniqueSetIter<T> &iter) const {
77  return (!operator!=(iter));
78  }
79 
81  index++;
82  gotoUsed();
83  return (*this);
84  }
85 
87  UniqueSetIter<T> tmp(*this);
88  index++;
89  gotoUsed();
90  return (tmp);
91  }
92 
93  T& operator* (void) {
94  gotoUsed();
95  return *((T *)&(eg->glob[index].obj));
96  }
97 
98  void status(void) {
99  std::cout << "Index is " << index << " addr is " << eg << std::endl;
100  }
101 
102  void gotoUsed(void) {
103  while (eg) {
104  for(;index < us->rep->globSize; index++) {
105  if (eg->glob[index].isUsed()) break;
106  }
107  if (index < us->rep->globSize) break;
108  index = 0;
109  eg = eg->next();
110  }
111  if (!eg) index = 0;
112  }
113 };
114 
115 #endif
int operator!=(const UniqueSetIter< T > &iter) const
Definition: UniqueSetIter.h:72
EntryGlob< Elem > * globHead
Definition: UniqueSetRaw.h:281
UniqueSetIter< T > operator++(void)
Definition: UniqueSetIter.h:80
UniqueSetIter< T > & operator=(const UniqueSetIter< T > &iter)
Definition: UniqueSetIter.h:39
UniqueSetIter(void)
Definition: UniqueSetIter.h:29
Elem obj
Definition: UniqueSetRaw.h:36
T * operator->(void)
Definition: UniqueSetIter.h:45
void status(void)
Definition: UniqueSetIter.h:98
UniqueSetIter< T > begin(void) const
Definition: UniqueSetIter.h:55
UniqueSetIter< T > operator++(int)
Definition: UniqueSetIter.h:86
UniqueSetIter(UniqueSet< T > &us_param)
Definition: UniqueSetIter.h:31
EntryGlob< Elem > * next(void)
Definition: UniqueSetRaw.h:95
void gotoUsed(void)
int isUsed(void) const
Definition: UniqueSetRaw.h:47
UniqueSetIter(const UniqueSetIter< T > &iter)
Definition: UniqueSetIter.h:35
UniqueSetIter< T > end(void) const
Definition: UniqueSetIter.h:64
int operator==(const UniqueSetIter< T > &iter) const
Definition: UniqueSetIter.h:76
~UniqueSetIter(void)
Definition: UniqueSetIter.h:43
T & operator*(void)
Definition: UniqueSetIter.h:93