22 #ifndef ELM_GENSTRUCT_FRAGTABLE_H
23 #define ELM_GENSTRUCT_FRAGTABLE_H
25 #include <elm/assert.h>
26 #include <elm/genstruct/Vector.h>
28 namespace elm {
namespace genstruct {
33 int size, msk, shf, used;
42 inline operator bool (
void)
const {
return !
isEmpty(); }
44 {
for(
int i = 0; i <
length(); i++)
45 if(
get(i) == item)
return true;
return false; }
52 inline void next(
void);
53 inline const T&
item(
void)
const;
54 inline bool ended(
void)
const;
62 inline void clear(
void);
63 inline void add(
const T &item);
64 template <
template <
class _>
class C >
66 {
for(
typename C<T>::Iterator i(items); i; i++)
add(i); }
67 inline void remove(
const T &item)
68 {
for(
Iterator i(*
this); i; i++)
if(i == item) {
remove(i);
break; } }
70 template <
template <
class _>
class C >
72 {
for(
typename C<T>::Iterator i(items); i; i++)
remove(i); }
75 inline int length(
void)
const;
76 inline const T&
get(
int index)
const;
78 {
for(
Iterator i(*
this, start); i; i++)
79 if(i == value)
return i.i;
return -1; }
81 {
for(
int i = (start < 0 ?
length() : start) - 1; i >= 0; i--)
82 if(
get(i) == value)
return i;
return -1; }
83 inline const T&
operator[](
int index)
const {
return get(index); }
87 inline void set(
int index,
const T &item);
89 inline T &
get(
int index);
91 void insert(
int index,
const T &item);
109 :
size(1 << size_pow), msk(
size - 1), shf(size_pow), used(
size) {
110 ASSERTP(size_pow > 0,
"size must be greater than 0");
115 for(
int i = 0; i < tab.count(); i++)
121 for(
int i = 0; i < tab.count(); i++)
129 return ((tab.count() - 1) << shf) + used;
134 ASSERTP(index >= 0 && index < length(),
"index out of bounds");
135 return tab[index >> shf][index & msk];
140 ASSERTP(index >= 0 && index < length(),
"index out of bounds");
141 return tab[index >> shf][index & msk];
146 ASSERTP(index >= 0 && index < length(),
"index out of bounds");
147 tab[index >> shf][index & msk] =
value;
153 tab.add(
new T[
size]);
156 tab[tab.length() - 1][used++] =
value;
168 while(count >=
size - used) {
169 count -=
size - used;
170 tab.add(
new T[
size]);
180 ASSERTP(length < this->length(),
"length too big");
181 int nl = (length + msk) >> shf;
182 for(
int i = nl; i < tab.count(); i++)
192 ASSERTP(index >= 0 && index <= length(),
"index out of bounds");
195 for(
int i = len - 1; i >= index; i--)
204 for(
int i = index + 1; i <= len; i++)
208 delete [] tab[tab.count() - 1];
209 tab.setLength(tab.count() - 1);
218 : arr(&array), i(pos), len(array.count()) {
239 #endif // ELM_GENSTRUCT_FRAGTABLE_H
void set(T *target, int size, const T &v)
Definition: array.h:63
int indexOf(const T &value, int start=0) const
Definition: FragTable.h:77
FragTable(const FragTable &tab)
Definition: FragTable.h:36
bool isEmpty(void) const
Definition: FragTable.h:41
Definition: PreIterator.h:29
void removeAt(int index)
Definition: FragTable.h:202
void shrink(int length)
Definition: FragTable.h:179
int length(void) const
Definition: FragTable.h:128
void insert(const Iterator &iter, const T &item)
Definition: FragTable.h:92
const T & get(int index) const
Definition: FragTable.h:133
FragTable< T > & operator+=(T value)
Definition: FragTable.h:160
void insert(int index, const T &item)
Definition: FragTable.h:191
void set(const Iterator &iter, const T &item)
Definition: FragTable.h:88
const T & operator[](int index) const
Definition: FragTable.h:83
uint32 size
Definition: int.h:41
int alloc(int count)
Definition: FragTable.h:166
Iterator(const Iterator &iter)
Definition: FragTable.h:50
void addAll(const C< T > &items)
Definition: FragTable.h:65
void clean(void)
Definition: FragTable.h:101
void removeAt(const Iterator &iter)
Definition: FragTable.h:95
value_t value(CString name, int value)
Definition: rtti.h:40
Iterator(const FragTable< T > &array, int pos=0)
Definition: FragTable.h:217
void set(int index, const T &item)
Definition: FragTable.h:145
int i
Definition: FragTable.h:58
void next(void)
Definition: FragTable.h:222
Definition: FragTable.h:47
void add(const T &item)
Definition: FragTable.h:151
int count(void) const
Definition: FragTable.h:40
FragTable(int size_pow=8)
Definition: FragTable.h:108
T & operator[](int index)
Definition: FragTable.h:90
int len
Definition: FragTable.h:58
~FragTable(void)
Definition: FragTable.h:114
void removeAll(const C< T > &items)
Definition: FragTable.h:71
const T & item(void) const
Definition: FragTable.h:228
const FragTable< T > * arr
Definition: FragTable.h:57
void clear(void)
Definition: FragTable.h:120
int lastIndexOf(const T &value, int start=-1) const
Definition: FragTable.h:80
int count(void) const
Definition: Vector.h:58
bool ended(void) const
Definition: FragTable.h:233
Definition: FragTable.h:31
bool contains(const T &item) const
Definition: FragTable.h:43