22 #ifndef ELM_GENSTRUCT_VECTORQUEUE_H
23 #define ELM_GENSTRUCT_VECTORQUEUE_H
25 #include <elm/assert.h>
26 #include <elm/util/Equiv.h>
28 namespace elm {
namespace genstruct {
31 template <
class T,
class E = Equiv<T> >
41 inline int size(
void)
const;
42 inline bool isEmpty(
void)
const;
45 for(
int i = hd; i != tl; i = (i + 1) & (cap - 1))
46 if(E::equals(buffer[i], val))
52 inline const T&
get(void);
53 inline T&
head(
void)
const;
54 inline void reset(
void);
57 inline operator bool(
void)
const;
64 template <
class T,
class E>
void VectorQueue<T, E>::enlarge(
void) {
65 int new_cap = cap * 2, off = 0;
66 T *new_buffer =
new T[new_cap];
69 for(
int i = 0; i < off; i++)
70 new_buffer[i] = buffer[hd + i];
73 for(
int i = hd; i < tl; i++)
74 new_buffer[off + i - hd] = buffer[i];
82 : hd(0), tl(0), cap(1 << capacity), buffer(new T[cap]) {
83 ASSERTP(cap >= 0,
"capacity must be positive");
98 return (cap - hd) + tl;
106 int new_tl = (tl + 1) & (cap - 1);
116 ASSERTP(hd != tl,
"queue empty");
118 hd = (hd + 1) & (cap - 1);
123 ASSERTP(hd != tl,
"queue empty");
146 #endif // ELM_GENSTRUCT_VECTORQUEUE_H
T * operator->(void) const
Definition: VectorQueue.h:136
bool contains(const T &val) const
Definition: VectorQueue.h:44
bool isEmpty(void) const
Definition: VectorQueue.h:101
T & head(void) const
Definition: VectorQueue.h:122
int capacity(void) const
Definition: VectorQueue.h:90
VectorQueue(int capacity=4)
Definition: VectorQueue.h:81
~VectorQueue(void)
Definition: VectorQueue.h:86
value_t value(CString name, int value)
Definition: rtti.h:40
void put(const T &value)
Definition: VectorQueue.h:105
void reset(void)
Definition: VectorQueue.h:127
T & operator*(void) const
Definition: VectorQueue.h:140
const T & get(void)
Definition: VectorQueue.h:115
int size(void) const
Definition: VectorQueue.h:94
Definition: VectorQueue.h:32