20 typedef void (*destructor)(T);
22 typedef struct ListNode_ {
24 struct ListNode_ *next;
27 destructor _destructor;
45 Vector() : _head(NULL),_destructor(NULL),_size(0) {
53 Vector(destructor dtor) : _head(NULL),_destructor(dtor),_size(0) {
72 this->_cur = other._cur;
75 bool operator == (
struct _Iterator &other) {
76 return other._cur == this->_cur;
78 bool operator != (
struct _Iterator other) {
79 return other._cur != this->_cur;
106 size_t size() {
return _size; }
113 _head =
new ListNode();
117 while(node->next) node = node->next;
118 node->next =
new ListNode();
121 node->value = element;
130 if(i._cur == NULL)
return *
this;
131 ListNode *next = i._cur->next;
132 if(i._cur == _head) {
133 ListNode *old = _head;
136 _destructor(old->value);
140 ListNode *node = _head;
141 while(node && node->next != i._cur) node = node->next;
143 ListNode *old = node->next;
146 _destructor(old->value);
157 if(element == NULL)
return *
this;
158 ListNode *node = _head;
160 if(node->value == element) {
163 _destructor(node->value);
168 if(node->next->value == element) {
169 ListNode * old = node->next;
170 node->next = node->next->next;
172 _destructor(old->value);
187 ListNode *node = _head;
190 _destructor(node->value);
200 T
find(
const void *key,
bool (*cmp)(T,
const void *)) {
201 if(key == NULL)
return NULL;
202 ListNode *node = _head;
204 if(cmp(node->value,key))
214 ListNode *node = _head;
217 T value = node->value;
228 if(_head)
return _head->value;
T peek()
Definition: vector.h:227
Vector< T > & operator>>(Iterator &i)
Definition: vector.h:129
static void defaultReleaser(T e)
Definition: vector.h:33
static void defaultDestructor(T e)
Definition: vector.h:39
Vector(destructor dtor)
Definition: vector.h:53
struct Vector::_Iterator Iterator
T operator*()
Definition: vector.h:84
const Iterator end()
Definition: vector.h:103
T pop()
Definition: vector.h:213
T find(const void *key, bool(*cmp)(T, const void *))
Definition: vector.h:200
Vector()
Definition: vector.h:45
Vector< T > & operator<<(const T element)
Definition: vector.h:110
void clear()
Definition: vector.h:185
const Iterator begin()
Definition: vector.h:96