12#ifndef RTCTK_COMPONENTFRAMEWORK_BUFFERMANAGER_HPP
13#define RTCTK_COMPONENTFRAMEWORK_BUFFERMANAGER_HPP
15#include "numapp/mempolicy.hpp"
20#include <boost/lockfree/policies.hpp>
21#include <boost/lockfree/stack.hpp>
25#include <gtest/gtest.h>
81 const std::shared_ptr<BufferStorage> m_storage;
95 const std::string& description,
96 const std::string& prefix,
98 const std::optional<numapp::MemPolicy>& policy = {});
104 std::shared_ptr<BufferReference>
Get();
112 class BufferStorage {
115 BufferStorage() =
delete;
116 BufferStorage(
const BufferStorage&) =
delete;
117 BufferStorage& operator=(
const BufferStorage&) =
delete;
123 std::shared_ptr<uint8_t[]> buffer_storage);
127 void Return(
Buffer buffer);
135 std::optional<Buffer> Get();
142 boost::lockfree::stack<Buffer, boost::lockfree::fixed_sized<true>> m_buffer_stack;
143 std::shared_ptr<uint8_t[]> m_buffer_storage;
144 std::atomic<size_t> m_used;
147 std::shared_ptr<BufferStorage> m_storage;
148 const size_t m_buffers;
149 BufferMonitor<> m_buffer_monitor;
150 const std::string m_description;
152 FRIEND_TEST(TestBufferManager, Internal);
Header file for Buffer Monitor.
void operator=(BufferReference &&)=delete
Buffer GetBuffer() const
Return span to the buffer.
Definition bufferManager.cpp:118
BufferReference(BufferReference &&)=delete
void operator=(const BufferReference &)=delete
~BufferReference()
Definition bufferManager.cpp:122
BufferReference(const BufferReference &)=delete
gsl::span< uint8_t > Buffer
The span definition of a subbuffer.
Definition bufferManager.hpp:53
std::shared_ptr< BufferReference > Get()
Get a new buffer from the pool, throws when no buffers are available.
Definition bufferManager.cpp:63
std::shared_ptr< BufferReference > BlockingGet()
Same as get, but will not throw but blocks until buffer is free.
Definition bufferManager.cpp:72
Component metrics interface.
Definition componentMetricsIf.hpp:164
NoBufferAvailableException(const std::string &buffer_name)
Definition bufferManager.cpp:22
RtctkException() noexcept
Definition exceptions.cpp:113
Header file for ComponentMetricsIf.
Provides macros and utilities for exception handling.
Definition commandReplier.cpp:22