Mixes for Privacy and Anonymity in the Internet
Classes | Public Member Functions | Public Attributes | Private Types | Private Member Functions | Static Private Member Functions | Private Attributes | List of all members
ReaderWriterQueue Class Reference

Classes

struct  Block
 

Public Member Functions

AE_NO_TSAN ReaderWriterQueue (size_t maxSize=15)
 
AE_NO_TSAN ~ReaderWriterQueue ()
 
AE_FORCEINLINE bool enqueue (UINT8 *const &element) AE_NO_TSAN
 
bool try_dequeue (UINT8 *&result) AE_NO_TSAN
 
UINT8peek () AE_NO_TSAN
 
bool pop () AE_NO_TSAN
 
size_t size_approx () const AE_NO_TSAN
 

Public Attributes

UINT8value_type
 

Private Types

enum  AllocationMode { CanAlloc , CannotAlloc }
 

Private Member Functions

bool inner_enqueue (AllocationMode canAlloc, UINT8 *const &element) AE_NO_TSAN
 

Static Private Member Functions

static AE_FORCEINLINE size_t ceilToPow2 (size_t x)
 
template<typename U >
static AE_FORCEINLINE UINT8align_for (UINT8 *ptr) AE_NO_TSAN
 
static Blockmake_block (size_t capacity) AE_NO_TSAN
 

Private Attributes

weak_atomic< Block * > frontBlock
 
char cachelineFiller [MOODYCAMEL_CACHE_LINE_SIZE - sizeof(weak_atomic< Block * >)]
 
weak_atomic< Block * > tailBlock
 
size_t largestBlockSize
 

Member Enumeration Documentation

◆ AllocationMode

Enumerator
CanAlloc 
CannotAlloc 

Constructor & Destructor Documentation

◆ ReaderWriterQueue()

AE_NO_TSAN ReaderWriterQueue::ReaderWriterQueue ( size_t  maxSize = 15)
explicit

◆ ~ReaderWriterQueue()

AE_NO_TSAN ReaderWriterQueue::~ReaderWriterQueue ( )

Member Function Documentation

◆ align_for()

template<typename U >
static AE_FORCEINLINE UINT8* ReaderWriterQueue::align_for ( UINT8 ptr)
staticprivate

◆ ceilToPow2()

static AE_FORCEINLINE size_t ReaderWriterQueue::ceilToPow2 ( size_t  x)
staticprivate

Referenced by ReaderWriterQueue().

◆ enqueue()

AE_FORCEINLINE bool ReaderWriterQueue::enqueue ( UINT8 *const &  element)

◆ inner_enqueue()

bool ReaderWriterQueue::inner_enqueue ( AllocationMode  canAlloc,
UINT8 *const &  element 
)
private

◆ make_block()

static Block* ReaderWriterQueue::make_block ( size_t  capacity)
staticprivate

Referenced by inner_enqueue(), and ReaderWriterQueue().

◆ peek()

UINT8* ReaderWriterQueue::peek ( )

◆ pop()

bool ReaderWriterQueue::pop ( )

◆ size_approx()

size_t ReaderWriterQueue::size_approx ( ) const

◆ try_dequeue()

bool ReaderWriterQueue::try_dequeue ( UINT8 *&  result)

Member Data Documentation

◆ cachelineFiller

char ReaderWriterQueue::cachelineFiller[MOODYCAMEL_CACHE_LINE_SIZE - sizeof(weak_atomic< Block * >)]
private

◆ frontBlock

weak_atomic<Block*> ReaderWriterQueue::frontBlock
private

◆ largestBlockSize

size_t ReaderWriterQueue::largestBlockSize
private

Referenced by inner_enqueue(), and ReaderWriterQueue().

◆ tailBlock

weak_atomic<Block*> ReaderWriterQueue::tailBlock
private

◆ value_type

UINT8* ReaderWriterQueue::value_type