Bridges-C++ 3.5.0-dev2-1-ge3e57bf
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
6namespace 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
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
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
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
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
const CircDLelement< E > * getPrev() const override
Definition: CircDLelement.h:133
virtual CircDLelement< E > * getNext() override
Definition: CircDLelement.h:107
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