TS-E+ базовая библиотека.
libTSE+
 Указатель Классы Функции Переменные Определения типов
vector.h
1 /*
2  * list.h
3  *
4  * Created on: Apr 13, 2015
5  * Author: nick
6  */
7 
8 #ifndef LIST_H_
9 #define LIST_H_
10 #include <stdint.h>
11 #include <stdlib.h>
12 #include <avr/wdt.h>
13 #include "logger.h"
14 
18 template <class T> class Vector {
19 public:
20  typedef void (*destructor)(T);
21 private:
22  typedef struct ListNode_ {
23  T value;
24  struct ListNode_ *next;
25  } ListNode;
26  ListNode *_head;
27  destructor _destructor;
28  size_t _size;
29 public:
33  static void defaultReleaser(T e) {
34  free(e);
35  }
39  static void defaultDestructor(T e) {
40  delete e;
41  }
45  Vector() : _head(NULL),_destructor(NULL),_size(0) {
46  _end._cur = NULL;
47  }
53  Vector(destructor dtor) : _head(NULL),_destructor(dtor),_size(0) {
54  _end._cur = NULL;
55  }
56 
60  typedef struct _Iterator {
61  friend class Vector;
62  private:
63  ListNode *_cur;
64  public:
65  struct _Iterator &operator ++(int v) {
66  if(v == 0) v = 1;
67  while(v-- && _cur)
68  _cur = _cur->next;
69  return *this;
70  }
71  struct _Iterator &operator = (const struct _Iterator &other) {
72  this->_cur = other._cur;
73  return *this;
74  }
75  bool operator == (struct _Iterator &other) {
76  return other._cur == this->_cur;
77  }
78  bool operator != (struct _Iterator other) {
79  return other._cur != this->_cur;
80  }
84  T operator *() {
85  if(_cur)
86  return _cur->value;
87  return NULL;
88  }
89  } Iterator;
90 private:
91  Iterator _end, _begin;
92 public:
96  const Iterator begin() {
97  _begin._cur = _head;
98  return _begin;
99  }
103  const Iterator end() {
104  return _end;
105  }
106  size_t size() { return _size; }
110  Vector<T> &operator <<(const T element) {
111  ListNode *node;
112  if(_head == NULL) {
113  _head = new ListNode();
114  node = _head;
115  } else {
116  node = _head;
117  while(node->next) node = node->next;
118  node->next = new ListNode();
119  node = node->next;
120  }
121  node->value = element;
122  node->next = NULL;
123  _size++;
124  return *this;
125  }
130  if(i._cur == NULL) return *this;
131  ListNode *next = i._cur->next;
132  if(i._cur == _head) {
133  ListNode *old = _head;
134  _head = _head->next;
135  if(_destructor)
136  _destructor(old->value);
137  delete(old);
138  i._cur = next;
139  } else {
140  ListNode *node = _head;
141  while(node && node->next != i._cur) node = node->next;
142  if(node) {
143  ListNode *old = node->next;
144  node->next = next;
145  if(_destructor)
146  _destructor(old->value);
147  delete(old);
148  i._cur = next;
149  }
150  }
151  return *this;
152  }
156  Vector<T> &operator >>(const T element) {
157  if(element == NULL) return *this;
158  ListNode *node = _head;
159  if(node) {
160  if(node->value == element) {
161  _head = node->next;
162  if(_destructor)
163  _destructor(node->value);
164  delete node;
165  _size--;
166  } else
167  while(node->next) {
168  if(node->next->value == element) {
169  ListNode * old = node->next;
170  node->next = node->next->next;
171  if(_destructor)
172  _destructor(old->value);
173  delete old;
174  _size--;
175  break;
176  }
177  node = node->next;
178  }
179  }
180  return *this;
181  }
185  void clear() {
186  while(_head) {
187  ListNode *node = _head;
188  _head = _head->next;
189  if(_destructor)
190  _destructor(node->value);
191  delete node;
192  }
193  _size = 0;
194  }
200  T find(const void *key, bool (*cmp)(T,const void *)) {
201  if(key == NULL) return NULL;
202  ListNode *node = _head;
203  while(node) {
204  if(cmp(node->value,key))
205  return node->value;
206  node = node->next;
207  }
208  return NULL;
209  }
213  T pop() {
214  ListNode *node = _head;
215  if(node) {
216  _head = _head->next;
217  T value = node->value;
218  delete node;
219  _size--;
220  return value;
221  }
222  return NULL;
223  }
227  T peek() {
228  if(_head) return _head->value;
229  return NULL;
230  }
231 
232 };
233 
234 
235 
236 #endif /* LIST_H_ */
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
Definition: vector.h:18
Vector()
Definition: vector.h:45
Vector< T > & operator<<(const T element)
Definition: vector.h:110
Definition: vector.h:60
void clear()
Definition: vector.h:185
const Iterator begin()
Definition: vector.h:96