uvco 0.1
Loading...
Searching...
No Matches
Public Member Functions | Private Attributes | List of all members
uvco::BoundedQueue< T > Class Template Reference

#include <bounded_queue.h>

Public Member Functions

 BoundedQueue (unsigned capacity)
 
template<typename U >
requires std::convertible_to<U, T>
void put (U &&elem)
 Push an item to the queue.
 
get ()
 Pop an item from the queue.
 
unsigned size () const
 Current number of contained items.
 
unsigned capacity () const
 Maximum number of contained items.
 
bool empty () const
 size() == 0
 
bool hasSpace () const
 size() < capacity()
 

Private Attributes

std::vector< Tqueue_ {}
 
unsigned head_ = 0
 
unsigned tail_ = 0
 
unsigned size_ = 0
 

Detailed Description

template<typename T>
class uvco::BoundedQueue< T >

A bounded FIFO queue based on a contiguous array.

Warning: only for internal use. The push()/pop() interface is not safe in Release mode binaries; BoundedQueue is only intended to be used as part of Channel<T>.

Constructor & Destructor Documentation

◆ BoundedQueue()

template<typename T >
uvco::BoundedQueue< T >::BoundedQueue ( unsigned  capacity)
inlineexplicit
25{ queue_.reserve(capacity); }
std::vector< T > queue_
Definition bounded_queue.h:64
unsigned capacity() const
Maximum number of contained items.
Definition bounded_queue.h:57

Member Function Documentation

◆ capacity()

template<typename T >
unsigned uvco::BoundedQueue< T >::capacity ( ) const
inline

Maximum number of contained items.

57{ return queue_.capacity(); }

◆ empty()

template<typename T >
bool uvco::BoundedQueue< T >::empty ( ) const
inline

size() == 0

59{ return size() == 0; }
unsigned size() const
Current number of contained items.
Definition bounded_queue.h:55

◆ get()

template<typename T >
T uvco::BoundedQueue< T >::get ( )
inline

Pop an item from the queue.

45 {
46 if (empty()) [[unlikely]] {
47 throw UvcoException(UV_EAGAIN, "queue is empty");
48 }
49 T element = std::move(queue_.at(tail_++));
50 tail_ = tail_ % capacity();
51 --size_;
52 return element;
53 }
T get()
Pop an item from the queue.
Definition bounded_queue.h:45
unsigned size_
Definition bounded_queue.h:69
bool empty() const
size() == 0
Definition bounded_queue.h:59
unsigned tail_
Definition bounded_queue.h:68

◆ hasSpace()

template<typename T >
bool uvco::BoundedQueue< T >::hasSpace ( ) const
inline

size() < capacity()

61{ return size() < capacity(); }

◆ put()

template<typename T >
template<typename U >
requires std::convertible_to<U, T>
void uvco::BoundedQueue< T >::put ( U &&  elem)
inline

Push an item to the queue.

31 {
32 if (!hasSpace()) {
33 throw UvcoException(UV_EBUSY, "queue is full");
34 }
35 if (queue_.size() < capacity()) {
37 queue_.push_back(std::forward<U>(elem));
38 } else {
39 queue_.at(head_) = std::forward<U>(elem);
40 }
41 head_ = (head_ + 1) % capacity();
42 ++size_;
43 }
bool hasSpace() const
size() < capacity()
Definition bounded_queue.h:61
unsigned head_
Definition bounded_queue.h:66

◆ size()

template<typename T >
unsigned uvco::BoundedQueue< T >::size ( ) const
inline

Current number of contained items.

55{ return size_; }

Member Data Documentation

◆ head_

template<typename T >
unsigned uvco::BoundedQueue< T >::head_ = 0
private

◆ queue_

template<typename T >
std::vector<T> uvco::BoundedQueue< T >::queue_ {}
private
64{};

◆ size_

template<typename T >
unsigned uvco::BoundedQueue< T >::size_ = 0
private

◆ tail_

template<typename T >
unsigned uvco::BoundedQueue< T >::tail_ = 0
private

The documentation for this class was generated from the following file: