Program Listing for File ReceiveBufferManager.hpp

Return to documentation for file (BackendLibfabric/ReceiveBufferManager.hpp)

#ifndef NETIO3BACKEND_BACKENDLIBFABRIC_RECEIVEBUFFERMANAGER_HPP
#define NETIO3BACKEND_BACKENDLIBFABRIC_RECEIVEBUFFERMANAGER_HPP

#include "Buffer.hpp"
#include "netio3-backend/Netio3Backend.hpp"

namespace netio3::libfabric {
  class ReceiveBufferManager
  {
  public:
    ReceiveBufferManager(DomainManager& domain_manager,
                         fid_ep* ep,
                         const ConnectionParametersRecv& conn_params,
                         const fi_info* info,
                         BaseEventLoop* event_loop);
    ReceiveBufferManager(const ReceiveBufferManager&) = delete;
    ReceiveBufferManager(ReceiveBufferManager&&) = default;
    ReceiveBufferManager& operator=(const ReceiveBufferManager&) = delete;
    ReceiveBufferManager& operator=(ReceiveBufferManager&&) = default;

    ~ReceiveBufferManager();

    void post_buffer(Buffer* buf);

  private:
    void init_buffers(DomainManager& domain_manager);

    void post_buffers();

    [[nodiscard]] int do_post_buffer(Buffer* buf) const;

    void retry_post_buffers();

    [[nodiscard]] ConnectionParametersRecv prepare_connection_parameters(
      const ConnectionParametersRecv& requested, const fi_info* info) const;

    fid_ep* m_ep{nullptr};
    ConnectionParametersRecv m_conn_params{};
    std::vector<Buffer> m_buffers;
    std::vector<Buffer*> m_retry_post_buffers{};
    EventSignalHandle m_retry_post_signal;
  };
}  // namespace netio3::libfabric

#endif  // NETIO3BACKEND_BACKENDLIBFABRIC_RECEIVEBUFFERMANAGER_HPP