Skip to main content

ReadWriteDoubleBuffer Class Template

Type-safe double-buffered container for messages of type T. More...

Declaration

template <typename T> class helios::core::data::ReadWriteDoubleBuffer<T> { ... }

Base class

classBufferBase

Public Member Functions Index

template <typename T>
voidreserve (size_t size)

Pre-allocates memory for both buffers. More...

template <typename... Args>
voidpush (Args &&... args)

Constructs and pushes a message to the write buffer. More...

template <typename T>
auto read () const noexcept -> std::span< const T >

Returns a read-only view of messages in the read buffer. More...

template <typename T>
voidswap () override

Swaps read with write buffer. More...

template <typename T>
voidclearReadBuffer () override

Clears the read buffer. More...

template <typename T>
voidclearWriteBuffer () override

Clears the write buffer. More...

Private Member Attributes Index

template <typename T>
ReadBuffer< T >readBuffer_

Buffer containing messages available for reading. More...

template <typename T>
WriteBuffer< T >writeBuffer_

Buffer where new messages are pushed. More...

Description

Type-safe double-buffered container for messages of type T.

Implements a producer-consumer pattern where messages are written to one buffer while consumers read from another. This decouples message production from consumption and allows lock-free operation in single-threaded game loops.

Template Parameters
T

The message type stored in this buffer. Must be movable.

Definition at line 15 of file ReadBuffer.ixx.

Public Member Functions

clearReadBuffer()

template <typename T>
void helios::core::data::ReadWriteDoubleBuffer< T >::clearReadBuffer ()
inline

Clears the read buffer.

Definition at line 128 of file TypeIndexedDoubleBuffer.ixx.

128 void clearReadBuffer() override {
129 readBuffer_.clear();
130 }

clearWriteBuffer()

template <typename T>
void helios::core::data::ReadWriteDoubleBuffer< T >::clearWriteBuffer ()
inline

Clears the write buffer.

Definition at line 135 of file TypeIndexedDoubleBuffer.ixx.

135 void clearWriteBuffer() override {
136 writeBuffer_.clear();
137 }

push()

template <typename... Args>
void helios::core::data::ReadWriteDoubleBuffer< T >::push (Args &&... args)
inline

Constructs and pushes a message to the write buffer.

Template Parameters
Args

Constructor argument types for T.

Parameters
args

Arguments forwarded to T's constructor.

Definition at line 102 of file TypeIndexedDoubleBuffer.ixx.

102 void push(Args&&... args) {
103 writeBuffer_.push(std::forward<Args>(args)...);
104 }

read()

template <typename T>
std::span< const T > helios::core::data::ReadWriteDoubleBuffer< T >::read ()
inline noexcept

Returns a read-only view of messages in the read buffer.

Returns

A span over all messages written in the previous frame.

Definition at line 111 of file TypeIndexedDoubleBuffer.ixx.

111 std::span<const T> read() const noexcept {
112 return readBuffer_.read();
113 }

Referenced by helios::core::data::TypeIndexedDoubleBuffer< helios::core::data::TypeIndexer< GameLoopEventBusGroup > >::read.

reserve()

template <typename T>
void helios::core::data::ReadWriteDoubleBuffer< T >::reserve (size_t size)
inline

Pre-allocates memory for both buffers.

Parameters
size

The number of messages to reserve capacity for.

Definition at line 89 of file TypeIndexedDoubleBuffer.ixx.

89 void reserve(size_t size) {
90 readBuffer_.reserve(size);
91 writeBuffer_.reserve(size);
92 }

swap()

template <typename T>
void helios::core::data::ReadWriteDoubleBuffer< T >::swap ()
inline

Swaps read with write buffer.

Swaps the read- with the write-buffer. The write buffer is empty after this operation, while the read buffer contains the contents of the write buffer.

Definition at line 121 of file TypeIndexedDoubleBuffer.ixx.

121 void swap() override {
122 readBuffer_.clear().bufferData().swap(writeBuffer_.bufferData());
123 }

Private Member Attributes

readBuffer_

template <typename T>
ReadBuffer<T> helios::core::data::ReadWriteDoubleBuffer< T >::readBuffer_

Buffer containing messages available for reading.

Definition at line 74 of file TypeIndexedDoubleBuffer.ixx.

74 ReadBuffer<T> readBuffer_;

writeBuffer_

template <typename T>
WriteBuffer<T> helios::core::data::ReadWriteDoubleBuffer< T >::writeBuffer_

Buffer where new messages are pushed.

Definition at line 79 of file TypeIndexedDoubleBuffer.ixx.

79 WriteBuffer<T> writeBuffer_;

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


Generated via doxygen2docusaurus 2.0.0 by Doxygen 1.15.0.