Tervel  1.0.0
A collection of wait-free containers and algorithms.
Public Member Functions | Private Member Functions | Private Attributes | List of all members
tervel::containers::lf::mcas_buffer::RingBuffer< T > Class Template Reference

#include <mcas_buffer.h>

Public Member Functions

 RingBuffer (uint64_t s)
 
 ~RingBuffer ()
 
bool enqueue (T value)
 
bool dequeue (T &value)
 
bool is_empty ()
 
bool is_full ()
 
size_t capacity ()
 
void print_queue ()
 

Private Member Functions

Node< T > * at (uint64_t pos)
 
std::atomic< Node< T > * > * address (uint64_t pos)
 
uint64_t head ()
 
uint64_t head (uint64_t i)
 
uint64_t tail ()
 
uint64_t tail (uint64_t i)
 
bool enqueue (Node< T > *node)
 
Node< T > * dequeue ()
 enqueue More...
 

Private Attributes

const uint64_t capacity_
 
std::atomic< uint64_t > head_
 
std::atomic< uint64_t > tail_
 
std::unique_ptr< std::atomic< Node< T > * >[]> buff_
 
Node< T > * c_not_value = reinterpret_cast<Node<T> *>(0x0L)
 
Node< T > * c_head_value = reinterpret_cast<Node<T> *>(0x10L)
 
Node< T > * c_tail_value = reinterpret_cast<Node<T> *>(0x20L)
 

Constructor & Destructor Documentation

template<typename T>
tervel::containers::lf::mcas_buffer::RingBuffer< T >::RingBuffer ( uint64_t  s)
inlineexplicit
template<typename T>
tervel::containers::lf::mcas_buffer::RingBuffer< T >::~RingBuffer ( )
inline

Member Function Documentation

template<typename T>
std::atomic<Node<T> *>* tervel::containers::lf::mcas_buffer::RingBuffer< T >::address ( uint64_t  pos)
inlineprivate
template<typename T>
Node<T>* tervel::containers::lf::mcas_buffer::RingBuffer< T >::at ( uint64_t  pos)
inlineprivate
template<typename T>
size_t tervel::containers::lf::mcas_buffer::RingBuffer< T >::capacity ( )
inline
template<typename T >
bool tervel::containers::lf::mcas_buffer::RingBuffer< T >::dequeue ( T &  value)
template<typename T>
Node<T>* tervel::containers::lf::mcas_buffer::RingBuffer< T >::dequeue ( )
inlineprivate

enqueue

template<typename T >
bool tervel::containers::lf::mcas_buffer::RingBuffer< T >::enqueue ( value)
template<typename T>
bool tervel::containers::lf::mcas_buffer::RingBuffer< T >::enqueue ( Node< T > *  node)
inlineprivate
template<typename T>
uint64_t tervel::containers::lf::mcas_buffer::RingBuffer< T >::head ( )
inlineprivate
template<typename T>
uint64_t tervel::containers::lf::mcas_buffer::RingBuffer< T >::head ( uint64_t  i)
inlineprivate
template<typename T>
bool tervel::containers::lf::mcas_buffer::RingBuffer< T >::is_empty ( )
inline
template<typename T>
bool tervel::containers::lf::mcas_buffer::RingBuffer< T >::is_full ( )
inline
template<typename T>
void tervel::containers::lf::mcas_buffer::RingBuffer< T >::print_queue ( )
inline
template<typename T>
uint64_t tervel::containers::lf::mcas_buffer::RingBuffer< T >::tail ( )
inlineprivate
template<typename T>
uint64_t tervel::containers::lf::mcas_buffer::RingBuffer< T >::tail ( uint64_t  i)
inlineprivate

Member Data Documentation

template<typename T>
std::unique_ptr<std::atomic<Node<T> *>[]> tervel::containers::lf::mcas_buffer::RingBuffer< T >::buff_
private
template<typename T>
Node<T>* tervel::containers::lf::mcas_buffer::RingBuffer< T >::c_head_value = reinterpret_cast<Node<T> *>(0x10L)
private
template<typename T>
Node<T>* tervel::containers::lf::mcas_buffer::RingBuffer< T >::c_not_value = reinterpret_cast<Node<T> *>(0x0L)
private
template<typename T>
Node<T>* tervel::containers::lf::mcas_buffer::RingBuffer< T >::c_tail_value = reinterpret_cast<Node<T> *>(0x20L)
private
template<typename T>
const uint64_t tervel::containers::lf::mcas_buffer::RingBuffer< T >::capacity_
private
template<typename T>
std::atomic<uint64_t> tervel::containers::lf::mcas_buffer::RingBuffer< T >::head_
private
template<typename T>
std::atomic<uint64_t> tervel::containers::lf::mcas_buffer::RingBuffer< T >::tail_
private

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