22 #ifndef ELM_GENSTRUCT_DLLIST_H
23 #define ELM_GENSTRUCT_DLLIST_H
25 #include <elm/util/Equiv.h>
26 #include <elm/PreIterator.h>
27 #include <elm/inhstruct/DLList.h>
29 namespace elm {
namespace genstruct {
32 template <
class T,
class E = Equiv<T> >
39 inline DLNode(
const T
value);
40 inline const T&
value(
void)
const;
41 inline T&
value(
void) {
return val; }
62 inline int count(
void)
const;
64 inline bool isEmpty(
void)
const;
65 inline operator bool(
void)
const {
return !
isEmpty(); }
76 inline bool ended(
void)
const {
return this->
cur->atEnd(); }
77 inline const T&
item(
void)
const {
return this->
cur->value(); }
78 inline void next(
void) { this->
cur = (DLNode *)this->
cur->next(); }
82 inline void clear(
void);
84 template <
template <
class _>
class C>
inline void addAll(
const C<T>& items);
85 inline void remove(
const T&
value);
86 template <
template <
class _>
class C>
inline void removeAll(
const C<T>& items);
87 void remove(
const AbstractIterator &iter);
90 inline const T&
first(
void)
const;
91 inline const T&
last(
void)
const;
94 for(; iter; iter++)
if(E::equals(item, iter))
break;
98 for(iter++; iter; iter++)
if(E::equals(item, iter))
break;
108 { ASSERTP(!pos.
cur->atEnd(),
"insert after end");
109 pos.
cur->insertAfter(
new DLNode(item)); }
111 { ASSERTP(!pos.
cur->atBegin(),
"insert before begin");
112 pos.
cur->insertBefore(
new DLNode(item)); }
114 { ASSERTP(!pos.
cur->atBegin() && !pos.
cur->atEnd(),
"bad position");
115 pos.
cur->val = item; }
127 inline bool ended(
void)
const {
return this->
cur->atBegin(); }
128 inline const T&
item(
void)
const {
return this->
cur->value(); }
129 inline void next(
void) { this->
cur = (DLNode *)this->
cur->previous(); }
141 template <
class T,
class E>
142 DLList<T, E>::DLNode::DLNode(
const T
value): val(value) { }
143 template <
class T,
class E>
144 const T& DLList<T, E>::DLNode::value(
void)
const {
return val; }
151 {
return ((DLNode *)list.first())->
value(); }
154 {
return ((DLNode *)list.last())->
value(); }
157 {
return list.isEmpty(); }
163 { list.addFirst(
new DLNode(value)); }
166 { list.addLast(
new DLNode(value)); }
169 { list.removeFirst(); }
172 { list.removeLast(); }
175 for(DLNode *cur = (DLNode *)list.first(); !cur->atEnd(); cur = (DLNode *)cur->next())
176 if(E::equals(cur->value(),
value)) {
184 for(DLNode *cur = (DLNode *)list.first(); !cur->atEnd(); cur = (DLNode *)cur->next())
185 if(E::equals(cur->value(),
value))
191 while(!list.isEmpty()) {
192 DLNode *node = (DLNode *)list.first();
198 template <
class T,
class E>
template <
template <
class _>
class C>
200 for(
typename C<T>::Iterator iter(items); iter; iter++)
204 template <
class T,
class E>
template <
template <
class _>
class C>
206 for(
typename C<T>::Iterator iter(items); iter; iter++)
210 template <
class T,
class E>
212 { iter.
cur.remove(); }
217 #endif // ELM_GENSTRUCT_DLLIST_H
void next(void)
Definition: DLList.h:78
void set(const AbstractIterator &pos, const T &item)
Definition: DLList.h:113
const inhstruct::DLList * list
Definition: DLList.h:57
const T & item(void) const
Definition: DLList.h:128
BackIterator(const DLList &_list)
Definition: DLList.h:120
Definition: PreIterator.h:29
Iterator & operator=(const AbstractIterator &iter)
Definition: DLList.h:73
AbstractIterator & operator=(const AbstractIterator &iter)
Definition: DLList.h:54
void next(void)
Definition: DLList.h:129
void remove(const T &value)
Definition: DLList.h:174
Iterator find(const T &item, const Iterator &iter) const
Definition: DLList.h:97
Iterator(const AbstractIterator &iter)
Definition: DLList.h:71
void removeAll(const C< T > &items)
Definition: DLList.h:205
AbstractIterator(const DLList< T > &_list, DLNode *_cur)
Definition: DLList.h:50
void addLast(const T &value)
Definition: DLList.h:165
void removeFirst(void)
Definition: DLList.h:168
bool ended(void) const
Definition: DLList.h:127
DLNode * cur
Definition: DLList.h:58
Iterator(const DLList &_list)
Definition: DLList.h:69
const T & item(void) const
Definition: DLList.h:77
BackIterator(const AbstractIterator &iter)
Definition: DLList.h:122
value_t value(CString name, int value)
Definition: rtti.h:40
void put(const T &item)
Definition: DLList.h:135
void addFirst(const T &value)
Definition: DLList.h:162
const T & last(void) const
Definition: DLList.h:153
const T & first(void) const
Definition: DLList.h:150
void removeLast(void)
Definition: DLList.h:171
int count(void) const
Definition: DLList.h:159
AbstractIterator(const AbstractIterator &iter)
Definition: DLList.h:52
void addAfter(const AbstractIterator &pos, const T &item)
Definition: DLList.h:107
~DLList(void)
Definition: DLList.h:148
void clear(T *target, int size)
Definition: array.h:65
bool contains(const T &value) const
Definition: DLList.h:183
void addAll(const C< T > &items)
Definition: DLList.h:199
void add(const T &item)
Definition: DLList.h:83
void clear(void)
Definition: DLList.h:190
bool ended(void) const
Definition: DLList.h:76
bool isEmpty(void) const
Definition: DLList.h:156
BackIterator & operator=(const BackIterator &iter)
Definition: DLList.h:124
void addBefore(const AbstractIterator &pos, const T &item)
Definition: DLList.h:110
void reset(void)
Definition: DLList.h:136
Iterator find(const T &item) const
Definition: DLList.h:92
const T & head(void) const
Definition: DLList.h:133