request_am.h
1 
5 #pragma once
6 #include <cstddef>
7 #include <memory>
8 #include <string>
9 #include <utility>
10 #include <vector>
11 
12 #include <ucp/api/ucp.h>
13 
14 #include <ucxx/delayed_submission.h>
15 #include <ucxx/request.h>
16 #include <ucxx/request_am_builder.h>
17 #include <ucxx/typedefs.h>
18 
19 namespace ucxx {
20 
21 class Buffer;
22 
23 namespace internal {
24 class RecvAmMessage;
25 } // namespace internal
26 
33 class RequestAm : public Request {
34  private:
35  friend class internal::RecvAmMessage;
36 
37  std::vector<std::byte> _header{};
40 
66  RequestAm(std::shared_ptr<Component> endpointOrWorker,
67  const std::variant<data::AmSend, data::AmReceive> requestData,
68  std::string operationName,
69  const bool enablePythonFuture = false,
70  RequestCallbackUserFunction callbackFunction = nullptr,
71  RequestCallbackUserData callbackData = nullptr);
72 
73  void populateDelayedSubmissionImpl() override;
74 
75  public:
76  // Allow internal construction without exposing factory functions.
77  friend class detail::ConstructorFactory;
78 
85  void cancel() override;
86 
95  void request();
96 
124  [[nodiscard]] static ucs_status_t recvCallback(void* arg,
125  const void* header,
126  size_t header_length,
127  void* data,
128  size_t length,
129  const ucp_am_recv_param_t* param);
130 
131  [[nodiscard]] std::shared_ptr<Buffer> getRecvBuffer() override;
132 
133  [[nodiscard]] std::string getRecvHeader() override;
134 };
135 
136 } // namespace ucxx
Send or receive a message with the UCX Active Message API.
Definition: request_am.h:33
void request()
Create and submit an active message send request.
std::shared_ptr< Buffer > getRecvBuffer() override
Get the received buffer.
void cancel() override
Cancel the request.
std::string getRecvHeader() override
Get the received user header.
static ucs_status_t recvCallback(void *arg, const void *header, size_t header_length, void *data, size_t length, const ucp_am_recv_param_t *param)
Receive callback registered by ucxx::Worker.
Base type for a UCXX transfer request.
Definition: request.h:39
Handle receiving of a ucxx::RequestAm.
Definition: request_am.h:36
Definition: address.h:16
std::function< void(ucs_status_t, std::shared_ptr< void >)> RequestCallbackUserFunction
A user-defined function to execute as part of a ucxx::Request callback.
Definition: typedefs.h:97
std::shared_ptr< void > RequestCallbackUserData
Data for the user-defined function provided to the ucxx::Request callback.
Definition: typedefs.h:105