diff --git a/include/behaviortree_cpp/decorators/loop_node.h b/include/behaviortree_cpp/decorators/loop_node.h index 595ccac9e..8c7032b35 100644 --- a/include/behaviortree_cpp/decorators/loop_node.h +++ b/include/behaviortree_cpp/decorators/loop_node.h @@ -121,6 +121,30 @@ class LoopNode : public DecoratorNode } }; +template <> inline +SharedQueue<int> convertFromString<SharedQueue<int>>(StringView str) +{ + auto parts = splitString(str, ';'); + SharedQueue<int> output = std::make_shared<std::deque<int>>(); + for (const StringView& part : parts) + { + output->push_back(convertFromString<int>(part)); + } + return output; +} + +template <> inline +SharedQueue<bool> convertFromString<SharedQueue<bool>>(StringView str) +{ + auto parts = splitString(str, ';'); + SharedQueue<bool> output = std::make_shared<std::deque<bool>>(); + for (const StringView& part : parts) + { + output->push_back(convertFromString<bool>(part)); + } + return output; +} + template <> inline SharedQueue<double> convertFromString<SharedQueue<double>>(StringView str) { @@ -133,5 +157,17 @@ SharedQueue<double> convertFromString<SharedQueue<double>>(StringView str) return output; } +template <> inline +SharedQueue<std::string> convertFromString<SharedQueue<std::string>>(StringView str) +{ + auto parts = splitString(str, ';'); + SharedQueue<std::string> output = std::make_shared<std::deque<std::string>>(); + for (const StringView& part : parts) + { + output->push_back(convertFromString<std::string>(part)); + } + return output; +} + } // namespace BT diff --git a/src/bt_factory.cpp b/src/bt_factory.cpp index 45d1e2cf5..6d0c297d5 100644 --- a/src/bt_factory.cpp +++ b/src/bt_factory.cpp @@ -91,6 +91,8 @@ BehaviorTreeFactory::BehaviorTreeFactory(): registerNodeType<SwitchNode<5>>("Switch5"); registerNodeType<SwitchNode<6>>("Switch6"); + registerNodeType<LoopNode<int>>("LoopInt"); + registerNodeType<LoopNode<bool>>("LoopBool"); registerNodeType<LoopNode<double>>("LoopDouble"); registerNodeType<LoopNode<std::string>>("LoopString");