blackboard_precondition.h
Go to the documentation of this file.
00001 /*  Copyright (C) 2018-2019 Davide Faconti, Eurecat -  All Rights Reserved
00002 *
00003 *   Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"),
00004 *   to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
00005 *   and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
00006 *   The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
00007 *
00008 *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
00009 *   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
00010 *   WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
00011 */
00012 
00013 #ifndef DECORATOR_BLACKBOARD_PRECONDITION_NODE_H
00014 #define DECORATOR_BLACKBOARD_PRECONDITION_NODE_H
00015 
00016 #include "behaviortree_cpp/decorator_node.h"
00017 
00018 namespace BT
00019 {
00032 template <typename T>
00033 class BlackboardPreconditionNode : public DecoratorNode
00034 {
00035   public:
00036     BlackboardPreconditionNode(const std::string& name, const NodeConfiguration& config)
00037       : DecoratorNode(name, config)
00038     {
00039         if( std::is_same<T,int>::value)
00040             setRegistrationID("BlackboardCheckInt");
00041         else if( std::is_same<T,double>::value)
00042             setRegistrationID("BlackboardCheckDouble");
00043         else if( std::is_same<T,std::string>::value)
00044             setRegistrationID("BlackboardCheckString");
00045     }
00046 
00047     virtual ~BlackboardPreconditionNode() override = default;
00048 
00049     static PortsList providedPorts()
00050     {
00051         return {InputPort("value_A"),
00052                 InputPort("value_B"),
00053                 InputPort<NodeStatus>("return_on_mismatch") };
00054     }
00055 
00056   private:
00057     virtual BT::NodeStatus tick() override;
00058 };
00059 
00060 //----------------------------------------------------
00061 
00062 template<typename T> inline
00063 NodeStatus BlackboardPreconditionNode<T>::tick()
00064 {
00065     T value_A;
00066     T value_B;
00067     NodeStatus default_return_status = NodeStatus::FAILURE;
00068 
00069     setStatus(NodeStatus::RUNNING);
00070 
00071     if( getInput("value_A", value_A) &&
00072         getInput("value_B", value_B) &&
00073         value_B == value_A )
00074     {
00075         return child_node_->executeTick();
00076     }
00077 
00078     if( child()->status() == NodeStatus::RUNNING )
00079     {
00080         haltChild();
00081     }
00082     getInput("return_on_mismatch", default_return_status);
00083     return default_return_status;
00084 }
00085 
00086 } // end namespace
00087 
00088 #endif


behaviortree_cpp
Author(s): Michele Colledanchise, Davide Faconti
autogenerated on Sat Jun 8 2019 20:17:15