16#ifndef NROS_CPP_STD_COMPAT_HPP
17#define NROS_CPP_STD_COMPAT_HPP
43inline void std_function_trampoline(
void* context) {
44 auto* fn =
static_cast<std::function<
void()
>*>(context);
61inline Result create_wall_timer(Node& node, Timer& out, std::chrono::milliseconds period,
62 std::function<
void()> callback) {
64 std::unique_ptr<std::function<void()>>(
new std::function<void()>(std::move(callback)));
66 Result r = node.create_wall_timer(out,
static_cast<uint64_t
>(period.count()),
67 detail::std_function_trampoline, raw);
69 out.attach_std_closure(std::move(fn));
90inline Result create_timer(Node& node, Timer& out,
const Clock& clock,
91 std::chrono::milliseconds period, std::function<
void()> callback) {
93 std::unique_ptr<std::function<void()>>(
new std::function<void()>(std::move(callback)));
95 Result r = node.create_timer(out, clock,
static_cast<uint64_t
>(period.count()),
96 detail::std_function_trampoline, raw);
98 out.attach_std_closure(std::move(fn));
107inline Result create_timer_oneshot(Node& node, Timer& out, std::chrono::milliseconds delay,
108 std::function<
void()> callback) {
110 std::unique_ptr<std::function<void()>>(
new std::function<void()>(std::move(callback)));
111 auto* raw = fn.get();
112 Result r = node.create_timer_oneshot(out,
static_cast<uint64_t
>(delay.count()),
113 detail::std_function_trampoline, raw);
115 out.attach_std_closure(std::move(fn));
123inline Result create_guard_condition(Node& node, GuardCondition& out,
124 std::function<
void()> callback) {
126 std::unique_ptr<std::function<void()>>(
new std::function<void()>(std::move(callback)));
127 auto* raw = fn.get();
128 Result r = node.create_guard_condition(out, detail::std_function_trampoline, raw);
130 out.attach_std_closure(std::move(fn));
140inline Result
init(
const std::string& locator, uint8_t domain_id = 0) {
141 return init(locator.c_str(), domain_id);
145inline Result
create_node(Node& out,
const std::string& name,
146 const std::string& ns = std::string()) {
147 return create_node(out, name.c_str(), ns.empty() ?
nullptr : ns.c_str());
154Result create_publisher(Node& node, Publisher<M>& out,
const std::string& topic,
156 return node.create_publisher(out, topic.c_str(), qos);
161Result create_subscription(Node& node, Subscription<M>& out,
const std::string& topic,
163 return node.create_subscription(out, topic.c_str(), qos);
168Result create_service(Node& node, Service<S>& out,
const std::string& service_name,
170 return node.create_service(out, service_name.c_str(), qos);
175Result create_client(Node& node, Client<S>& out,
const std::string& service_name,
177 return node.create_client(out, service_name.c_str(), qos);
182Result create_action_server(Node& node, ActionServer<A>& out,
const std::string& action_name,
184 return node.create_action_server(out, action_name.c_str(), qos);
189Result create_action_client(Node& node, ActionClient<A>& out,
const std::string& action_name,
191 return node.create_action_client(out, action_name.c_str(), qos);
197inline Result create_executor(Executor& out,
const std::string& locator, uint8_t domain_id = 0) {
202inline Result
create_node(Executor& exec, Node& out,
const std::string& name,
203 const std::string& ns = std::string()) {
204 return exec.create_node(out, name.c_str(), ns.empty() ?
nullptr : ns.c_str());
212inline Result
spin_once(std::chrono::milliseconds timeout) {
213 return spin_once(
static_cast<int32_t
>(timeout.count()));
217inline Result
spin(std::chrono::milliseconds duration,
218 std::chrono::milliseconds poll = std::chrono::milliseconds(10)) {
219 return spin(
static_cast<uint32_t
>(duration.count()),
static_cast<int32_t
>(poll.count()));
229inline Result executor_spin_once(Executor& exec, std::chrono::milliseconds timeout) {
230 return exec.spin_once(
static_cast<int32_t
>(timeout.count()));
237inline Result executor_spin_for(Executor& exec, std::chrono::milliseconds duration,
238 std::chrono::milliseconds poll = std::chrono::milliseconds(10)) {
239 return exec.spin_for(
static_cast<uint32_t
>(duration.count()),
240 static_cast<int32_t
>(poll.count()));
244[[deprecated(
"bounded spin is now `executor_spin_for(...)` (issue 0338)")]]
inline Result
245executor_spin(Executor& exec, std::chrono::milliseconds duration,
246 std::chrono::milliseconds poll = std::chrono::milliseconds(10)) {
247 return executor_spin_for(exec, duration, poll);
static Result create(Executor &out, const char *locator=nullptr, uint8_t domain_id=0)
Definition executor.hpp:120
static constexpr QoS default_profile()
Default profile: RELIABLE + VOLATILE + KEEP_LAST(10).
Definition qos.hpp:328
static constexpr QoS services()
Services profile: RELIABLE + VOLATILE + KEEP_LAST(10).
Definition qos.hpp:334
Result spin()
Definition nros.hpp:157
Result spin_once(int32_t timeout_ms=10)
Definition nros.hpp:75
Result init(const char *locator=nullptr, uint8_t domain_id=0)
Definition node.hpp:824
Result create_node(Node &out, const char *name, const char *ns=nullptr)
Definition node.hpp:1008