Program Listing for File SharedBufferManager.hpp

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

#ifndef NETIO3BACKEND_BACKENDLIBFABRIC_SHAREDBUFFERMANAGER_HPP
#define NETIO3BACKEND_BACKENDLIBFABRIC_SHAREDBUFFERMANAGER_HPP

#include "DomainManager.hpp"
#include "SendBufferManager.hpp"
#include "SharedReceiveContextManager.hpp"
#include "ZeroCopyBufferManager.hpp"
#include "netio3-backend/Netio3Backend.hpp"

namespace netio3::libfabric {
  class SharedBufferManager
  {
  public:
    explicit SharedBufferManager(const NetworkConfig& config,
                           DomainManager& domain_manager,
                           BaseEventLoop* event_loop);

    [[nodiscard]] const std::optional<SharedReceiveContextManager>& get_receive_context_manager() const
    {
      return m_receive_context_manager;
    }
    [[nodiscard]] std::optional<SharedReceiveContextManager>& get_receive_context_manager()
    {
      return m_receive_context_manager;
    }

    [[nodiscard]] const std::optional<SendBufferManager>& get_send_buffer_manager() const
    {
      return m_send_buffer_manager;
    }
    [[nodiscard]] std::optional<SendBufferManager>& get_send_buffer_manager()
    {
      return m_send_buffer_manager;
    }

    [[nodiscard]] const std::optional<ZeroCopyBufferManager>& get_zero_copy_buffer_manager() const
    {
      return m_zero_copy_buffer_manager;
    }
    [[nodiscard]] std::optional<ZeroCopyBufferManager>& get_zero_copy_buffer_manager()
    {
      return m_zero_copy_buffer_manager;
    }

  private:
    [[nodiscard]] std::optional<SharedReceiveContextManager> create_shared_receive_context(
      const NetworkConfig& config,
      DomainManager& domain_manager,
      BaseEventLoop* event_loop);

    [[nodiscard]] std::optional<SendBufferManager> create_send_buffer_manager(
      const NetworkConfig& config, DomainManager& domain_manager);

    [[nodiscard]] std::optional<ZeroCopyBufferManager> create_zero_copy_buffer_manager(
      const NetworkConfig& config, DomainManager& domain_manager);

    std::optional<SharedReceiveContextManager> m_receive_context_manager{};
    std::optional<SendBufferManager> m_send_buffer_manager{};
    std::optional<ZeroCopyBufferManager> m_zero_copy_buffer_manager{};
  };
}  // namespace netio3::libfabric

#endif  // NETIO3BACKEND_BACKENDLIBFABRIC_SHAREDBUFFERMANAGER_HPP