8 #ifndef INCL_evo_atomic_buffer_queue_h     9 #define INCL_evo_atomic_buffer_queue_h    58 template<
class T, 
class TSize=SizeT>
    72         buf_       = 
new Item[
size];
    74         size_mask_ = 
size - 1;
   101         return (Size)(cursor < read ? 0 : cursor + 1 - read);
   119         return (
used() >= size_);
   150         buf_[seq & size_mask_] = item;
   155         const uint64 prev_seq = seq - 1;
   180         return buf_[seq & size_mask_];
   194         const uint64 prev_seq = seq - 1;
   213             item = buf_[seq & size_mask_];
   223     This& operator=(
const This&);
 #define EVO_EXCEPTION_GUARD_START
Start exception guard (try block). 
Definition: container.h:52
 
void store(T num, MemOrder mem_order=std::memory_order_seq_cst)
Store new value. 
 
bool pop(Item &item)
Pop oldest item from queue. 
Definition: atomic_buffer_queue.h:209
 
#define EVO_ATOMIC_ACQ_REL
Combined "acquire" & "release" level memory barrier. 
Definition: atomic.h:33
 
#define EVO_EXCEPTION_GUARD_END
End exception guard, catch and abort(). 
Definition: container.h:55
 
Item & add_start(uint64 &seq)
Start adding item to queue directly. 
Definition: atomic_buffer_queue.h:172
 
Size used() const
Get used item count. 
Definition: atomic_buffer_queue.h:98
 
bool full() const
Get whether queue is full. 
Definition: atomic_buffer_queue.h:118
 
~AtomicBufferQueue()
Destructor. 
Definition: atomic_buffer_queue.h:80
 
#define EVO_ATOMIC_FENCE(MEM_ORDER)
Sets a memory fence/barrier. 
Definition: atomic.h:52
 
Size size() const
Get buffer size. 
Definition: atomic_buffer_queue.h:89
 
T Item
Item type. 
Definition: atomic_buffer_queue.h:63
 
bool compare_set(T cmpval, T newval, MemOrder mem_order_success=std::memory_order_seq_cst, MemOrder mem_order_failure=std::memory_order_acquire)
Compare and set, storing new value if comparison matches. 
Definition: atomic.h:332
 
#define EVO_ATOMIC_ACQUIRE
Start "acquire" memory ordering barrier, usually followed by a matching "release" barrier...
Definition: atomic.h:27
 
TSize Size
Queue size integer type (always unsigned) 
Definition: atomic_buffer_queue.h:62
 
void clear()
Clear all items from queue, making it empty. 
Definition: atomic_buffer_queue.h:125
 
static const Size DEFAULT_SIZE
Default size to use. 
Definition: atomic_buffer_queue.h:65
 
Evo C++ Library namespace. 
Definition: alg.h:11
 
#define EVO_ATOMIC_RELEASE
Release (end) memory ordering barrier started with "consume" or "acquire" barrier. 
Definition: atomic.h:30
 
void add_commit(uint64 seq)
Commit adding an item. 
Definition: atomic_buffer_queue.h:191
 
T fetch_add(T num, MemOrder mem_order=std::memory_order_seq_cst)
Add number to value and return the previous value. 
 
AtomicBufferQueue(Size size=DEFAULT_SIZE)
Constructor, sets buffer size. 
Definition: atomic_buffer_queue.h:70
 
Fast buffer-based queue, implemented with a ring-buffer. 
Definition: atomic_buffer_queue.h:59
 
AddConst< T >::Type & PassType
Most efficient type for passing as parameter (const-reference or POD value). 
Definition: container.h:551
 
void add(typename DataCopy< Item >::PassType item)
Add item to queue. 
Definition: atomic_buffer_queue.h:141
 
bool sleepus(ulongl usec)
Sleep for number of microseconds. 
Definition: sys.h:679
 
T load(MemOrder mem_order=std::memory_order_seq_cst) const
Load and return current value. 
 
AtomicBufferQueue< T, TSize > This
This type 
Definition: atomic_buffer_queue.h:61
 
Size size_pow2(Size size, Size minsize=2)
Get size as power of 2. 
Definition: type.h:1951
 
bool empty() const
Get whether queue is empty. 
Definition: atomic_buffer_queue.h:109