StormByte C++ Library: Buffer module 1.2.0
StormByte-Buffer is the buffer module of the StormByte C++ suite.
Loading...
Searching...
No Matches
Protected Attributes | List of all members
StormByte::Buffer::Producer Class Referencefinal

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

#include <StormByte/buffer/producer.hxx>

Inheritance diagram for StormByte::Buffer::Producer:
Inheritance graph
[legend]
Collaboration diagram for StormByte::Buffer::Producer:
Collaboration graph
[legend]

Public Member Functions

Constructors / destructor / assignment
 Producer () noexcept
 Construct a Producer with a fresh shared Ring.
 
 Producer (std::shared_ptr< Ring > buffer) noexcept
 Construct a Producer that shares an existing Ring.
 
 Producer (const Consumer &consumer) noexcept
 Construct a Producer that shares the Ring of a Consumer.
 
 Producer (const Producer &other) noexcept
 Copy construct (shares the same Ring).
 
 Producer (Producer &&other) noexcept
 Move construct.
 
 ~Producer () noexcept override
 Destructor.
 
Produceroperator= (const Producer &other) noexcept
 Copy assignment (shares the same Ring afterwards).
 
Produceroperator= (Producer &&other) noexcept
 Move assignment.
 
Comparison
bool operator== (const Producer &other) const noexcept
 Equality comparison.
 
bool operator!= (const Producer &other) const noexcept
 Inequality comparison.
 
Lifecycle / queries
void Close () noexcept override
 Close the shared Ring for further writes.
 
void SetError () noexcept override
 Put the shared Ring into a permanent error state.
 
bool IsWritable () const noexcept override
 Whether the shared Ring still accepts writes.
 
Write
bool Write (const std::size_t &count, const DataType &data) noexcept override
 Append bytes from a DataType (copy).
 
bool Write (const DataType &data) noexcept
 Append an entire DataType (copy).
 
bool Write (const std::size_t &count, DataType &&data) noexcept override
 Append bytes from a DataType (move path).
 
bool Write (DataType &&data) noexcept
 Append an entire DataType (move path).
 
bool Write (const std::size_t &count, const ReadOnly &data) noexcept override
 Append bytes from a ReadOnly (copy path).
 
bool Write (const std::size_t &count, ReadOnly &&data) noexcept override
 Append bytes from a ReadOnly (move / extract path).
 
virtual bool Write (const std::size_t &count, const DataType &data) noexcept=0
 Bring WriteOnly convenience Write overloads into scope.
 
virtual bool Write (const std::size_t &count, DataType &&data) noexcept=0
 Bring WriteOnly convenience Write overloads into scope.
 
virtual bool Write (const std::size_t &count, const ReadOnly &data) noexcept=0
 Bring WriteOnly convenience Write overloads into scope.
 
virtual bool Write (const std::size_t &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 std::size_t &count, std::string_view sv) noexcept
 Bring WriteOnly convenience Write overloads into scope.
 
bool Write (const std::size_t &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 std::size_t &count, const Rw &r) noexcept
 Bring WriteOnly convenience Write overloads into scope.
 
template<Type::ByteInputRange Rrw>
bool Write (const std::size_t &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 std::size_t &count, I2 first, S2 last) noexcept
 Bring WriteOnly convenience Write overloads into scope.
 
Consumer factory
class Consumer Consumer ()
 Create a Consumer that shares this Producer’s Ring.
 
- Public Member Functions inherited from StormByte::Buffer::WriteOnly
 WriteOnly () noexcept
 Default construct.
 
 WriteOnly (const WriteOnly &)=default
 Copy construct.
 
 WriteOnly (WriteOnly &&) noexcept=default
 Move construct.
 
virtual ~WriteOnly () noexcept
 Virtual destructor.
 
WriteOnlyoperator= (const WriteOnly &)=default
 Copy assign.
 
WriteOnlyoperator= (WriteOnly &&) noexcept=default
 Move assign.
 
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 (move path).
 
bool Write (std::string_view sv) noexcept
 Write a string view (no trailing NUL).
 
bool Write (const char *s) noexcept
 Write a null-terminated C string.
 
bool Write (const std::size_t &count, std::string_view sv) noexcept
 Write up to count characters from a string view.
 
bool Write (const std::size_t &count, const char *s) noexcept
 Write up to count characters from 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 std::size_t &count, const Rw &r) noexcept
 Write up to count elements from an input range.
 
template<Type::ByteInputRange Rrw>
bool Write (const std::size_t &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 std::size_t &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 construct.
 
 Generic (const Generic &) noexcept=default
 Copy construct.
 
 Generic (Generic &&) noexcept=default
 Move construct.
 
virtual ~Generic () noexcept=0
 Pure virtual destructor (keeps the class abstract).
 
Genericoperator= (const Generic &other)=default
 Copy assign.
 
Genericoperator= (Generic &&) noexcept=default
 Move assign.
 

Protected Attributes

std::shared_ptr< Ringm_buffer
 Shared ring storage.
 

Additional Inherited Members

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

Detailed Description

Write-only handle over a shared Ring.

Multiple Producer instances may share the same underlying Ring, allowing concurrent writes in a fully thread-safe manner.

All operations delegate to the shared Ring. Use Consumer() to obtain a matching read-oriented handle on the same buffer.

See also
Consumer, Ring, WriteOnly

Constructor & Destructor Documentation

◆ Producer() [1/5]

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

Construct a Producer with a fresh shared Ring.

◆ Producer() [2/5]

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

Construct a Producer that shares an existing Ring.

Parameters
bufferShared ring instance (must not be null).

◆ Producer() [3/5]

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

Construct a Producer that shares the Ring of a Consumer.

Parameters
consumerConsumer whose underlying Ring will be shared.

◆ Producer() [4/5]

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

Copy construct (shares the same Ring).

Parameters
otherSource Producer.

◆ Producer() [5/5]

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

Move construct.

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.

Subsequent writes fail; readers may still drain data. Waiters on the Ring are notified.

Implements StormByte::Buffer::WriteOnly.

◆ Consumer()

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

Create a Consumer that shares this Producer’s Ring.

Returns
Consumer bound to the same underlying buffer.

◆ 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 comparison.

Parameters
otherOther Producer.
Returns
true if the underlying Ring instances differ.

◆ operator=() [1/2]

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

Copy assignment (shares the same Ring afterwards).

Parameters
otherSource Producer.
Returns
Reference to this Producer.

◆ operator=() [2/2]

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

Move assignment.

Parameters
otherSource Producer.
Returns
Reference to this Producer.

◆ operator==()

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

Equality comparison.

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

◆ SetError()

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

Put the shared Ring into a permanent error state.

Makes the buffer unreadable and unwritable; notifies waiters.

Implements StormByte::Buffer::WriteOnly.

◆ Write() [1/23]

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

Bring WriteOnly convenience Write overloads into scope.

◆ Write() [2/23]

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

Bring WriteOnly convenience Write overloads into scope.

◆ Write() [3/23]

bool StormByte::Buffer::Producer::Write ( const DataType data)
inlinenoexcept

Append an entire DataType (copy).

Parameters
dataSource vector.
Returns
true on success, false if closed / error.

◆ Write() [4/23]

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

Bring WriteOnly convenience Write overloads into scope.

◆ Write() [5/23]

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

Bring WriteOnly convenience Write overloads into scope.

◆ Write() [6/23]

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

Bring WriteOnly convenience Write overloads into scope.

◆ Write() [7/23]

bool StormByte::Buffer::Producer::Write ( const std::size_t &  count,
const DataType data 
)
overridevirtualnoexcept

Append bytes from a DataType (copy).

Parameters
countNumber of bytes to write.
dataSource vector.
Returns
true on success, false if closed / error.

Implements StormByte::Buffer::WriteOnly.

◆ Write() [8/23]

virtual bool StormByte::Buffer::WriteOnly::Write ( const std::size_t &  count,
const DataType data 
)
virtualnoexcept

Bring WriteOnly convenience Write overloads into scope.

Implements StormByte::Buffer::WriteOnly.

◆ Write() [9/23]

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

Append bytes from a ReadOnly (copy path).

Parameters
countNumber of bytes to write.
dataSource buffer.
Returns
true on success, false if closed / error.

Implements StormByte::Buffer::WriteOnly.

◆ Write() [10/23]

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

Bring WriteOnly convenience Write overloads into scope.

Implements StormByte::Buffer::WriteOnly.

◆ Write() [11/23]

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

Bring WriteOnly convenience Write overloads into scope.

◆ Write() [12/23]

bool StormByte::Buffer::Producer::Write ( const std::size_t &  count,
DataType &&  data 
)
overridevirtualnoexcept

Append bytes from a DataType (move path).

Parameters
countNumber of bytes to write.
dataSource vector.
Returns
true on success, false if closed / error.

Implements StormByte::Buffer::WriteOnly.

◆ Write() [13/23]

virtual bool StormByte::Buffer::WriteOnly::Write ( const std::size_t &  count,
DataType &&  data 
)
virtualnoexcept

Bring WriteOnly convenience Write overloads into scope.

Implements StormByte::Buffer::WriteOnly.

◆ Write() [14/23]

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

Bring WriteOnly convenience Write overloads into scope.

◆ Write() [15/23]

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

Append bytes from a ReadOnly (move / extract path).

Parameters
countNumber of bytes to write.
dataSource buffer.
Returns
true on success, false if closed / error.

Implements StormByte::Buffer::WriteOnly.

◆ Write() [16/23]

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

Bring WriteOnly convenience Write overloads into scope.

Implements StormByte::Buffer::WriteOnly.

◆ Write() [17/23]

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

Bring WriteOnly convenience Write overloads into scope.

◆ Write() [18/23]

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

Bring WriteOnly convenience Write overloads into scope.

◆ Write() [19/23]

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

Append an entire DataType (move path).

Parameters
dataSource vector.
Returns
true on success, false if closed / error.

◆ Write() [20/23]

template<Type::ByteInputIterator I, typename S >
requires Type::SentinelFor<S, I>
bool StormByte::Buffer::WriteOnly::Write ( first,
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 storage.


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