StormByte-Buffer 2.0.0
C++26 buffer module of the StormByte suite
 
Loading...
Searching...
No Matches
StormByte::Buffer::Producer Class Referencefinal

Write-only handle over a shared Ring. More...

#include <StormByte/buffer/producer.hxx>

Inheritance diagram for StormByte::Buffer::Producer:
Collaboration diagram for StormByte::Buffer::Producer:

Public Member Functions

class Consumer Consumer ()
 Consumer that shares this Producer’s Ring.
 
Lifecycle
 Producer () noexcept
 Construct a Producer with a new shared Ring.
 
 Producer (std::shared_ptr< Ring > buffer) noexcept
 Share an existing Ring.
 
 Producer (const Consumer &consumer) noexcept
 Share the Ring of a Consumer.
 
 Producer (const Producer &other) noexcept
 Copy constructor.
 
 Producer (Producer &&other) noexcept
 Move constructor.
 
 ~Producer () noexcept override
 Destructor.
 
Producer & operator= (const Producer &other) noexcept
 Copy assignment.
 
Producer & operator= (Producer &&other) noexcept
 Move assignment.
 
Comparison
bool operator== (const Producer &other) const noexcept
 Equality.
 
bool operator!= (const Producer &other) const noexcept
 Inequality.
 
Lifecycle / queries
void Close () noexcept override
 Close the shared Ring for further writes.
 
void SetError () noexcept override
 Permanent error on the shared Ring.
 
bool IsWritable () const noexcept override
 Whether the shared Ring still accepts writes.
 
StormByte::ByteSize Size () const noexcept override
 Bytes stored in the shared Ring right now.
 
Write
bool Write (const StormByte::ByteSize &count, const BinaryData &data) noexcept override
 Append bytes from a StormByte::BinaryData (copy).
 
bool Write (const BinaryData &data) noexcept
 Append an entire StormByte::BinaryData (copy).
 
bool Write (const StormByte::ByteSize &count, BinaryData &&data) noexcept override
 Append bytes from a StormByte::BinaryData (move).
 
bool Write (BinaryData &&data) noexcept
 Append an entire StormByte::BinaryData (move).
 
bool Write (const StormByte::ByteSize &count, const ReadOnly &data) noexcept override
 Append bytes from a ReadOnly (copy).
 
bool Write (const StormByte::ByteSize &count, ReadOnly &&data) noexcept override
 Append bytes from a ReadOnly (extract).
 
virtual bool Write (const StormByte::ByteSize &count, const BinaryData &data) noexcept=0
 Bring WriteOnly convenience Write overloads into scope.
 
virtual bool Write (const StormByte::ByteSize &count, BinaryData &&data) noexcept=0
 Bring WriteOnly convenience Write overloads into scope.
 
virtual bool Write (const StormByte::ByteSize &count, const ReadOnly &data) noexcept=0
 Bring WriteOnly convenience Write overloads into scope.
 
virtual bool Write (const StormByte::ByteSize &count, ReadOnly &&data) noexcept=0
 Bring WriteOnly convenience Write overloads into scope.
 
bool Write (const ReadOnly &data) noexcept
 Bring WriteOnly convenience Write overloads into scope.
 
bool Write (ReadOnly &&data) noexcept
 Bring WriteOnly convenience Write overloads into scope.
 
bool Write (std::string_view sv) noexcept
 Bring WriteOnly convenience Write overloads into scope.
 
bool Write (const char *s) noexcept
 Bring WriteOnly convenience Write overloads into scope.
 
bool Write (const StormByte::ByteSize &count, std::string_view sv) noexcept
 Bring WriteOnly convenience Write overloads into scope.
 
bool Write (const StormByte::ByteSize &count, const char *s) noexcept
 Bring WriteOnly convenience Write overloads into scope.
 
template<std::size_t N>
bool Write (const char(&s)[N]) noexcept
 Bring WriteOnly convenience Write overloads into scope.
 
template<Type::ByteInputRange R>
bool Write (const R &r) noexcept
 Bring WriteOnly convenience Write overloads into scope.
 
template<Type::ByteInputRange Rw>
bool Write (const StormByte::ByteSize &count, const Rw &r) noexcept
 Bring WriteOnly convenience Write overloads into scope.
 
template<Type::ByteInputRange Rrw>
bool Write (const StormByte::ByteSize &count, Rrw &&r) noexcept
 Bring WriteOnly convenience Write overloads into scope.
 
template<Type::ByteInputRange Rr>
bool Write (Rr &&r) noexcept
 Bring WriteOnly convenience Write overloads into scope.
 
template<Type::ByteInputIterator I, typename S >
requires Type::SentinelFor<S, I>
bool Write (I first, S last) noexcept
 Bring WriteOnly convenience Write overloads into scope.
 
template<Type::ByteInputIterator I2, typename S2 >
requires Type::SentinelFor<S2, I2>
bool Write (const StormByte::ByteSize &count, I2 first, S2 last) noexcept
 Bring WriteOnly convenience Write overloads into scope.
 
- Public Member Functions inherited from StormByte::Buffer::WriteOnly
 WriteOnly () noexcept
 Default constructor.
 
 WriteOnly (const WriteOnly &other)=default
 Copy constructor.
 
 WriteOnly (WriteOnly &&other) noexcept=default
 Move constructor.
 
virtual ~WriteOnly () noexcept
 Destructor.
 
WriteOnly & operator= (const WriteOnly &other)=default
 Copy assignment.
 
WriteOnly & operator= (WriteOnly &&other) noexcept=default
 Move assignment.
 
bool Write (const ReadOnly &data) noexcept
 Append all available bytes from a ReadOnly (copy).
 
bool Write (ReadOnly &&data) noexcept
 Append all available bytes from a ReadOnly (extract).
 
bool Write (std::string_view sv) noexcept
 Write a string view.
 
bool Write (const char *s) noexcept
 Write a C string.
 
bool Write (const StormByte::ByteSize &count, std::string_view sv) noexcept
 Write up to count characters of a string view.
 
bool Write (const StormByte::ByteSize &count, const char *s) noexcept
 Write up to count characters of a C string.
 
template<std::size_t N>
bool Write (const char(&s)[N]) noexcept
 Write a string literal without the trailing NUL.
 
template<Type::ByteInputRange R>
bool Write (const R &r) noexcept
 Write all elements from an input range.
 
template<Type::ByteInputRange Rw>
bool Write (const StormByte::ByteSize &count, const Rw &r) noexcept
 Write up to count elements from an input range.
 
template<Type::ByteInputRange Rrw>
bool Write (const StormByte::ByteSize &count, Rrw &&r) noexcept
 Write up to count elements from an rvalue range.
 
template<Type::ByteInputRange Rr>
bool Write (Rr &&r) noexcept
 Write all elements from an rvalue range.
 
template<Type::ByteInputIterator I, typename S >
requires Type::SentinelFor<S, I>
bool Write (I first, S last) noexcept
 Write all elements from an iterator pair.
 
template<Type::ByteInputIterator I2, typename S2 >
requires Type::SentinelFor<S2, I2>
bool Write (const StormByte::ByteSize &count, I2 first, S2 last) noexcept
 Write up to count elements from an iterator pair.
 
- Public Member Functions inherited from StormByte::Buffer::Generic
 Generic () noexcept=default
 Default constructor.
 
 Generic (const Generic &other) noexcept=default
 Copy constructor.
 
 Generic (Generic &&other) noexcept=default
 Move constructor.
 
virtual ~Generic () noexcept=0
 Pure virtual destructor.
 
Generic & operator= (const Generic &other)=default
 Copy assignment.
 
Generic & operator= (Generic &&other) noexcept=default
 Move assignment.
 

Protected Attributes

std::shared_ptr< Ring > m_buffer
 Shared ring. Not null after construction.
 

Additional Inherited Members

- Static Protected Member Functions inherited from StormByte::Buffer::Generic
template<Type::ByteInputRange Src>
static BinaryData DataConvert (const Src &src) noexcept
 Convert an lvalue input range to StormByte::BinaryData.
 
template<Type::ByteInputRange Src>
static BinaryData DataConvert (Src &&src) noexcept
 Convert an rvalue input range to StormByte::BinaryData.
 
static BinaryData DataConvert (std::string_view sv) noexcept
 Convert a string view to StormByte::BinaryData.
 
static BinaryData DataConvert (const char *s) noexcept
 Convert a C string to StormByte::BinaryData.
 

Detailed Description

Write-only handle over a shared Ring.

Several Producer instances may share the same Ring. Writes are thread-safe. Occupancy is Generic::Size of that Ring. Consumer() returns a matching reader on the same store.

See also
Consumer, Ring, WriteOnly

Constructor & Destructor Documentation

◆ Producer() [1/5]

StormByte::Buffer::Producer::Producer ( )
inlinenoexcept

Construct a Producer with a new shared Ring.

◆ Producer() [2/5]

StormByte::Buffer::Producer::Producer ( std::shared_ptr< Ring >  buffer)
inlineexplicitnoexcept

Share an existing Ring.

Parameters
bufferShared ring. Must not be null.

◆ Producer() [3/5]

StormByte::Buffer::Producer::Producer ( const Consumer &  consumer)
inlinenoexcept

Share the Ring of a Consumer.

Parameters
consumerConsumer whose Ring is shared.

◆ Producer() [4/5]

StormByte::Buffer::Producer::Producer ( const Producer &  other)
inlinenoexcept

Copy constructor.

Shares the same Ring.

Parameters
otherSource Producer.

◆ Producer() [5/5]

StormByte::Buffer::Producer::Producer ( Producer &&  other)
inlinenoexcept

Move constructor.

Parameters
otherSource Producer.

◆ ~Producer()

StormByte::Buffer::Producer::~Producer ( )
overridenoexcept

Destructor.

Member Function Documentation

◆ Close()

void StormByte::Buffer::Producer::Close ( )
overridevirtualnoexcept

Close the shared Ring for further writes.

Later writes fail. Readers may still drain. Waiters are notified.

Implements StormByte::Buffer::WriteOnly.

◆ Consumer()

class Consumer StormByte::Buffer::Producer::Consumer ( )
inline

Consumer that shares this Producer’s Ring.

Returns
Consumer bound to the same store.

◆ IsWritable()

bool StormByte::Buffer::Producer::IsWritable ( ) const
overridevirtualnoexcept

Whether the shared Ring still accepts writes.

Returns
false if closed or in error.

Implements StormByte::Buffer::WriteOnly.

◆ operator!=()

bool StormByte::Buffer::Producer::operator!= ( const Producer &  other) const
inlinenoexcept

Inequality.

Parameters
otherOther Producer.
Returns
true if the Rings differ.

◆ operator=() [1/2]

Producer & StormByte::Buffer::Producer::operator= ( const Producer &  other)
inlinenoexcept

Copy assignment.

Shares the same Ring afterwards.

Parameters
otherSource Producer.
Returns
*this.

◆ operator=() [2/2]

Producer & StormByte::Buffer::Producer::operator= ( Producer &&  other)
inlinenoexcept

Move assignment.

Parameters
otherSource Producer.
Returns
*this.

◆ operator==()

bool StormByte::Buffer::Producer::operator== ( const Producer &  other) const
inlinenoexcept

Equality.

Same underlying Ring instance.

Parameters
otherOther Producer.
Returns
true if both refer to the same Ring.

◆ SetError()

void StormByte::Buffer::Producer::SetError ( )
overridevirtualnoexcept

Permanent error on the shared Ring.

Notifies waiters.

Implements StormByte::Buffer::WriteOnly.

◆ Size()

StormByte::ByteSize StormByte::Buffer::Producer::Size ( ) const
overridevirtualnoexcept

Bytes stored in the shared Ring right now.

Returns
Size in bytes. 0 if empty.

Implements StormByte::Buffer::Generic.

◆ Write() [1/23]

bool StormByte::Buffer::Producer::Write ( BinaryData &&  data)
inlinenoexcept

Append an entire StormByte::BinaryData (move).

Parameters
dataSource.
Returns
false if closed or in error.

◆ Write() [2/23]

bool StormByte::Buffer::Producer::Write ( const BinaryData &  data)
inlinenoexcept

Append an entire StormByte::BinaryData (copy).

Parameters
dataSource.
Returns
false if closed or in error.

◆ Write() [3/23]

bool StormByte::Buffer::WriteOnly::Write ( const char *  s)
inlinenoexcept

Bring WriteOnly convenience Write overloads into scope.

◆ Write() [4/23]

template<std::size_t N>
bool StormByte::Buffer::WriteOnly::Write ( const char(&)  s[N])
inlinenoexcept

Bring WriteOnly convenience Write overloads into scope.

◆ Write() [5/23]

template<Type::ByteInputRange R>
bool StormByte::Buffer::WriteOnly::Write ( const R &  r)
inlinenoexcept

Bring WriteOnly convenience Write overloads into scope.

◆ Write() [6/23]

bool StormByte::Buffer::WriteOnly::Write ( const ReadOnly &  data)
inlinenoexcept

Bring WriteOnly convenience Write overloads into scope.

◆ Write() [7/23]

bool StormByte::Buffer::Producer::Write ( const StormByte::ByteSize &  count,
BinaryData &&  data 
)
overridevirtualnoexcept

Append bytes from a StormByte::BinaryData (move).

Parameters
countBytes to write.
dataSource.
Returns
false if closed or in error.

Implements StormByte::Buffer::WriteOnly.

◆ Write() [8/23]

virtual bool StormByte::Buffer::WriteOnly::Write ( const StormByte::ByteSize &  count,
BinaryData &&  data 
)
virtualnoexcept

Bring WriteOnly convenience Write overloads into scope.

Implements StormByte::Buffer::WriteOnly.

◆ Write() [9/23]

bool StormByte::Buffer::Producer::Write ( const StormByte::ByteSize &  count,
const BinaryData &  data 
)
overridevirtualnoexcept

Append bytes from a StormByte::BinaryData (copy).

Parameters
countBytes to write.
dataSource.
Returns
false if closed or in error.

Implements StormByte::Buffer::WriteOnly.

◆ Write() [10/23]

virtual bool StormByte::Buffer::WriteOnly::Write ( const StormByte::ByteSize &  count,
const BinaryData &  data 
)
virtualnoexcept

Bring WriteOnly convenience Write overloads into scope.

Implements StormByte::Buffer::WriteOnly.

◆ Write() [11/23]

bool StormByte::Buffer::WriteOnly::Write ( const StormByte::ByteSize &  count,
const char *  s 
)
inlinenoexcept

Bring WriteOnly convenience Write overloads into scope.

◆ Write() [12/23]

bool StormByte::Buffer::Producer::Write ( const StormByte::ByteSize &  count,
const ReadOnly &  data 
)
overridevirtualnoexcept

Append bytes from a ReadOnly (copy).

Parameters
countBytes to write.
dataSource buffer.
Returns
false if closed or in error.

Implements StormByte::Buffer::WriteOnly.

◆ Write() [13/23]

virtual bool StormByte::Buffer::WriteOnly::Write ( const StormByte::ByteSize &  count,
const ReadOnly &  data 
)
virtualnoexcept

Bring WriteOnly convenience Write overloads into scope.

Implements StormByte::Buffer::WriteOnly.

◆ Write() [14/23]

template<Type::ByteInputRange Rw>
bool StormByte::Buffer::WriteOnly::Write ( const StormByte::ByteSize &  count,
const Rw &  r 
)
inlinenoexcept

Bring WriteOnly convenience Write overloads into scope.

◆ Write() [15/23]

template<Type::ByteInputIterator I2, typename S2 >
requires Type::SentinelFor<S2, I2>
bool StormByte::Buffer::WriteOnly::Write ( const StormByte::ByteSize &  count,
I2  first,
S2  last 
)
inlinenoexcept

Bring WriteOnly convenience Write overloads into scope.

◆ Write() [16/23]

bool StormByte::Buffer::Producer::Write ( const StormByte::ByteSize &  count,
ReadOnly &&  data 
)
overridevirtualnoexcept

Append bytes from a ReadOnly (extract).

Parameters
countBytes to write.
dataSource buffer.
Returns
false if closed or in error.

Implements StormByte::Buffer::WriteOnly.

◆ Write() [17/23]

virtual bool StormByte::Buffer::WriteOnly::Write ( const StormByte::ByteSize &  count,
ReadOnly &&  data 
)
virtualnoexcept

Bring WriteOnly convenience Write overloads into scope.

Implements StormByte::Buffer::WriteOnly.

◆ Write() [18/23]

template<Type::ByteInputRange Rrw>
bool StormByte::Buffer::WriteOnly::Write ( const StormByte::ByteSize &  count,
Rrw &&  r 
)
inlinenoexcept

Bring WriteOnly convenience Write overloads into scope.

◆ Write() [19/23]

bool StormByte::Buffer::WriteOnly::Write ( const StormByte::ByteSize &  count,
std::string_view  sv 
)
inlinenoexcept

Bring WriteOnly convenience Write overloads into scope.

◆ Write() [20/23]

template<Type::ByteInputIterator I, typename S >
requires Type::SentinelFor<S, I>
bool StormByte::Buffer::WriteOnly::Write ( I  first,
S  last 
)
inlinenoexcept

Bring WriteOnly convenience Write overloads into scope.

◆ Write() [21/23]

bool StormByte::Buffer::WriteOnly::Write ( ReadOnly &&  data)
inlinenoexcept

Bring WriteOnly convenience Write overloads into scope.

◆ Write() [22/23]

template<Type::ByteInputRange Rr>
bool StormByte::Buffer::WriteOnly::Write ( Rr &&  r)
inlinenoexcept

Bring WriteOnly convenience Write overloads into scope.

◆ Write() [23/23]

bool StormByte::Buffer::WriteOnly::Write ( std::string_view  sv)
inlinenoexcept

Bring WriteOnly convenience Write overloads into scope.

Member Data Documentation

◆ m_buffer

std::shared_ptr<Ring> StormByte::Buffer::Producer::m_buffer
protected

Shared ring. Not null after construction.


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