From fb4e836da00dd7d97fceafc9a071eaef53fcadba Mon Sep 17 00:00:00 2001 From: William Woodall Date: Tue, 18 Aug 2015 18:46:51 -0700 Subject: [PATCH] changed default arguments for Node changes how the default context is gotten and adds an option for enabling/disabling intra process comms --- .../rclcpp/contexts/default_context.hpp | 7 +++++++ rclcpp/include/rclcpp/node.hpp | 8 ++++++-- rclcpp/include/rclcpp/node_impl.hpp | 20 +++++++++++-------- rclcpp/include/rclcpp/utilities.hpp | 1 + 4 files changed, 26 insertions(+), 10 deletions(-) diff --git a/rclcpp/include/rclcpp/contexts/default_context.hpp b/rclcpp/include/rclcpp/contexts/default_context.hpp index dc78f78..c10225e 100644 --- a/rclcpp/include/rclcpp/contexts/default_context.hpp +++ b/rclcpp/include/rclcpp/contexts/default_context.hpp @@ -33,6 +33,13 @@ public: }; +DefaultContext::SharedPtr +get_global_default_context() +{ + static DefaultContext::SharedPtr default_context = DefaultContext::make_shared(); + return default_context; +} + } // namespace default_context } // namespace contexts } // namespace rclcpp diff --git a/rclcpp/include/rclcpp/node.hpp b/rclcpp/include/rclcpp/node.hpp index 95d916d..4266a0c 100644 --- a/rclcpp/include/rclcpp/node.hpp +++ b/rclcpp/include/rclcpp/node.hpp @@ -103,9 +103,11 @@ public: RCLCPP_SMART_PTR_DEFINITIONS(Node); /* Create a node based on the node name. */ - Node(const std::string & node_name); + Node(const std::string & node_name, bool use_intra_process_comms = false); /* Create a node based on the node name and a rclcpp::context::Context. */ - Node(const std::string & node_name, rclcpp::context::Context::SharedPtr context); + Node( + const std::string & node_name, rclcpp::context::Context::SharedPtr context, + bool use_intra_process_comms = false); /* Get the name of the node. */ const std::string & @@ -214,6 +216,8 @@ private: size_t number_of_services_; size_t number_of_clients_; + bool use_intra_process_comms_; + mutable std::mutex mutex_; std::map parameters_; diff --git a/rclcpp/include/rclcpp/node_impl.hpp b/rclcpp/include/rclcpp/node_impl.hpp index e67b8f3..2202561 100644 --- a/rclcpp/include/rclcpp/node_impl.hpp +++ b/rclcpp/include/rclcpp/node_impl.hpp @@ -39,15 +39,20 @@ using namespace rclcpp; using namespace rclcpp::node; -using rclcpp::contexts::default_context::DefaultContext; - -Node::Node(const std::string & node_name) -: Node(node_name, DefaultContext::make_shared()) +Node::Node(const std::string & node_name, bool use_intra_process_comms) +: Node( + node_name, + rclcpp::contexts::default_context::get_global_default_context(), + use_intra_process_comms) {} -Node::Node(const std::string & node_name, context::Context::SharedPtr context) +Node::Node( + const std::string & node_name, + context::Context::SharedPtr context, + bool use_intra_process_comms) : name_(node_name), context_(context), - number_of_subscriptions_(0), number_of_timers_(0), number_of_services_(0) + number_of_subscriptions_(0), number_of_timers_(0), number_of_services_(0), + use_intra_process_comms_(use_intra_process_comms) { size_t domain_id = 0; char * ros_domain_id = nullptr; @@ -163,8 +168,7 @@ Node::create_subscription( if (!subscriber_handle) { // *INDENT-OFF* (prevent uncrustify from making unecessary indents here) throw std::runtime_error( - std::string("could not create subscription: ") + - rmw_get_error_string_safe()); + std::string("could not create subscription: ") + rmw_get_error_string_safe()); // *INDENT-ON* } diff --git a/rclcpp/include/rclcpp/utilities.hpp b/rclcpp/include/rclcpp/utilities.hpp index c0e067c..9e77976 100644 --- a/rclcpp/include/rclcpp/utilities.hpp +++ b/rclcpp/include/rclcpp/utilities.hpp @@ -27,6 +27,7 @@ #include #include +#include #include #include