22 #ifndef ELM_GENSTRUCT_VECTOR_H
23 #define ELM_GENSTRUCT_VECTOR_H
25 #include <elm/assert.h>
26 #include <elm/genstruct/Table.h>
27 #include <elm/genstruct/Vector.h>
28 #include <elm/PreIterator.h>
30 namespace elm {
namespace genstruct {
37 inline Vector(
int _cap = 8): tab(new T[_cap]), cap(_cap), cnt(0) { }
39 inline ~Vector(
void) {
if(tab)
delete [] tab; }
47 inline bool ended(
void)
const {
return i >= _vec.length(); }
48 inline const T&
item(
void)
const {
return _vec[i]; }
49 inline void next(
void) { i++; }
50 inline int index(
void) {
return i; }
58 int count(
void)
const {
return cnt; }
61 inline bool isEmpty(
void)
const {
return cnt == 0; }
62 inline const T&
get(
int index)
const;
63 inline T&
item(
int index);
64 inline void set(
int index,
const T
value);
66 inline const T&
operator[](
int index)
const {
return get(index); }
68 template <
template <
class _>
class C>
inline bool containsAll(
const C<T>& items)
73 inline operator bool(
void)
const {
return cnt != 0; }
75 {
if(
length() != v.
length())
return false;
for(
int i = 0; i <
length(); i++)
if(
get(i) != v[i])
return false;
return true; }
77 inline const T&
first(
void)
const
78 { ASSERT(cnt > 0);
return tab[0]; }
79 inline const T&
last(
void)
const
80 { ASSERT(cnt > 0);
return tab[cnt - 1]; }
82 { Iterator i(*
this);
while(i && *i != item) i++;
return i; }
83 inline Iterator
find (
const T &
item,
const Iterator &start)
84 { Iterator i(start);
while(i && *i != item) i++;
return i; }
85 inline const T&
top(
void)
const
86 { ASSERTP(cnt > 0,
"no more data in the stack");
return tab[cnt - 1]; }
89 inline void add(
void);
91 template <
template <
class _>
class C>
inline void addAll(
const C<T>& items)
95 inline void remove(
const Iterator& iter) {
removeAt(iter.i); }
96 template <
template <
class _>
class C>
inline void removeAll(
const C<T>& items)
99 inline void clear(
void) { cnt = 0; }
100 void grow(
int new_cap);
110 { ASSERTP(cnt > 0,
"no more data to pop");
return tab[--cnt]; }
115 inline void set (
const Iterator &pos,
const T &
item) { tab[pos.pos] =
item; }
121 unsigned short cap, cnt;
141 ASSERTP(index < cnt,
"index out of bounds");
145 ASSERTP(index < cnt,
"index out of bounds");
149 ASSERTP(index < cnt,
"index out of bounds");
153 for(
int i = 0; i < cnt; i++)
159 for(
int i = start; i < cnt; i++)
165 ASSERTP(start <= cnt,
"index out of bounds");
166 for(
int i = (start < 0 ? cnt : start) - 1; i >= 0; i--)
186 for(
int i = index + 1; i < cnt; i++)
191 ASSERTP(index <= cnt,
"index out of bounds");
194 for(
int i = cnt; i > index; i--)
200 ASSERTP(new_cap > 0 && new_cap < 65536,
"new capacity out of [1, 65535]");
201 ASSERTP(new_cap >= cap,
"new capacity must be bigger than old one");
203 T *new_tab =
new T[cap];
204 for(
int i =0; i < cnt; i++)
211 ASSERTP(new_length >= 0,
"new length must be >= 0");
213 for (new_cap = 1; new_cap < new_length; new_cap *= 2);
221 if(!tab || vec.cnt > cap) {
225 tab =
new T[vec.cap];
228 for(
int i = 0; i < cnt; i++)
234 #endif // ELM_GENSTRUCT_VECTOR_H
void set(const Iterator &pos, const T &item)
Definition: Vector.h:115
table< T > detach(void)
Definition: Vector.h:131
void addLast(const T &item)
Definition: Vector.h:112
Definition: PreIterator.h:29
void clear(void)
Definition: Vector.h:99
int indexOf(const T &value, int start=0) const
Definition: Vector.h:158
void insert(const T &item)
Definition: Vector.h:106
const T & top(void) const
Definition: Vector.h:85
const T & get(int index) const
Definition: Vector.h:144
bool operator!=(const Vector< T > &v) const
Definition: Vector.h:76
T & operator[](int index)
Definition: Vector.h:65
const T pop(void)
Definition: Vector.h:109
void addBefore(const Iterator &pos, const T &item)
Definition: Vector.h:117
void removeAll(const C< T > &items)
Definition: Vector.h:96
const T & last(void) const
Definition: Vector.h:79
Vector(int _cap=8)
Definition: Vector.h:37
const T & operator[](int index) const
Definition: Vector.h:66
void addFirst(const T &item)
Definition: Vector.h:111
T & item(int index)
Definition: Vector.h:140
Vector< T > & operator=(const Vector &vec)
Definition: Vector.h:104
bool ended(void) const
Definition: Vector.h:47
void addAll(const C< T > &items)
Definition: Vector.h:91
void copy(const Vector &vec)
Definition: Vector.h:220
Iterator(const Iterator &iter)
Definition: Vector.h:46
value_t value(CString name, int value)
Definition: rtti.h:40
Iterator find(const T &item)
Definition: Vector.h:81
void swallow(Vector< T > &v)
Definition: Vector.h:105
const T & first(void) const
Definition: Vector.h:77
int lastIndexOf(const T &value, int start=-1) const
Definition: Vector.h:164
void removeLast(void)
Definition: Vector.h:114
int length(void) const
Definition: Vector.h:59
const T & item(void) const
Definition: Vector.h:48
const Vector< T > & vector(void)
Definition: Vector.h:51
void add(void)
Definition: Vector.h:179
Iterator find(const T &item, const Iterator &start)
Definition: Vector.h:83
void set(int index, const T value)
Definition: Vector.h:148
int capacity(void) const
Definition: Vector.h:137
~Vector(void)
Definition: Vector.h:39
bool containsAll(const C< T > &items)
Definition: Vector.h:68
bool operator==(const Vector< T > &v) const
Definition: Vector.h:74
void insert(int index, const T &value)
Definition: Vector.h:190
void removeFirst(void)
Definition: Vector.h:113
void push(const T &value)
Definition: Vector.h:107
bool isEmpty(void) const
Definition: Vector.h:61
Vector(const Vector< T > &vec)
Definition: Vector.h:38
void grow(int new_cap)
Definition: Vector.h:199
bool contains(const T &value) const
Definition: Vector.h:152
void setLength(int new_length)
Definition: Vector.h:209
void addAfter(const Iterator &pos, const T &item)
Definition: Vector.h:116
void removeAt(int index)
Definition: Vector.h:185
Iterator(const Vector &vec)
Definition: Vector.h:45
int count(void) const
Definition: Vector.h:58
int index(void)
Definition: Vector.h:50
void next(void)
Definition: Vector.h:49