8 #ifndef INCL_evo_buffer_queue_h 9 #define INCL_evo_buffer_queue_h 58 template<
class T,
class TSize=SizeT>
75 size_mask_ =
size - 1;
86 buf_ =
new T[src.size_];
88 size_mask_ = src.size_mask_;
124 return (used_ >= size_);
140 bool add(
const T& item,
bool force=
false) {
142 buf_[((uint64)start_ + used_) & size_mask_] = item;
147 start_ = (start_ + 1) & size_mask_;
161 return buf_ + (((uint64)start_ + used_++) & size_mask_);
163 T* item = buf_ + start_;
164 start_ = (start_ + 1) & size_mask_;
189 size = size_ - start_;
192 return buf_ + start_;
208 start_ = (start_ + 1) & size_mask_;
223 start_ = (start_ + 1) & size_mask_;
241 start_ = (
Size)(((uint64)start_ + size) & size_mask_);
255 if (size_ != src.size_) {
257 buf_ =
new T[src.size_];
258 size_mask_ = src.size_mask_;
275 void copydata(
const This& src) {
277 Size copysize = size_ - start_;
279 if (copysize < used_) {
280 copysize = used_ - copysize;
287 static Size adjust_size(Size
size) {
290 if (size <= MIN_SIZE) {
292 }
else if (size >= MAX_SIZE) {
295 const Size targetsize =
size;
297 while (size < targetsize)
static void copy(Item *dest, const Item *src, ulong size)
Copy already initialized data (assignment operator).
Definition: container.h:297
T * advAdd(bool force=false)
Advanced: Add new item to queue and get pointer to it.
Definition: buffer_queue.h:159
Size used() const
Get used item count.
Definition: buffer_queue.h:109
BufferQueue(const This &src)
Copy constructor.
Definition: buffer_queue.h:85
bool full() const
Get whether queue is full.
Definition: buffer_queue.h:123
This & operator=(const This &src)
Assignment operator.
Definition: buffer_queue.h:254
Fast buffer-based queue, implemented with a ring-buffer.
Definition: buffer_queue.h:59
TSize Size
Queue size integer type (always unsigned)
Definition: buffer_queue.h:62
Basic integer type.
Definition: type.h:980
static const Size MIN_SIZE
Minimum size to use.
Definition: buffer_queue.h:65
const T & peek() const
Peek at oldest item in queue.
Definition: buffer_queue.h:175
static const Size DEFAULT_SIZE
Default size to use.
Definition: buffer_queue.h:66
bool add(const T &item, bool force=false)
Add item to queue.
Definition: buffer_queue.h:140
Size pop_size(Size size)
Pop oldest items from queue in bulk.
Definition: buffer_queue.h:237
bool pop()
Pop oldest item from queue without returning it.
Definition: buffer_queue.h:221
BufferQueue(Size size=DEFAULT_SIZE)
Constructor, sets buffer size.
Definition: buffer_queue.h:71
BufferQueue< T, TSize > This
This type
Definition: buffer_queue.h:61
Evo C++ Library namespace.
Definition: alg.h:11
Size size() const
Get buffer size.
Definition: buffer_queue.h:102
bool pop(T &item)
Pop oldest item from queue.
Definition: buffer_queue.h:205
const T * peek(Size &size) const
Peek at oldest items in queue.
Definition: buffer_queue.h:187
bool empty() const
Get whether queue is empty.
Definition: buffer_queue.h:116
~BufferQueue()
Destructor.
Definition: buffer_queue.h:95
T Item
Item type.
Definition: buffer_queue.h:63
void clear()
Clear all items from queue, making it empty.
Definition: buffer_queue.h:128
Evo basic types and traits.