TypeIndexedDoubleBuffer.ixx File
Double-buffered, type-indexed message system for decoupled inter-system communication. More...
Included Headers
#include <memory>
#include <span>
#include <vector>
#include <cstddef>
#include <helios.engine.core.container.buffer:ReadWriteDoubleBuffer>
#include <helios.engine.core.container.buffer.concepts.IsTypeIndexerLike>
Namespaces Index
| namespace | helios |
| namespace | engine |
| namespace | core |
| namespace | container |
| namespace | buffer |
Classes Index
| class | TypeIndexedDoubleBuffer<Indexer> |
|
Central hub for publishing and consuming typed messages. More... | |
| class | WriteSink |
|
Lightweight handle for pushing messages to a TypeIndexedDoubleBuffer. More... | |
| class | ReadSource |
|
Lightweight handle for reading messages from a TypeIndexedDoubleBuffer. More... | |
Description
Double-buffered, type-indexed message system for decoupled inter-system communication.
File Listing
The file content with the documentation metadata removed is:
21export namespace helios::engine::core::container::buffer {
58 requires IsTypeIndexerLike<Indexer>
59 class TypeIndexedDoubleBuffer {
75 return Indexer::template typeIndex<T>();
83 ~TypeIndexedDoubleBuffer() = default;
88 TypeIndexedDoubleBuffer() = default;
98 template<typename T, typename... Args>
100 getOrCreateBuffer<T>().push(std::forward<Args>(args)...);
122 return static_cast<ReadWriteDoubleBuffer<T>*>(buffers_[idx].get())->read();
136 getOrCreateBuffer<T>().reserve(size);
150 if (buffers_.size() <= idx) {
151 buffers_.resize(idx + 1);
154 if (!buffers_[idx]) {
155 buffers_[idx] = std::make_unique<ReadWriteDoubleBuffer<T>>();
158 return *static_cast<ReadWriteDoubleBuffer<T>*>(buffers_[idx].get());
167 void swapBuffers() {
180 void clearReadBuffers() {
193 void clearWriteBuffers() {
208 clearReadBuffers();
209 clearWriteBuffers();
229 TypeIndexedDoubleBuffer* db_ = nullptr;
265 class ReadSource {
270 TypeIndexedDoubleBuffer* db_ = nullptr;
279 explicit ReadSource(TypeIndexedDoubleBuffer& db) noexcept : db_(&db) {}
290 return db_->template read<E>();
300 return WriteSink(*this);
308 [[nodiscard]] ReadSource readSource() noexcept {
309 return ReadSource(*this);
Generated via doxygen2docusaurus 2.0.0 by Doxygen 1.9.8.