Program Listing for File Buffer.hpp
↰ Return to documentation for file (BackendAsyncmsg/Buffer.hpp
)
#ifndef NETIO3BACKEND_BACKENDASYNCMSG_BUFFER_HPP
#define NETIO3BACKEND_BACKENDASYNCMSG_BUFFER_HPP
#include <cstdint>
#include <ers/ers.h>
#include <tbb/concurrent_queue.h>
#include "netio3-backend/NetworkBuffer.hpp"
#include "netio3-backend/Netio3Backend.hpp"
ERS_DECLARE_ISSUE(netio3, TcpNoBuffers, "No buffers allocated", ) // cppcheck-suppress syntaxError
namespace netio3::asyncmsg {
using Key = std::uint64_t;
class Buffer : public NetworkBuffer
{
public:
Buffer(const std::size_t size, const Key key) : NetworkBuffer(size), m_key{key} {}
[[nodiscard]] Key getKey() const { return m_key; }
private:
Key m_key{};
};
class BufferManager
{
public:
explicit BufferManager(const ConnectionParameters& params);
[[nodiscard]] NetworkBuffer* getBuffer();
void returnBuffer(const NetworkBuffer* buffer);
void returnBuffer(Key key);
[[nodiscard]] std::size_t getNumAvailableBuffers();
private:
[[nodiscard]] static std::map<Key, Buffer> initBuffers(const ConnectionParameters& params);
std::map<Key, Buffer> m_buffers;
tbb::concurrent_bounded_queue<Key> m_availableBuffers;
std::atomic<std::size_t> m_minNumAvailableBuffers{0};
};
} // namespace netio3::asyncmsg
#endif // NETIO3BACKEND_BACKENDASYNCMSG_BUFFER_HPP