request_tag_builder.h
1 
5 #pragma once
6 
7 #include <memory>
8 #include <utility>
9 #include <variant>
10 
11 #include <ucxx/request_builder_base.h>
12 #include <ucxx/request_data.h>
13 
14 namespace ucxx {
15 
16 // Forward declarations
17 class Component;
18 class Request;
19 class RequestTag;
20 
40 class RequestTagBuilder : public RequestCallbackBuilderBase<RequestTagBuilder> {
41  private:
42  std::shared_ptr<Component> _endpointOrWorker;
43  std::variant<data::TagSend, data::TagReceive, data::TagReceiveWithHandle>
44  _requestData;
45 
46  public:
56  std::shared_ptr<Component> endpointOrWorker,
57  std::variant<data::TagSend, data::TagReceive, data::TagReceiveWithHandle> requestData);
58 
64  [[nodiscard]] std::shared_ptr<RequestTag> build();
65 
71  operator std::shared_ptr<RequestTag>();
72 
78  operator std::shared_ptr<Request>();
79 };
80 
88 [[nodiscard]] inline RequestTagBuilder requestTagBuilder(
89  std::shared_ptr<Component> endpointOrWorker,
90  std::variant<data::TagSend, data::TagReceive, data::TagReceiveWithHandle> requestData)
91 {
92  return RequestTagBuilder(std::move(endpointOrWorker), std::move(requestData));
93 }
94 
95 } // namespace ucxx
CRTP base for request builders that support completion callbacks.
Definition: request_builder_base.h:115
Builder class for constructing std::shared_ptr<ucxx::RequestTag> objects.
Definition: request_tag_builder.h:40
std::shared_ptr< RequestTag > build()
Build and return the RequestTag.
RequestTagBuilder(std::shared_ptr< Component > endpointOrWorker, std::variant< data::TagSend, data::TagReceive, data::TagReceiveWithHandle > requestData)
Constructor for RequestTagBuilder with required parameters.
Definition: address.h:16
RequestTagBuilder requestTagBuilder(std::shared_ptr< Component > endpointOrWorker, std::variant< data::TagSend, data::TagReceive, data::TagReceiveWithHandle > requestData)
Create a RequestTagBuilder for constructing a shared_ptr<ucxx::RequestTag>.
Definition: request_tag_builder.h:88