request_builder_base.h
1 
5 #pragma once
6 
7 #include <stdexcept>
8 #include <utility>
9 
10 #include <ucxx/typedefs.h>
11 
12 namespace ucxx {
13 
44 template <typename Derived>
46  protected:
47  bool _enablePythonFuture{false};
48  bool _built{false};
49 
58  void markBuilt()
59  {
60  if (_built) throw std::logic_error("Builder::build() called more than once");
61  _built = true;
62  }
63 
64  public:
66  RequestBuilderBase() = default;
67 
70 
73 
75  RequestBuilderBase(RequestBuilderBase&&) noexcept = default;
76 
78  RequestBuilderBase& operator=(RequestBuilderBase&&) = default;
79 
86  Derived& pythonFuture(bool enable = true) &
87  {
88  _enablePythonFuture = enable;
89  return static_cast<Derived&>(*this);
90  }
91 
98  Derived&& pythonFuture(bool enable = true) &&
99  {
100  _enablePythonFuture = enable;
101  return static_cast<Derived&&>(*this);
102  }
103 };
104 
114 template <typename Derived>
116  protected:
119 
120  public:
128  {
129  _callbackFunction = std::move(fn);
130  return static_cast<Derived&>(*this);
131  }
132 
140  {
141  _callbackFunction = std::move(fn);
142  return static_cast<Derived&&>(*this);
143  }
144 
152  {
153  _callbackData = std::move(data);
154  return static_cast<Derived&>(*this);
155  }
156 
164  {
165  _callbackData = std::move(data);
166  return static_cast<Derived&&>(*this);
167  }
168 };
169 
170 } // namespace ucxx
CRTP base for all request builders providing Python future support.
Definition: request_builder_base.h:45
void markBuilt()
Assert that build() has not been called yet, then mark as built.
Definition: request_builder_base.h:58
bool _built
Whether build() has already been called.
Definition: request_builder_base.h:48
RequestBuilderBase(RequestBuilderBase &&) noexcept=default
Move constructor.
bool _enablePythonFuture
Enable Python future support.
Definition: request_builder_base.h:47
RequestBuilderBase & operator=(const RequestBuilderBase &)=delete
Copy assignment disabled to prevent duplicate request submissions.
RequestBuilderBase(const RequestBuilderBase &)=delete
Copy constructor disabled to prevent duplicate request submissions.
Derived && pythonFuture(bool enable=true) &&
Configure Python future support on a temporary builder.
Definition: request_builder_base.h:98
Derived & pythonFuture(bool enable=true) &
Configure Python future support.
Definition: request_builder_base.h:86
RequestBuilderBase()=default
Default constructor.
CRTP base for request builders that support completion callbacks.
Definition: request_builder_base.h:115
Derived && callbackData(RequestCallbackUserData data) &&
Set the user-defined data to pass to the callback function on a temporary builder.
Definition: request_builder_base.h:163
Derived & callbackData(RequestCallbackUserData data) &
Set the user-defined data to pass to the callback function.
Definition: request_builder_base.h:151
Derived && callbackFunction(RequestCallbackUserFunction fn) &&
Set the user-defined callback function on a temporary builder.
Definition: request_builder_base.h:139
Derived & callbackFunction(RequestCallbackUserFunction fn) &
Set the user-defined callback function to call upon completion.
Definition: request_builder_base.h:127
RequestCallbackUserFunction _callbackFunction
User callback on completion.
Definition: request_builder_base.h:117
RequestCallbackUserData _callbackData
Data passed to callback.
Definition: request_builder_base.h:118
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