Bridges-C++  3.4.4
Bridges(C++ API)
CircDLelement.h
Go to the documentation of this file.
1 #ifndef CIRC_DL_ELEMENT_H
2 
3 #define CIRC_DL_ELEMENT_H
4 #include "DLelement.h"
5 
6 namespace bridges {
7  namespace datastructure {
35  template <typename E>
36  class CircDLelement : public DLelement<E> {
37  public:
42  CircDLelement() : DLelement<E> (this, this, E()) {
43  }
44 
51  CircDLelement (E e, string label)
52  : DLelement<E>(this, this, e, label) {
53  }
54 
67  : DLelement<E>(this, this) {
68  }
69 
83  : DLelement<E>(this, this, e) {
84  }
85 
91  virtual const string getDStype() const override {
92  return "CircularDoublyLinkedList";
93  }
94 
99  const CircDLelement<E> *getNext() const override {
100  return static_cast<const CircDLelement*>(SLelement<E>::getNext());
101  }
102 
107  virtual CircDLelement<E> *getNext() override {
108  return static_cast<CircDLelement*> (SLelement<E>::getNext());
109  }
110 
119  }
120 
125  CircDLelement<E> *getPrev() override {
126  return static_cast<CircDLelement*>(DLelement<E>::getPrev());
127  }
128 
133  const CircDLelement<E> *getPrev() const override {
134  return static_cast<const CircDLelement*>(DLelement<E>::getPrev());
135  }
136 
141  void setPrev(CircDLelement<E> *prev) {
142  DLelement<E>::setPrev(prev);
143  }
144  public:
145 
150  typename bridges::datastructure::CircDLelement<E> *start, *last;
151 
152  public:
154  : start(s), last(s) {
155 
156  }
157 
158  class iterator {
159 
161 
162  public:
163 
165  : current(c)
166  {}
167 
168  bool operator!= (const iterator& it) const {
169  return this->current != it.current;
170  }
171 
172  E const & operator* () const {
173  return current->getValue();
174  }
175 
176  E & operator* () {
177  return current->getValue();
178  }
179 
181  current = current->getNext();
182  return *this;
183  }
185  iterator clone(*this);
186  current = current->getNext();
187  return clone;
188  }
190  current = current->getPrev();
191  return *this;
192  }
194  iterator clone(*this);
195  current = current->getPrev();
196  return clone;
197  }
198  };
199 
200  // forward iteration
202  return iterator(start);
203  }
204 
206  return iterator(last);
207  }
208 
209  // reverse iteration
211  return iterator(last);
212  }
214  return iterator(start);
215  }
216  };
217 
221  typename bridges::datastructure::CircDLelement<E> const *start;
222 
223  public:
225  }
226  class iterator {
227 
228  typename bridges::datastructure::CircDLelement< E > const * current;
229  public:
231  : current(c)
232  {}
233 
234  bool operator!=(const iterator& it) const {
235  return this->current != it.current;
236  }
237 
238  E const & operator*() const {
239  return current->getValue();
240  }
241 
243  current = current->getNext();
244  return *this;
245  }
247  current = current->getPrev();
248  return *this;
249  }
251  iterator clone(*this);
252  current = current->getPrev();
253  return clone;
254  }
255  };
256 
257  // forward iteration
259  return iterator(start);
260  }
262  return iterator(start);
263  }
264  // reverse iteration
266  return iterator(start->getPrev());
267  }
269  return iterator(start->getPrev());
270  }
271  };
272  }; // end CircDLelement
273  template <class E>
275  template <class E>
277 
278  }
279 } //namespace bridges
280 #endif
bool operator!=(const iterator &it) const
Definition: CircDLelement.h:234
iterator(typename bridges::datastructure::CircDLelement< E > const *c)
Definition: CircDLelement.h:230
these are helper classes for CircDLelement for easy iteration in a range for loop....
Definition: CircDLelement.h:220
CircDLelement_constlisthelper(typename bridges::datastructure::CircDLelement< E > const *s)
Definition: CircDLelement.h:224
bool operator!=(const iterator &it) const
Definition: CircDLelement.h:168
E const & operator*() const
Definition: CircDLelement.h:172
iterator(typename bridges::datastructure::CircDLelement< E > *c)
Definition: CircDLelement.h:164
these are helper classes for CircDLelement for easy iteration in a range for loop....
Definition: CircDLelement.h:149
iterator rend()
Definition: CircDLelement.h:213
CircDLelement_listhelper(typename bridges::datastructure::CircDLelement< E > *s)
Definition: CircDLelement.h:153
iterator begin()
Definition: CircDLelement.h:201
iterator rbegin()
Definition: CircDLelement.h:210
This class can be used to instantiate Circular Doubly Linked List Elements.
Definition: CircDLelement.h:36
const CircDLelement< E > * getNext() const override
Definition: CircDLelement.h:99
CircDLelement< E > * getPrev() override
Definition: CircDLelement.h:125
CircDLelement(E e, CircDLelement< E > next, CircDLelement< E > prev)
Definition: CircDLelement.h:82
virtual CircDLelement< E > * getNext() override
Definition: CircDLelement.h:107
const CircDLelement< E > * getPrev() const override
Definition: CircDLelement.h:133
CircDLelement(E e, string label)
Definition: CircDLelement.h:51
CircDLelement(CircDLelement< E > next, CircDLelement< E > prev)
Definition: CircDLelement.h:66
void setNext(CircDLelement< E > *next)
Definition: CircDLelement.h:117
void setPrev(CircDLelement< E > *prev)
Definition: CircDLelement.h:141
CircDLelement()
Definition: CircDLelement.h:42
virtual const string getDStype() const override
Definition: CircDLelement.h:91
The doubly linked list element, derived from SLelement.
Definition: DLelement.h:24
virtual DLelement * getPrev()
Definition: DLelement.h:102
virtual void setPrev(DLelement *p)
Definition: DLelement.h:118
void setNext(DLelement *n)
Definition: DLelement.h:89
E const & getValue() const
Gets the object held in the generic object E.
Definition: Element.h:207
virtual SLelement * getNext()
Returns the next element in the list.
Definition: SLelement.h:74
SLelement * next
Definition: SLelement.h:29
typename CircDLelement< E >::CircDLelement_constlisthelper CircDLelement_ConstList
Definition: CircDLelement.h:276
typename CircDLelement< E >::CircDLelement_listhelper CircDLelement_List
Definition: CircDLelement.h:274
these methods convert byte arrays in to base64 codes and are used in BRIDGES to represent the color a...
Definition: alltypes.h:4