Program Listing for File ZeroCopyBufferManager.hpp

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

#ifndef NETIO3BACKEND_BACKENDLIBFABRIC_ZEROCOPYBUFFERMANAGER_HPP
#define NETIO3BACKEND_BACKENDLIBFABRIC_ZEROCOPYBUFFERMANAGER_HPP

#include <tracy/Tracy.hpp>

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

namespace netio3::libfabric {
  class ZeroCopyBufferManager
  {
  public:
    ZeroCopyBufferManager(ConnectionParametersSendZeroCopy connection_params, DomainManager& domain_manager);
    ZeroCopyBufferManager(const ZeroCopyBufferManager&) = delete;
    ZeroCopyBufferManager(ZeroCopyBufferManager&&) = delete;
    ZeroCopyBufferManager& operator=(const ZeroCopyBufferManager&) = delete;
    ZeroCopyBufferManager& operator=(ZeroCopyBufferManager&&) = delete;

    ~ZeroCopyBufferManager();

    [[nodiscard]] fid_mr* get_mr() const { return m_mr.mr; }

    [[nodiscard]] fid_mr* get_header_mr() const { return m_header_buffer.mr; }

    [[nodiscard]] HeaderBuffer::HeaderWrapper get_header(const std::span<const std::uint8_t> header_data, const std::uint64_t key);

    [[nodiscard]] std::uint64_t return_header(std::uint64_t bufnum);

    [[nodiscard]] std::size_t get_num_available_buffers();

    [[nodiscard]] std::vector<std::uint64_t> get_pending_sends();

  private:
    void init_buffers(DomainManager& domain_manager);

    ConnectionParametersSendZeroCopy m_conn_parameters{};
    Buffer m_mr;
    HeaderBuffer m_header_buffer;
  };
}  // namespace netio3::libfabric

#endif  // NETIO3BACKEND_BACKENDLIBFABRIC_ZEROCOPYBUFFERMANAGER_HPP