.. _program_listing_file_BackendLibfabric_SendBufferManager.cpp: Program Listing for File SendBufferManager.cpp ============================================== |exhale_lsh| :ref:`Return to documentation for file ` (``BackendLibfabric/SendBufferManager.cpp``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #include "SendBufferManager.hpp" #include netio3::libfabric::SendBufferManager::SendBufferManager( ConnectionParametersSendBuffered connection_params, DomainManager& domain_manager) : m_conn_parameters{std::move(connection_params)} { init_buffers(domain_manager); } netio3::libfabric::SendBufferManager::~SendBufferManager() { ERS_DEBUG(2, "Entered"); for (const auto& buffer : m_buffers) { close_buffer(buffer); } ERS_DEBUG(2, "Finished"); } std::size_t netio3::libfabric::SendBufferManager::get_num_available_buffers() { ZoneScoped; return m_min_num_available_buffers.exchange( m_num_available_buffers.load(std::memory_order_relaxed), std::memory_order_relaxed); } void netio3::libfabric::SendBufferManager::init_buffers(DomainManager& domain_manager) { ZoneScoped; ERS_DEBUG(2, std::format("Registering {} buffers of size {}", m_conn_parameters.num_buf, m_conn_parameters.buf_size)); m_buffers.reserve(m_conn_parameters.num_buf); for (std::uint64_t key = 0; key < m_conn_parameters.num_buf; ++key) { m_buffers.emplace_back(m_conn_parameters.buf_size, key); register_buffer(m_buffers.back(), domain_manager, FI_SEND); m_available_buffers.push(key); ++m_num_available_buffers; } m_min_num_available_buffers = m_num_available_buffers.load(); }