The Pedigree Project 0.1
Classes | Public Types | Public Member Functions | Static Public Attributes | Private Member Functions | Static Private Member Functions | Private Attributes | Friends | List of all members
PipeBuffer Class Reference
+ Collaboration diagram for PipeBuffer:

Classes

class  ActiveOperation
 
struct  PairLink
 
struct  PairWaiter
 
class  ReadReservation
 
struct  Result
 
class  WriteReservation
 

Public Types

enum class  Status {
  Ready , Eof , WouldBlock , Interrupted ,
  Closed , Invalid
}
 
using ChangeCallback = void(*)(void *)
 

Public Member Functions

 PipeBuffer (ChangeCallback changed=nullptr, void *context=nullptr)
 
 PipeBuffer (const PipeBuffer &)=delete
 
PipeBuffer & operator= (const PipeBuffer &)=delete
 
size_t read (uint8_t *destination, size_t count, bool block=true)
 
size_t write (const uint8_t *source, size_t count, bool block=true)
 
size_t writeAtomic (const uint8_t *source, size_t count, bool block=true)
 
bool canRead (bool block)
 
bool canWrite (bool block)
 
uint64_t readableGeneration () const
 
uint64_t writableGeneration () const
 
size_t getDataSize ()
 
void disableReads ()
 
void disableWrites ()
 
bool enableReads ()
 
bool enableWrites (bool resetIfPreviouslyDisabled=false)
 
void wipe ()
 
void close ()
 
Result reserveRead (size_t maximum, bool block, ReadReservation &reservation)
 
Result reserveWrite (size_t maximum, bool block, WriteReservation &reservation)
 
Result waitTransfer (bool writing, bool block)
 
Result transferTo (PipeBuffer &output, size_t maximum, bool consume, bool block)
 

Static Public Attributes

static constexpr size_t Capacity = 4096
 

Private Member Functions

bool beginOperation ()
 
void endOperation ()
 
bool readableLocked () const
 
bool writableLocked () const
 
Result readyLocked (bool writing, size_t minimum=1) const
 
Result waitLocked (bool writing, size_t minimum, bool block)
 
void changedLocked ()
 
void resetLocked ()
 
void finishResetLocked ()
 
void copyOutLocked (uint8_t *destination, size_t count) const
 
void appendLocked (const uint8_t *source, size_t count)
 
void consumeLocked (size_t count)
 
void publish ()
 
void wakePairsLocked ()
 
void linkPairLocked (PairLink &link)
 
void unlinkPairLocked (PairLink &link)
 

Static Private Member Functions

static void lock (Mutex &mutex)
 
static bool wait (ConditionVariable &condition, Mutex &mutex)
 
static bool interrupted ()
 

Private Attributes

uint8_t m_Data [Capacity]
 
size_t m_Head = 0
 
size_t m_Size = 0
 
bool m_ReadEnabled = true
 
bool m_WriteEnabled = true
 
bool m_Closing = false
 
bool m_ResetPending = false
 
bool m_ReadReserved = false
 
bool m_WriteReserved = false
 
bool m_WasReadable = false
 
bool m_WasWritable = true
 
size_t m_ActiveOperations = 0
 
Atomic< uint64_t > m_ReadGeneration
 
Atomic< uint64_t > m_WriteGeneration
 
Mutex m_Lock
 
ConditionVariable m_ReadCondition
 
ConditionVariable m_WriteCondition
 
ConditionVariable m_DrainCondition
 
PairLink * m_PairWaiters = nullptr
 
const ChangeCallback m_Changed
 
void *const m_Context
 

Friends

class PipeBufferTestPeer
 

Detailed Description

Definition at line 12 of file PipeBuffer.h.

Member Typedef Documentation

◆ ChangeCallback

using PipeBuffer::ChangeCallback = void (*)(void*)

Definition at line 15 of file PipeBuffer.h.

Member Enumeration Documentation

◆ Status

enum class PipeBuffer::Status
strong

Definition at line 16 of file PipeBuffer.h.

Constructor & Destructor Documentation

◆ PipeBuffer()

PipeBuffer::PipeBuffer ( ChangeCallback  changed = nullptr,
void *  context = nullptr 
)
explicit

Definition at line 13 of file PipeBuffer.cc.

◆ ~PipeBuffer()

PipeBuffer::~PipeBuffer ( )

Definition at line 16 of file PipeBuffer.cc.

Member Function Documentation

◆ appendLocked()

void PipeBuffer::appendLocked ( const uint8_t *  source,
size_t  count 
)
private

Definition at line 176 of file PipeBuffer.cc.

◆ beginOperation()

bool PipeBuffer::beginOperation ( )
private

Definition at line 79 of file PipeBuffer.cc.

◆ canRead()

bool PipeBuffer::canRead ( bool  block)

Definition at line 278 of file PipeBuffer.cc.

◆ canWrite()

bool PipeBuffer::canWrite ( bool  block)

Definition at line 282 of file PipeBuffer.cc.

◆ changedLocked()

void PipeBuffer::changedLocked ( )
private

Definition at line 138 of file PipeBuffer.cc.

◆ close()

void PipeBuffer::close ( )

Definition at line 361 of file PipeBuffer.cc.

◆ consumeLocked()

void PipeBuffer::consumeLocked ( size_t  count)
private

Definition at line 187 of file PipeBuffer.cc.

◆ copyOutLocked()

void PipeBuffer::copyOutLocked ( uint8_t *  destination,
size_t  count 
) const
private

Definition at line 167 of file PipeBuffer.cc.

◆ disableReads()

void PipeBuffer::disableReads ( )

Definition at line 302 of file PipeBuffer.cc.

◆ disableWrites()

void PipeBuffer::disableWrites ( )

Definition at line 312 of file PipeBuffer.cc.

◆ enableReads()

bool PipeBuffer::enableReads ( )

Definition at line 322 of file PipeBuffer.cc.

◆ enableWrites()

bool PipeBuffer::enableWrites ( bool  resetIfPreviouslyDisabled = false)

Definition at line 335 of file PipeBuffer.cc.

◆ endOperation()

void PipeBuffer::endOperation ( )
private

Definition at line 89 of file PipeBuffer.cc.

◆ finishResetLocked()

void PipeBuffer::finishResetLocked ( )
private

Definition at line 159 of file PipeBuffer.cc.

◆ getDataSize()

size_t PipeBuffer::getDataSize ( )

Definition at line 294 of file PipeBuffer.cc.

◆ interrupted()

bool PipeBuffer::interrupted ( )
staticprivate

Definition at line 52 of file PipeBuffer.cc.

◆ linkPairLocked()

void PipeBuffer::linkPairLocked ( PairLink &  link)
private

Definition at line 174 of file PipeBuffer-transfer.cc.

◆ lock()

void PipeBuffer::lock ( Mutex &  mutex)
staticprivate

Definition at line 27 of file PipeBuffer.cc.

◆ publish()

void PipeBuffer::publish ( )
private

Definition at line 193 of file PipeBuffer.cc.

◆ read()

size_t PipeBuffer::read ( uint8_t *  destination,
size_t  count,
bool  block = true 
)

Definition at line 199 of file PipeBuffer.cc.

◆ readableGeneration()

uint64_t PipeBuffer::readableGeneration ( ) const

Definition at line 286 of file PipeBuffer.cc.

◆ readableLocked()

bool PipeBuffer::readableLocked ( ) const
private

Definition at line 98 of file PipeBuffer.cc.

◆ readyLocked()

PipeBuffer::Result PipeBuffer::readyLocked ( bool  writing,
size_t  minimum = 1 
) const
private

Definition at line 107 of file PipeBuffer.cc.

◆ reserveRead()

PipeBuffer::Result PipeBuffer::reserveRead ( size_t  maximum,
bool  block,
ReadReservation &  reservation 
)

Definition at line 105 of file PipeBuffer-transfer.cc.

◆ reserveWrite()

PipeBuffer::Result PipeBuffer::reserveWrite ( size_t  maximum,
bool  block,
WriteReservation &  reservation 
)

Definition at line 134 of file PipeBuffer-transfer.cc.

◆ resetLocked()

void PipeBuffer::resetLocked ( )
private

Definition at line 154 of file PipeBuffer.cc.

◆ transferTo()

PipeBuffer::Result PipeBuffer::transferTo ( PipeBuffer &  output,
size_t  maximum,
bool  consume,
bool  block 
)

Definition at line 198 of file PipeBuffer-transfer.cc.

◆ unlinkPairLocked()

void PipeBuffer::unlinkPairLocked ( PairLink &  link)
private

Definition at line 179 of file PipeBuffer-transfer.cc.

◆ wait()

bool PipeBuffer::wait ( ConditionVariable &  condition,
Mutex &  mutex 
)
staticprivate

Definition at line 38 of file PipeBuffer.cc.

◆ waitLocked()

PipeBuffer::Result PipeBuffer::waitLocked ( bool  writing,
size_t  minimum,
bool  block 
)
private

Definition at line 126 of file PipeBuffer.cc.

◆ waitTransfer()

PipeBuffer::Result PipeBuffer::waitTransfer ( bool  writing,
bool  block 
)

Definition at line 267 of file PipeBuffer.cc.

◆ wakePairsLocked()

void PipeBuffer::wakePairsLocked ( )
private

Definition at line 189 of file PipeBuffer-transfer.cc.

◆ wipe()

void PipeBuffer::wipe ( )

Definition at line 351 of file PipeBuffer.cc.

◆ writableGeneration()

uint64_t PipeBuffer::writableGeneration ( ) const

Definition at line 290 of file PipeBuffer.cc.

◆ writableLocked()

bool PipeBuffer::writableLocked ( ) const
private

Definition at line 102 of file PipeBuffer.cc.

◆ write()

size_t PipeBuffer::write ( const uint8_t *  source,
size_t  count,
bool  block = true 
)

Definition at line 220 of file PipeBuffer.cc.

◆ writeAtomic()

size_t PipeBuffer::writeAtomic ( const uint8_t *  source,
size_t  count,
bool  block = true 
)

Definition at line 248 of file PipeBuffer.cc.

Friends And Related Symbol Documentation

◆ PipeBufferTestPeer

friend class PipeBufferTestPeer
friend

Definition at line 85 of file PipeBuffer.h.

Member Data Documentation

◆ Capacity

constexpr size_t PipeBuffer::Capacity = 4096
staticconstexpr

Definition at line 14 of file PipeBuffer.h.

◆ m_ActiveOperations

size_t PipeBuffer::m_ActiveOperations = 0
private

Definition at line 133 of file PipeBuffer.h.

◆ m_Changed

const ChangeCallback PipeBuffer::m_Changed
private

Definition at line 141 of file PipeBuffer.h.

◆ m_Closing

bool PipeBuffer::m_Closing = false
private

Definition at line 127 of file PipeBuffer.h.

◆ m_Context

void* const PipeBuffer::m_Context
private

Definition at line 142 of file PipeBuffer.h.

◆ m_Data

uint8_t PipeBuffer::m_Data[Capacity]
private

Definition at line 122 of file PipeBuffer.h.

◆ m_DrainCondition

ConditionVariable PipeBuffer::m_DrainCondition
private

Definition at line 139 of file PipeBuffer.h.

◆ m_Head

size_t PipeBuffer::m_Head = 0
private

Definition at line 123 of file PipeBuffer.h.

◆ m_Lock

Mutex PipeBuffer::m_Lock
private

Definition at line 136 of file PipeBuffer.h.

◆ m_PairWaiters

PairLink* PipeBuffer::m_PairWaiters = nullptr
private

Definition at line 140 of file PipeBuffer.h.

◆ m_ReadCondition

ConditionVariable PipeBuffer::m_ReadCondition
private

Definition at line 137 of file PipeBuffer.h.

◆ m_ReadEnabled

bool PipeBuffer::m_ReadEnabled = true
private

Definition at line 125 of file PipeBuffer.h.

◆ m_ReadGeneration

Atomic<uint64_t> PipeBuffer::m_ReadGeneration
private

Definition at line 134 of file PipeBuffer.h.

◆ m_ReadReserved

bool PipeBuffer::m_ReadReserved = false
private

Definition at line 129 of file PipeBuffer.h.

◆ m_ResetPending

bool PipeBuffer::m_ResetPending = false
private

Definition at line 128 of file PipeBuffer.h.

◆ m_Size

size_t PipeBuffer::m_Size = 0
private

Definition at line 124 of file PipeBuffer.h.

◆ m_WasReadable

bool PipeBuffer::m_WasReadable = false
private

Definition at line 131 of file PipeBuffer.h.

◆ m_WasWritable

bool PipeBuffer::m_WasWritable = true
private

Definition at line 132 of file PipeBuffer.h.

◆ m_WriteCondition

ConditionVariable PipeBuffer::m_WriteCondition
private

Definition at line 138 of file PipeBuffer.h.

◆ m_WriteEnabled

bool PipeBuffer::m_WriteEnabled = true
private

Definition at line 126 of file PipeBuffer.h.

◆ m_WriteGeneration

Atomic<uint64_t> PipeBuffer::m_WriteGeneration
private

Definition at line 135 of file PipeBuffer.h.

◆ m_WriteReserved

bool PipeBuffer::m_WriteReserved = false
private

Definition at line 130 of file PipeBuffer.h.


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