Behavior Trees Library in C++. Batteries included.

Overview

License MIT Version Build Status ros1 ros2 Codacy Badge LGTM Grade Join the chat at https://gitter.im/BehaviorTree-ROS/Lobby

BehaviorTree.CPP

This C++ 14 library provides a framework to create BehaviorTrees. It was designed to be flexible, easy to use, reactive and fast.

Even if our main use-case is robotics, you can use this library to build AI for games, or to replace Finite State Machines in your application.

There are few features that make BehaviorTree.CPP unique, when compared to other implementations:

  • It makes asynchronous Actions, i.e. non-blocking, a first-class citizen.

  • You can build reactive behaviors that execute multiple Actions concurrently.

  • Trees are defined using a Domain Specific Scripting scripting language (based on XML), and can be loaded at run-time; in other words, even if written in C++, Trees are not hard-coded.

  • You can statically link your custom TreeNodes or convert them into plugins which can be loaded at run-time.

  • It provides a type-safe and flexible mechanism to do Dataflow between Nodes of the Tree.

  • It includes a logging/profiling infrastructure that allows the user to visualize, record, replay and analyze state transitions.

  • Last but not least: it is well documented!

Documentation

You can learn about the main concepts, the API and the tutorials here: https://www.behaviortree.dev/

To find more details about the conceptual ideas that make this implementation different from others, you can read the final deliverable of the project MOOD2Be.

Does your company use BehaviorTree.CPP?

No company, institution or public/private funding is currently supporting the development of BehaviorTree.CPP and Groot. As a consequence, my time to support BehaviorTree.CPP is very limited and I decided won't spend any time at all supporting Groot. Pull Requests are welcome and will be reviewed, even if with some delay.

If your company use this software, consider becoming a sponsor to support bug fixing and development of new features. You can find contact details in package.xml.

Design principles

The main goal of this project is to create a Behavior Tree implementation that uses the principles of Model Driven Development to separate the role of the Component Developer from the Behavior Designer.

In practice, this means that:

  • Custom TreeNodes must be reusable building blocks. You should be able to implement them once and reuse them to build many behaviors.

  • To build a Behavior Tree out of TreeNodes, the Behavior Designer must not need to read nor modify the C++ source code of a given TreeNode.

  • Complex Behaviours must be composable using Subtrees

Many of the features and, sometimes, the apparent limitations of this library, might be a consequence of this design principle.

For instance, having a scoped BlackBoard, visible only in a portion of the tree, is particularly important to avoid "name pollution" and allow the creation of large scale trees.

GUI Editor

Editing a BehaviorTree is as simple as editing a XML file in your favourite text editor.

If you are looking for a more fancy graphical user interface (and I know you do) check Groot out.

Groot screenshot

Watch Groot and BehaviorTree.CPP in action

Click on the following image to see a short video of how the C++ library and the graphic user interface are used to design and monitor a Behavior Tree.

MOOD2Be

How to compile (plain old cmake)

On Ubuntu, you are encourage to install the following dependencies:

 sudo apt-get install libzmq3-dev libboost-dev

Other dependencies are already included in the 3rdparty folder.

To compile and install the library, from the BehaviorTree.CPP folder, execute:

 mkdir build; cd build
 cmake ..
 make
 sudo make install

If you want to use BT.CPp in your application a typical CMakeLists.txt file will look like this:

cmake_minimum_required(VERSION 3.5)

project(hello_BT)

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(BehaviorTreeV3)

add_executable(${PROJECT_NAME} "hello_BT.cpp")
target_link_libraries(${PROJECT_NAME} BT::behaviortree_cpp_v3)

ROS1 or ROS2 users (Catkin/Ament)

You can easily install the package with the command

  sudo apt-get install ros-$ROS_DISTRO-behaviortree-cpp-v3

If you want to compile it with catkin, you must include this package to your catkin workspace.

Acknowledgement

This library was initially developed at Eurecat - https://eurecat.org/en/ (main author, Davide Faconti) in a joint effort with the Italian Institute of Technology (Michele Colledanchise).

This software is one of the main components of MOOD2Be, which is one of the six Integrated Technical Projects (ITPs) selected from the RobMoSys first open call. Therefore, MOOD2Be has been supported by the European Horizon2020 project RobMoSys. This software is RobMoSys conformant.

RobMoSys Conformant

Further readings

  • Introductory article: Behavior trees for AI: How they work

  • How Behavior Trees Modularize Hybrid Control Systems and Generalize Sequential Behavior Compositions, the Subsumption Architecture, and Decision Trees. Michele Colledanchise and Petter Ogren. IEEE Transaction on Robotics 2017.

  • Behavior Trees in Robotics and AI, published by CRC Press Taylor & Francis, available for purchase (ebook and hardcover) on the CRC Press Store or Amazon.

The Preprint version (free) is available here: https://arxiv.org/abs/1709.00084

License

The MIT License (MIT)

Copyright (c) 2014-2018 Michele Colledanchise Copyright (c) 2018-2021 Davide Faconti

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, 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:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 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, 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.

Comments
  • Open Discussion: input/output ports to abstract blackboards

    Open Discussion: input/output ports to abstract blackboards

    Hi everyone.

    I want to open a discussion about the future of the library. The more I think about issue #18 , more I realize (thanks @v-lopez) that the model of ports in SMACH is better to deal with name clashing.

    Looking at examples from the people involved in ROS2/Navigation2, I have the feeling that they have their own "work around".

    The only conclusion I have is that accessing TreeNode::blackboard() in an implicit way is a recipe for disaster.

    I try to summarize my thoughts here: https://github.com/BehaviorTree/BehaviorTree.CPP/blob/output_ports/RoadmapDiscussion.md

    Please feel free to add your own two cents, since... most of the solutions I am thinking about will break the API and you will profoundly hate me :(

    I am pinging people that showed some interest in the past, since this will affect them.

    @mjeronimo @miccol @liuxin00738 @Thordreck @StefanoSoffiaUTRC @orduno

    help wanted version 3 
    opened by facontidavide 26
  • Don't restart SequenceStar on halt

    Don't restart SequenceStar on halt

    This might need some discussion, but I am pretty sure it's a bug.

    The problem: SequenceStar resets progress when halted https://github.com/BehaviorTree/BehaviorTree.CPP/blob/master/src/controls/sequence_star_node.cpp#L77

    So in reactive formulations such as the example image below (also used in the documentation), if the battery check fails during GoTo=B, GoTo=A will be re-executed in the next sequence tick. Since we are using SequenceStar to avoid repeating actions which have already returned SUCESS, the execution should be resumed from GoTo=B even after halted. SequenceStar

    bug 
    opened by Affonso-Gui 16
  • Release to ROS2 build farm?

    Release to ROS2 build farm?

    Could we a version of the library released to the ROS2 build farm? As I understand it, this requires rosdep keys and preparing a bloom release. This would allow us to reference the BT library in our official Navigation2 software for the Crystal release of ROS2.

    opened by mjeronimo 16
  • Error compiling version 4.0 in Ubuntu 18.04

    Error compiling version 4.0 in Ubuntu 18.04

    BehaviorTree.CPP/3rdparty/lexy/include/lexy/dsl/literal.hpp:344:61: error: invalid use of incomplete type ‘struct lexy::_detail::string_literal<1, string_literal<...auto...> >’

    It seems that there is a problem with the compilation of the updated lexy. How can I solve this problem?

    opened by LuossD 15
  • Open discussion: Ports and Subtrees

    Open discussion: Ports and Subtrees

    This issue is about adding input/output ports to Subtrees. Unfortunately, to do it right, we need to think carefully about the impact in terms of composition and scope. The BB model itself struggle to deal with this.

    image

    @Thordreck @miccol @v-lopez

    @Thordreck suggested to have internal/external ports. Even if that might look as a solution, it feels to me "wrong".

    My gut feeling is telling me that the solution is "scoped blackboards".

    Consider this C++ code:

    int value = 69;
    int num = 11;
    {
        int value = 42;
        std::cout << num << " " << value <<std::endl; // will print: 11 42
    }
    std::cout << num << " " << value <<std::endl; // will print: 11 69
    

    My feeling is that, to address composition using Subtrees, each subtree must have it's scoped Blackboard. Similarly to the C++ example, unless it is remapped, there should be a "priority stack" of blackboards, rather than a single one.

    By default, the "local" blackboard is accessed first and then the following ones.

    Now I have to think how to implement this and how make it look simple in the XML representation ;)

    Any other idea or different direction you would like to propose?

    help wanted version 3 
    opened by facontidavide 15
  • Tutorial 01 - unclear instructions

    Tutorial 01 - unclear instructions

    Hello, I failed to reproduce the first tutorial, mainly because I think it is missing some steps, which might be obvious to more experienced developer.

    Attempted tutorial: https://www.behaviortree.dev/tutorial_01_first_tree/

    Questions: This class declaration, should be in "dummy_nodes.h" correct ?

    // Example of custom SyncActionNode (synchronous action)
    // without ports.
    class ApproachObject : public BT::SyncActionNode
    {
      public:
        ApproachObject(const std::string& name) :
            BT::SyncActionNode(name, {})
        {
        }
    
        // You must override the virtual function tick()
        BT::NodeStatus tick() override
        {
            std::cout << "ApproachObject: " << this->name() << std::endl;
            return BT::NodeStatus::SUCCESS;
        }
    };
    

    Main: The header does not include all the classes that are in the next source code, but I understand it is my job to fill their declaration. I removed the undeclared ones instead.

    #include "behaviortree_cpp_v3/bt_factory.h"
    
    // file that contains the custom nodes definitions
    #include "dummy_nodes.h"
    
    int main()
    {
        // We use the BehaviorTreeFactory to register our custom nodes
        BehaviorTreeFactory factory;
    
        // Note: the name used to register should be the same used in the XML.
        using namespace DummyNodes;
    
        // The recommended way to create a Node is through inheritance.
        factory.registerNodeType<ApproachObject>("ApproachObject");
    
        // TreeNodes are destroyed
        auto tree = factory.createTreeFromFile("./my_tree.xml");
    
        tree.tickRoot();
    
        return 0;
    }
    Please, notice that in the cpp file there is "using namespace DummyNodes;", but in the header from the same tutorial, there is no namespace DummyNodes. Should I add DummyNodes in the header
    
    

    Now, from the Github page, I found this CMAKE file (it is not in the Tutorial 01). What should be the correct CMAKE for this tutorial ? How do I include XML file in CMAKE build ?

    cmake_minimum_required(VERSION 3.5)
    
    project(hello_BT)
    
    set(CMAKE_CXX_STANDARD 14)
    set(CMAKE_CXX_STANDARD_REQUIRED ON)
    find_package(BehaviorTreeV3)
    
    add_executable(${PROJECT_NAME} "hello_BT.cpp")
    target_link_libraries(${PROJECT_NAME} BT::behaviortree_cpp_v3)
    

    Lastly, I searched the Github folder with examples and another thing confuses me, which is, that the tutorial source codes are very different. In Github main, for example, the tree is represented as string literal, but in the landing page, the tree is represented like extrernal XML file. Also this line: "factory.registerFromPlugin("./libdummy_nodes_dyn.so");" It is not in the landing page tutorial, but it is in github.. what is "libdummy_nodes_dyn.so" ? Where can I get this file ? What is its purpose ?

    Please can you help me and future beginners. Please, can you provide sequential steps, with fully functional example ? I admit, it is probably due to my own lack of experience, but I am very lost, I have spent hours trying to make tutorial 01 work, with no success. Thank you, Tomas

    opened by samurairepo 14
  • Cannot set SubTree ports without using a SetBlackBoard

    Cannot set SubTree ports without using a SetBlackBoard

    Hello,

    It seems that it is not possible to directly set a value to an input port of a SubTree.
    I have to map the input port to a key of the BlackBoard otherwise the value is [undefined].
    Here is a snapshot of my tree:

    image

    And here is the terminal output when I load the tree:

    root@pc047:/workspace/sequencer/build# ./bin/run_sequencer ../trees/assemble_inner_ring_up.xml 
    Register Node ClearArm
    Register Node ClearTileFromAnchorObject
    Register Node EyeInHandVisualServoing
    Register Node EyeToHandVisualServoing
    Register Node GetAnchorSI
    Register Node LockSI
    Register Node MoveArmToSI
    Register Node UnlockAllSiblings
    Register Node UnlockSI
    Register Node GetParametersString
    Register Node GetParametersDouble
    Tick : MoveArmToSI
        IN: ee_si : [undefined]
        IN: goal_si : [undefined]
        IN: approach_offset : 1000
    MoveArmToSI - Invalid input
    

    As you can see, the port approach_offset of the action MoveArmToSI is correctly set.
    But its ports ee_si and goal_si are [undefined] albeit I have set the values of the GrabTileFromContainer ports.

    Am I missing something, or is it a requirement to use a SetBlackBoard to initialise SubTree ports ?

    opened by Acwok 14
  • ReactiveSequence with multiple asynch children

    ReactiveSequence with multiple asynch children

    Hi @miccol

    as you know, I was unhappy with the logic of V2 about Action not being "tickable" unless set to IDLE. Removinf that affect the ability of a ReactiveSequence (and ReactiveFallback) to have multiple asynch child (not just actions, but entire branches).

    I propose this solution (separate branch):

    https://github.com/BehaviorTree/BehaviorTree.CPP/blob/reactive_stuff/src/controls/reactive_sequence.cpp

    brainstorming 
    opened by facontidavide 13
  • Should nodes loop internally or not?

    Should nodes loop internally or not?

    I noticed that all nodes with multiple children (sequence, fallback, reactive*, retry, repeat, etc.) loop over children internally with while's and for's in their implementation of tick(). I wonder if this is a design decision, and if yes, why is this the case? Due to perceived efficiency?

    I would argue that for each executeTick() on the root node, only one leaf should have their tick() method called. This would imply descending into the tree from the root every executeTick(), but I believe this cost would be negligible. However, tick()-ing only one leaf per executeTick() iteration would be more in line with the conceptual behavior tree model and it would help scheduling/preempting a lot.

    What do you think?

    brainstorming 
    opened by maxpfingsthorn 13
  • Building BehaviorTree.CPP (Visual Studio 2017/Windows 10 x64)

    Building BehaviorTree.CPP (Visual Studio 2017/Windows 10 x64)

    Hi! Thank you for your fantastic contribution, and congrats for your new shiny version 3.0!

    I am a great fan of crossplatform, minimal dependencies and header-only gems in modern c++.

    Well; BehaviourTree.cpp is not header-only :-). So i am trying to compile/build the library from source code, in Visual Studio 2017(15.9.7) for Windows 10 x64. No success. :-/. At the moment i have omitted GTEST amd ZMQ because i only want the core/logic functionality. Is it possible?

    Any guide/hints about how to compile/build/configure BehaviorTree.CPP for using in new proyects? Thanks in advance!!

    I have enabled the _CRT_SECURE_NO_WARNINGS flag.

    I get this output :-(:

    1>------ Rebuild All started: Project: ZERO_CHECK, Configuration: Debug x64 ------
    1>Checking Build System
    1>CMake does not need to re-run because P:/Compilados/x32-x64/TRABAJO_MSVC2017_x64/BehaviorTree.CPP/builds/debug/CMakeFiles/generate.stamp is up-to-date.
    2>------ Rebuild All started: Project: behaviortree_cpp_v3, Configuration: Debug x64 ------
    2>Building Custom Rule P:/Compilados/x32-x64/TRABAJO_MSVC2017_x64/BehaviorTree.CPP/CMakeLists.txt
    2>CMake does not need to re-run because P:/Compilados/x32-x64/TRABAJO_MSVC2017_x64/BehaviorTree.CPP/builds/debug/CMakeFiles/generate.stamp is up-to-date.
    2>action_node.cpp
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\coroutine/coroutine.h(115): error C2220: warning treated as error - no 'object' file generated
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\coroutine/coroutine.h(115): warning C4267: 'return': conversion from 'size_t' to 'coroutine::routine_t', possible loss of data
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\coroutine/coroutine.h(137): warning C4100: 'lpParameter': unreferenced formal parameter
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\backward-cpp/backward.hpp(788): error C2059: syntax error: '('
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\backward-cpp/backward.hpp(788): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\backward-cpp/backward.hpp(788): error C2059: syntax error: ')'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\backward-cpp/backward.hpp(789): warning C4183: '__attribute__': missing return type; assumed to be a member function returning 'int'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\backward-cpp/backward.hpp(795): error C3861: 'backtrace': identifier not found
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\backward-cpp/backward.hpp(812): error C2589: '(': illegal token on right side of '::'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\backward-cpp/backward.hpp(812): error C2144: syntax error: 'unknown-type' should be preceded by ')'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\backward-cpp/backward.hpp(812): error C2661: 'std::vector<void *,std::allocator<_Ty>>::resize': no overloaded function takes 0 arguments
    2>        with
    2>        [
    2>            _Ty=void *
    2>        ]
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\backward-cpp/backward.hpp(812): error C2144: syntax error: 'unknown-type' should be preceded by ';'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\backward-cpp/backward.hpp(812): error C2143: syntax error: missing ')' before '.'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\backward-cpp/backward.hpp(812): error C3928: '->': trailing return type is not allowed after a parenthesized declarator
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\backward-cpp/backward.hpp(812): error C3484: syntax error: expected '->' before the return type
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\backward-cpp/backward.hpp(812): error C3613: missing return type after '->' ('int' assumed)
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\backward-cpp/backward.hpp(812): warning C4458: declaration of '_stacktrace' hides class member
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\backward-cpp/backward.hpp(679): note: see declaration of 'backward::StackTraceImplHolder::_stacktrace'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\backward-cpp/backward.hpp(812): error C2146: syntax error: missing ';' before identifier 'size'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\backward-cpp/backward.hpp(812): error C2059: syntax error: ')'
    2>basic_types.cpp
    2>behavior_tree.cpp
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/tree_node.h(210): error C2220: warning treated as error - no 'object' file generated
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/tree_node.h(210): warning C4127: conditional expression is constant
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/tree_node.h(211): note: consider using 'if constexpr' statement instead
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/actions/set_blackboard_node.h(49): note: see reference to function template instantiation 'BT::Result BT::TreeNode::getInput<std::string>(const std::string &,T &) const' being compiled
    2>        with
    2>        [
    2>            T=std::string
    2>        ]
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/blackboard.h(170): error C2664: 'std::string BT::demangle(const char *)': cannot convert argument 1 from 'const type_info *const ' to 'const char *'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/blackboard.h(170): note: Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/tree_node.h(258): note: see reference to function template instantiation 'void BT::Blackboard::set<T>(const std::string &,const T &)' being compiled
    2>        with
    2>        [
    2>            T=std::string
    2>        ]
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/actions/set_blackboard_node.h(57): note: see reference to function template instantiation 'BT::Result BT::TreeNode::setOutput<std::string>(const std::string &,const T &)' being compiled
    2>        with
    2>        [
    2>            T=std::string
    2>        ]
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/blackboard.h(171): error C2664: 'std::string BT::demangle(const char *)': cannot convert argument 1 from 'const type_info' to 'const char *'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/blackboard.h(171): note: No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
    2>blackboard.cpp
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\blackboard.cpp(28): error C2664: 'std::string BT::demangle(const char *)': cannot convert argument 1 from 'const type_info *' to 'const char *'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\blackboard.cpp(28): note: Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\blackboard.cpp(29): error C2664: 'std::string BT::demangle(const char *)': cannot convert argument 1 from 'const type_info *' to 'const char *'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\blackboard.cpp(29): note: Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\blackboard.cpp(60): error C2664: 'std::string BT::demangle(const char *)': cannot convert argument 1 from 'const type_info *' to 'const char *'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\blackboard.cpp(60): note: Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    2>bt_factory.cpp
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\bt_factory.cpp(143): error C2220: warning treated as error - no 'object' file generated
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\bt_factory.cpp(143): warning C4456: declaration of 'it' hides previous local declaration
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\bt_factory.cpp(139): note: see declaration of 'it'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/tree_node.h(210): warning C4127: conditional expression is constant
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/tree_node.h(211): note: consider using 'if constexpr' statement instead
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/actions/set_blackboard_node.h(49): note: see reference to function template instantiation 'BT::Result BT::TreeNode::getInput<std::string>(const std::string &,T &) const' being compiled
    2>        with
    2>        [
    2>            T=std::string
    2>        ]
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/blackboard.h(170): error C2664: 'std::string BT::demangle(const char *)': cannot convert argument 1 from 'const type_info *const ' to 'const char *'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/blackboard.h(170): note: Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/tree_node.h(258): note: see reference to function template instantiation 'void BT::Blackboard::set<T>(const std::string &,const T &)' being compiled
    2>        with
    2>        [
    2>            T=std::string
    2>        ]
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/actions/set_blackboard_node.h(57): note: see reference to function template instantiation 'BT::Result BT::TreeNode::setOutput<std::string>(const std::string &,const T &)' being compiled
    2>        with
    2>        [
    2>            T=std::string
    2>        ]
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/blackboard.h(171): error C2664: 'std::string BT::demangle(const char *)': cannot convert argument 1 from 'const type_info' to 'const char *'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/blackboard.h(171): note: No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
    2>decorator_node.cpp
    2>condition_node.cpp
    2>control_node.cpp
    2>shared_library.cpp
    2>shared_library_UNIX.cpp
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\shared_library_UNIX.cpp(3): fatal error C1083: Cannot open include file: 'dlfcn.h': No such file or directory
    2>tree_node.cpp
    2>xml_parsing.cpp
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(16): error C2220: warning treated as error - no 'object' file generated
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(16): warning C4068: unknown pragma
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(17): warning C4068: unknown pragma
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(44): error C2872: 'XMLDocument': ambiguous symbol
    2>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\msxml.h(10095): note: could be 'XMLDocument'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\tinyXML2/tinyxml2.h(1650): note: or       'tinyxml2::XMLDocument'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(46): error C2872: 'XMLDocument': ambiguous symbol
    2>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\msxml.h(10095): note: could be 'XMLDocument'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\tinyXML2/tinyxml2.h(1650): note: or       'tinyxml2::XMLDocument'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(70): warning C4068: unknown pragma
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(84): error C2872: 'XMLDocument': ambiguous symbol
    2>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\msxml.h(10095): note: could be 'XMLDocument'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\tinyXML2/tinyxml2.h(1650): note: or       'tinyxml2::XMLDocument'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(84): error C2027: use of undefined type 'XMLDocument'
    2>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\msxml.h(10095): note: see declaration of 'XMLDocument'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(84): error C2672: 'std::list<std::unique_ptr<XMLDocument,std::default_delete<_Ty>>,std::allocator<std::unique_ptr<_Ty,std::default_delete<_Ty>>>>::emplace_back': no matching overloaded function found
    2>        with
    2>        [
    2>            _Ty=XMLDocument
    2>        ]
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(86): error C2872: 'XMLDocument': ambiguous symbol
    2>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\msxml.h(10095): note: could be 'XMLDocument'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\tinyXML2/tinyxml2.h(1650): note: or       'tinyxml2::XMLDocument'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(87): error C2027: use of undefined type 'XMLDocument'
    2>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\msxml.h(10095): note: see declaration of 'XMLDocument'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(97): error C2872: 'XMLDocument': ambiguous symbol
    2>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\msxml.h(10095): note: could be 'XMLDocument'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\tinyXML2/tinyxml2.h(1650): note: or       'tinyxml2::XMLDocument'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(97): error C2027: use of undefined type 'XMLDocument'
    2>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\msxml.h(10095): note: see declaration of 'XMLDocument'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(97): error C2672: 'std::list<std::unique_ptr<XMLDocument,std::default_delete<_Ty>>,std::allocator<std::unique_ptr<_Ty,std::default_delete<_Ty>>>>::emplace_back': no matching overloaded function found
    2>        with
    2>        [
    2>            _Ty=XMLDocument
    2>        ]
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(99): error C2872: 'XMLDocument': ambiguous symbol
    2>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\msxml.h(10095): note: could be 'XMLDocument'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\tinyXML2/tinyxml2.h(1650): note: or       'tinyxml2::XMLDocument'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(100): error C2027: use of undefined type 'XMLDocument'
    2>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\msxml.h(10095): note: see declaration of 'XMLDocument'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(105): error C2872: 'XMLDocument': ambiguous symbol
    2>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\msxml.h(10095): note: could be 'XMLDocument'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\tinyXML2/tinyxml2.h(1650): note: or       'tinyxml2::XMLDocument'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(107): error C2027: use of undefined type 'XMLDocument'
    2>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\msxml.h(10095): note: see declaration of 'XMLDocument'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(110): error C2027: use of undefined type 'XMLDocument'
    2>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\msxml.h(10095): note: see declaration of 'XMLDocument'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(110): warning C4473: 'sprintf' : not enough arguments passed for format string
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(110): note: placeholders and their parameters expect 1 variadic arguments, but 0 were provided
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(110): note: the missing variadic argument 1 is required by format string '%s'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(114): error C2027: use of undefined type 'XMLDocument'
    2>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\msxml.h(10095): note: see declaration of 'XMLDocument'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(147): error C2872: 'XMLDocument': ambiguous symbol
    2>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\msxml.h(10095): note: could be 'XMLDocument'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\tinyXML2/tinyxml2.h(1650): note: or       'tinyxml2::XMLDocument'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(147): error C2027: use of undefined type 'XMLDocument'
    2>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\msxml.h(10095): note: see declaration of 'XMLDocument'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(147): error C2672: 'std::list<std::unique_ptr<XMLDocument,std::default_delete<_Ty>>,std::allocator<std::unique_ptr<_Ty,std::default_delete<_Ty>>>>::emplace_back': no matching overloaded function found
    2>        with
    2>        [
    2>            _Ty=XMLDocument
    2>        ]
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(148): error C2872: 'XMLDocument': ambiguous symbol
    2>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\msxml.h(10095): note: could be 'XMLDocument'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\tinyXML2/tinyxml2.h(1650): note: or       'tinyxml2::XMLDocument'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(148): warning C4457: declaration of 'doc' hides function parameter
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(105): note: see declaration of 'doc'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(149): error C2027: use of undefined type 'XMLDocument'
    2>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\msxml.h(10095): note: see declaration of 'XMLDocument'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(170): error C2027: use of undefined type 'XMLDocument'
    2>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\msxml.h(10095): note: see declaration of 'XMLDocument'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(189): error C2872: 'XMLDocument': ambiguous symbol
    2>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\msxml.h(10095): note: could be 'XMLDocument'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\tinyXML2/tinyxml2.h(1650): note: or       'tinyxml2::XMLDocument'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(189): error C2079: 'doc' uses undefined class 'XMLDocument'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(191): error C3536: 'xml_error': cannot be used before it is initialized
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(194): warning C4473: 'sprintf' : not enough arguments passed for format string
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(194): note: placeholders and their parameters expect 1 variadic arguments, but 0 were provided
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(194): note: the missing variadic argument 1 is required by format string '%s'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(395): error C2027: use of undefined type 'XMLDocument'
    2>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\msxml.h(10095): note: see declaration of 'XMLDocument'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(395): error C2039: 'RootElement': is not a member of 'std::unique_ptr<XMLDocument,std::default_delete<_Ty>>'
    2>        with
    2>        [
    2>            _Ty=XMLDocument
    2>        ]
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(46): note: see declaration of 'std::unique_ptr<XMLDocument,std::default_delete<_Ty>>'
    2>        with
    2>        [
    2>            _Ty=XMLDocument
    2>        ]
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(527): error C2664: 'std::string BT::demangle(const char *)': cannot convert argument 1 from 'const type_info *' to 'const char *'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(527): note: Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(528): error C2664: 'std::string BT::demangle(const char *)': cannot convert argument 1 from 'const type_info *' to 'const char *'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(528): note: Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(644): error C2872: 'XMLDocument': ambiguous symbol
    2>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\msxml.h(10095): note: could be 'XMLDocument'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\tinyXML2/tinyxml2.h(1650): note: or       'tinyxml2::XMLDocument'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(644): error C2079: 'doc' uses undefined class 'XMLDocument'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(685): error C2664: 'std::string BT::demangle(const char *)': cannot convert argument 1 from 'const type_info *' to 'const char *'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(685): note: Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(685): error C2661: 'tinyxml2::XMLElement::SetAttribute': no overloaded function takes 1 arguments
    2>inverter_node.cpp
    2>repeat_node.cpp
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/utils/safe_any.hpp(243): error C2664: 'std::string BT::demangle(const char *)': cannot convert argument 1 from 'const type_info' to 'const char *'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/utils/safe_any.hpp(243): note: No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/utils/safe_any.hpp(183): note: see reference to function template instantiation 'std::string BT::Any::errorMsg<DST>(void) const' being compiled
    2>        with
    2>        [
    2>            DST=std::string
    2>        ]
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/utils/safe_any.hpp(131): note: see reference to function template instantiation 'nonstd::expected_lite::expected<T,std::string> BT::Any::convert<T>(void *) const' being compiled
    2>        with
    2>        [
    2>            T=std::string
    2>        ]
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/tree_node.h(213): note: see reference to function template instantiation 'T BT::Any::cast<std::string>(void) const' being compiled
    2>        with
    2>        [
    2>            T=std::string
    2>        ]
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\decorators\repeat_node.cpp(42): note: see reference to function template instantiation 'BT::Result BT::TreeNode::getInput<unsigned int>(const std::string &,T &) const' being compiled
    2>        with
    2>        [
    2>            T=unsigned int
    2>        ]
    2>retry_node.cpp
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/utils/safe_any.hpp(243): error C2664: 'std::string BT::demangle(const char *)': cannot convert argument 1 from 'const type_info' to 'const char *'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/utils/safe_any.hpp(243): note: No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/utils/safe_any.hpp(183): note: see reference to function template instantiation 'std::string BT::Any::errorMsg<DST>(void) const' being compiled
    2>        with
    2>        [
    2>            DST=std::string
    2>        ]
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/utils/safe_any.hpp(131): note: see reference to function template instantiation 'nonstd::expected_lite::expected<T,std::string> BT::Any::convert<T>(void *) const' being compiled
    2>        with
    2>        [
    2>            T=std::string
    2>        ]
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/tree_node.h(213): note: see reference to function template instantiation 'T BT::Any::cast<std::string>(void) const' being compiled
    2>        with
    2>        [
    2>            T=std::string
    2>        ]
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\decorators\retry_node.cpp(47): note: see reference to function template instantiation 'BT::Result BT::TreeNode::getInput<unsigned int>(const std::string &,T &) const' being compiled
    2>        with
    2>        [
    2>            T=unsigned int
    2>        ]
    2>subtree_node.cpp
    2>timeout_node.cpp
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/utils/safe_any.hpp(243): error C2664: 'std::string BT::demangle(const char *)': cannot convert argument 1 from 'const type_info' to 'const char *'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/utils/safe_any.hpp(243): note: No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/utils/safe_any.hpp(183): note: see reference to function template instantiation 'std::string BT::Any::errorMsg<DST>(void) const' being compiled
    2>        with
    2>        [
    2>            DST=std::string
    2>        ]
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/utils/safe_any.hpp(131): note: see reference to function template instantiation 'nonstd::expected_lite::expected<T,std::string> BT::Any::convert<T>(void *) const' being compiled
    2>        with
    2>        [
    2>            T=std::string
    2>        ]
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/tree_node.h(213): note: see reference to function template instantiation 'T BT::Any::cast<std::string>(void) const' being compiled
    2>        with
    2>        [
    2>            T=std::string
    2>        ]
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\decorators\timeout_node.cpp(43): note: see reference to function template instantiation 'BT::Result BT::TreeNode::getInput<unsigned int>(const std::string &,T &) const' being compiled
    2>        with
    2>        [
    2>            T=unsigned int
    2>        ]
    2>fallback_node.cpp
    2>parallel_node.cpp
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/utils/safe_any.hpp(243): error C2664: 'std::string BT::demangle(const char *)': cannot convert argument 1 from 'const type_info' to 'const char *'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/utils/safe_any.hpp(243): note: No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/utils/safe_any.hpp(183): note: see reference to function template instantiation 'std::string BT::Any::errorMsg<DST>(void) const' being compiled
    2>        with
    2>        [
    2>            DST=std::string
    2>        ]
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/utils/safe_any.hpp(131): note: see reference to function template instantiation 'nonstd::expected_lite::expected<T,std::string> BT::Any::convert<T>(void *) const' being compiled
    2>        with
    2>        [
    2>            T=std::string
    2>        ]
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/tree_node.h(213): note: see reference to function template instantiation 'T BT::Any::cast<std::string>(void) const' being compiled
    2>        with
    2>        [
    2>            T=std::string
    2>        ]
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\controls\parallel_node.cpp(41): note: see reference to function template instantiation 'BT::Result BT::TreeNode::getInput<unsigned int>(const std::string &,T &) const' being compiled
    2>        with
    2>        [
    2>            T=unsigned int
    2>        ]
    2>reactive_sequence.cpp
    2>Generating Code...
    2>p:\compilados\x32-x64\trabajo_msvc2017_x64\behaviortree.cpp\src\decorators\inverter_node.cpp(52): error C2220: warning treated as error - no 'object' file generated
    2>p:\compilados\x32-x64\trabajo_msvc2017_x64\behaviortree.cpp\src\decorators\inverter_node.cpp(52): warning C4702: unreachable code
    2>Compiling...
    2>reactive_fallback.cpp
    2>sequence_node.cpp
    2>sequence_star_node.cpp
    2>bt_cout_logger.cpp
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/tree_node.h(210): error C2220: warning treated as error - no 'object' file generated
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/tree_node.h(210): warning C4127: conditional expression is constant
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/tree_node.h(211): note: consider using 'if constexpr' statement instead
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/actions/set_blackboard_node.h(49): note: see reference to function template instantiation 'BT::Result BT::TreeNode::getInput<std::string>(const std::string &,T &) const' being compiled
    2>        with
    2>        [
    2>            T=std::string
    2>        ]
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/blackboard.h(170): error C2664: 'std::string BT::demangle(const char *)': cannot convert argument 1 from 'const type_info *const ' to 'const char *'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/blackboard.h(170): note: Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/tree_node.h(258): note: see reference to function template instantiation 'void BT::Blackboard::set<T>(const std::string &,const T &)' being compiled
    2>        with
    2>        [
    2>            T=std::string
    2>        ]
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/actions/set_blackboard_node.h(57): note: see reference to function template instantiation 'BT::Result BT::TreeNode::setOutput<std::string>(const std::string &,const T &)' being compiled
    2>        with
    2>        [
    2>            T=std::string
    2>        ]
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/blackboard.h(171): error C2664: 'std::string BT::demangle(const char *)': cannot convert argument 1 from 'const type_info' to 'const char *'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/blackboard.h(171): note: No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
    2>bt_file_logger.cpp
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/loggers/bt_flatbuffer_helper.h(120): error C2664: 'std::string BT::demangle(const char *)': cannot convert argument 1 from 'const type_info *' to 'const char *'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/loggers/bt_flatbuffer_helper.h(120): note: Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/loggers/bt_flatbuffer_helper.h(153): warning C4244: 'initializing': conversion from '_Rep' to 'uint32_t', possible loss of data
    2>        with
    2>        [
    2>            _Rep=__int64
    2>        ]
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\loggers\bt_file_logger.cpp(50): warning C4804: '>=': unsafe use of type 'bool' in operation
    2>bt_minitrace_logger.cpp
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\minitrace/minitrace.h(232): error C2220: warning treated as error - no 'object' file generated
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\minitrace/minitrace.h(232): warning C4244: '=': conversion from 'int64_t' to 'double', possible loss of data
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/tree_node.h(210): warning C4127: conditional expression is constant
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/tree_node.h(211): note: consider using 'if constexpr' statement instead
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/actions/set_blackboard_node.h(49): note: see reference to function template instantiation 'BT::Result BT::TreeNode::getInput<std::string>(const std::string &,T &) const' being compiled
    2>        with
    2>        [
    2>            T=std::string
    2>        ]
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/blackboard.h(170): error C2664: 'std::string BT::demangle(const char *)': cannot convert argument 1 from 'const type_info *const ' to 'const char *'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/blackboard.h(170): note: Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/tree_node.h(258): note: see reference to function template instantiation 'void BT::Blackboard::set<T>(const std::string &,const T &)' being compiled
    2>        with
    2>        [
    2>            T=std::string
    2>        ]
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/actions/set_blackboard_node.h(57): note: see reference to function template instantiation 'BT::Result BT::TreeNode::setOutput<std::string>(const std::string &,const T &)' being compiled
    2>        with
    2>        [
    2>            T=std::string
    2>        ]
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/blackboard.h(171): error C2664: 'std::string BT::demangle(const char *)': cannot convert argument 1 from 'const type_info' to 'const char *'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/blackboard.h(171): note: No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
    2>tinyxml2.cpp
    2>minitrace.cpp
    2>p:\compilados\x32-x64\trabajo_msvc2017_x64\behaviortree.cpp\3rdparty\minitrace\minitrace.h(232): error C2220: warning treated as error - no 'object' file generated
    2>p:\compilados\x32-x64\trabajo_msvc2017_x64\behaviortree.cpp\3rdparty\minitrace\minitrace.h(232): warning C4244: '=': conversion from 'int64_t' to 'double', possible loss of data
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\minitrace\minitrace.cpp(87): warning C4244: 'initializing': conversion from 'double' to 'int64_t', possible loss of data
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\minitrace\minitrace.cpp(280): warning C4456: declaration of 'len' hides previous local declaration
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\minitrace\minitrace.cpp(241): note: see declaration of 'len'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\minitrace\minitrace.cpp(281): warning C4456: declaration of 'i' hides previous local declaration
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\minitrace\minitrace.cpp(228): note: see declaration of 'i'
    2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\minitrace\minitrace.cpp(332): warning C4244: '=': conversion from 'int64_t' to 'double', possible loss of data
    2>backward.cpp
    2>p:\compilados\x32-x64\trabajo_msvc2017_x64\behaviortree.cpp\3rdparty\backward-cpp\backward.hpp(788): error C2059: syntax error: '('
    2>p:\compilados\x32-x64\trabajo_msvc2017_x64\behaviortree.cpp\3rdparty\backward-cpp\backward.hpp(788): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
    2>p:\compilados\x32-x64\trabajo_msvc2017_x64\behaviortree.cpp\3rdparty\backward-cpp\backward.hpp(788): error C2059: syntax error: ')'
    2>p:\compilados\x32-x64\trabajo_msvc2017_x64\behaviortree.cpp\3rdparty\backward-cpp\backward.hpp(789): warning C4183: '__attribute__': missing return type; assumed to be a member function returning 'int'
    2>p:\compilados\x32-x64\trabajo_msvc2017_x64\behaviortree.cpp\3rdparty\backward-cpp\backward.hpp(795): error C3861: 'backtrace': identifier not found
    2>Generating Code...
    2>Done building project "behaviortree_cpp_v3.vcxproj" -- FAILED.
    3>------ Rebuild All started: Project: ALL_BUILD, Configuration: Debug x64 ------
    3>Building Custom Rule P:/Compilados/x32-x64/TRABAJO_MSVC2017_x64/BehaviorTree.CPP/CMakeLists.txt
    3>CMake does not need to re-run because P:/Compilados/x32-x64/TRABAJO_MSVC2017_x64/BehaviorTree.CPP/builds/debug/CMakeFiles/generate.stamp is up-to-date.
    4>------ Skipped Rebuild All: Project: INSTALL, Configuration: Debug x64 ------
    4>Project not selected to build for this solution configuration 
    ========== Rebuild All: 2 succeeded, 1 failed, 1 skipped ==========
    

    DJuego

    opened by DJuego 13
  • Fixed bug where including relative paths would fail to find the correct file

    Fixed bug where including relative paths would fail to find the correct file

    By updating the current_path to the included file's absolute path before recursing, all relative paths are relative to the included file. After recursively including the new tree, the change to current_path is undone.

    Added unit tests to verify new behavior. The new unit tests aren't built for catkin or ament because I wasn't sure where to copy the test tree files.

    Because the trees are included using relative paths to the test executable, they fail if the current working directory is not the same as the trees/ directory i.e., ./behaviortree_cpp_v3_test works but ./bin/behaviortree_cpp_v3_test fails. I'd like to resolve this prior to merging but not sure how to.

    Fixes #324

    opened by asasine 12
  • Passing a variable (string) to the behavior tree from external source.

    Passing a variable (string) to the behavior tree from external source.

    Hi,

    I have a behavior tree which is similar to the one shown below. I use docker containers to run and launch nodes. I want to pass a string as a variable to the tree from my docker-compose file so that I can chose between different setups. Is there any way I can get this easily?

    <Switch2 variable="{window_number}" case_1="window_1" case_2="window_2">
        <Action ID="OpenWindow" door="window_1"/>
        <Action ID="OpenWindow" door="window_2"/>
        <Action ID="OpenWindow" door="none"/>
    </Switch2>
    

    In the above example, I want to set the value of the window_number variable from docker-compose file.

    opened by Naraharirahul 0
  • SequenceNode should not return RUNNING when child node return success

    SequenceNode should not return RUNNING when child node return success

    I found SequenceNode returning RUNNING status when tree is tickOnce and first child return success while second child not ticked.

    I used the newest code, and found these in source code of sequence_node.cpp.

        case NodeStatus::SUCCESS: {
            current_child_idx_++;
            // Return the execution flow if the child is async,
            // to make this interruptable.
            if (requiresWakeUp() && prev_status == NodeStatus::IDLE &&
                current_child_idx_ < children_count)
            {
              emitWakeUpSignal();
              return NodeStatus::RUNNING;
            }
          }
    

    while in v3.8, it will not return RUNNING, and continue to tick next child node. And I think this is the logic I wanted.

        switch (child_status)
        {
          case NodeStatus::RUNNING: {
            return child_status;
          }
          case NodeStatus::FAILURE: {
            // Reset on failure
            resetChildren();
            current_child_idx_ = 0;
            return child_status;
          }
          case NodeStatus::SUCCESS: {
            current_child_idx_++;
          }
          break;
    
          case NodeStatus::IDLE: {
            throw LogicError("A child node must never return IDLE");
          }
        } 
    

    The return NodeStatus::RUNNING; should be deleted in first code I think.

    opened by qZhang88 0
  • Discourse Forum: not receiving activation email

    Discourse Forum: not receiving activation email

    Hi,

    Sorry for spamming here, but I can not register to the discourse forum. I am not receiving the activation email, I tried both with gmail and microsoft emails, waiting a day and trying to resend them

    Thanks!

    opened by torydebra 0
  • I can't find BT::StatefulAsyncAction.

    I can't find BT::StatefulAsyncAction.

    Hi, I am new to Behavior tree so I follow the tutorials (v4.0).

    In Tutorials - Basics 04. Reactive behaviors.

    class MoveBaseAction : public BT::StatefulAsyncAction

    I got the error in BT::StatefulAsyncAction.

    I tried to find BT::StatefulAsyncAction in http://docs.ros.org/en/kinetic/api/behaviortree_cpp_v3/html/namespaceBT.html

    But I can't find BT::StatefulAsyncAction too.

    I just can find BT::StatefulActionNode. But I am not sure this class performs async operation.

    Please let me know if I'm doing something wrong or if I'm misunderstanding something.

    opened by jwson97 0
  • [Bug]: Including subtrees with the

    [Bug]: Including subtrees with the "ros_pkg" attribute is broken for ROS1

    • For ROS1 packages, the ros_pkg attribute of the <include> tag can no longer be used to specify a path to a Subtree.
    • This commit is probably the one which we believe introduced the problem
    • Problem was found when we made the upgrade from v3.6.1 -> v3.8.1
    opened by Lnsrini 1
  • Fixed use of ros_pkg for ROS1 applications

    Fixed use of ros_pkg for ROS1 applications

    The include tag wasn't working properly for ROS1 applications when used with the ros_pkg argument. For instance, a BT that had this line:

    <include ros_pkg="bt_tools_craftsman" path="behaviors/add_affordance_template.xml" />
    

    would crash, with the error of XML_FILE_NOT_FOUND. This fix solves the issue.

    opened by ana-GT 0
Releases(3.7.0)
  • 3.7.0(May 23, 2022)

    Noteworthy changes:

    • A better way to include BTs from multiple files, either manually or using the <include> tag
    • Adding a new Tree::sleep() method (experimental) to create event-driven trees.
    • Example showing how to effectively use queues to do a "for-loop"
    • Bug fixes
    Source code(tar.gz)
    Source code(zip)
  • 3.3.0(Mar 22, 2020)

    In this new release, there are many changes (including few that are breaking in API).

    • New Switch ControlNode.
    • Tree now provides two public methods: tickRoot() and haltTree()
    • CoroAction (coroutines) now need Boost.
    • most importantly, TreeNode::setStatus() is protected now!

    The last change will be annoying for many people, but it is the only way to avoid nasty antipatterns.

    Source code(tar.gz)
    Source code(zip)
  • 2.3.0(Nov 28, 2018)

    There are few bugs fixed since version 2.2.0 (see CHANGELOG).

    Someone code may break because the signature of the method registerBuilder had to change since the manifest was not created nor added to the manifest list.

    See commit 6181d87cc1128485fb11fe7dd6e8c796348a38af for details.

    Source code(tar.gz)
    Source code(zip)
  • 2.2.0(Nov 20, 2018)

    This release includes a few changes that you can read in the CHANGELOG.rst.

    The most notable is that SimpleActions, SimpleDecorators and SimpleConditions will not allow NodeParameters. Check the tutorial T06 out to see a practical example of how this helps wrapping legacy code into a TreeNode.

    Source code(tar.gz)
    Source code(zip)
  • 2.1.0(Nov 16, 2018)

    With the latest change in CMake to support the installation of the library, it became apparent that the include needed some refactoring.

    This will break the code of people using the previous version, sorry :(

    Bear with me

    Source code(tar.gz)
    Source code(zip)
  • 2.0-beta(Oct 17, 2018)

x64dbg plugin for simple spoofing of CPUID instruction behavior

CPUID Spoofer CpuidSpoofer is a x64dbg plugin which helps you to modify the behaviour of the CPUID instruction. For example, you can easily change the

null 56 Jan 8, 2023
A simple C library for working with KD-Trees

kdtree Overview kdtree is a simple, easy to use C library for working with kd-trees. Kd-trees are an extension of binary search trees to k-dimensional

John Tsiombikas 348 Dec 28, 2022
Several translations of segment trees for CMU's 15-451 (Algorithms).

segtrees Several translations of segment trees for CMU's 15-451 (Algorithms). Feel free to contact me at [email protected] for questions/comment

Abigale Kim 19 Nov 27, 2022
Complete introduction to size balanced trees (O(1) amortized complexity)

Size Balanced Tree A size balanced tree (SBT) is a self-balancing binary search tree (SBBST) rebalanced by examining the sizes of each node's subtrees

Jishan Shaikh 19 Dec 7, 2022
heuristically and dynamically sample (more) uniformly from large decision trees of unknown shape

PROBLEM STATEMENT When writing a randomized generator for some file format in a general-purpose programming language, we can view the resulting progra

John Regehr 4 Feb 15, 2022
A library of generic data structures.

Collections-C A library of generic data structures including a list, array, hashtable, deque etc.. Examples Building and Installing Using the library

Srđan Panić 2.5k Jan 8, 2023
Library of generic and type safe containers in pure C language (C99 or C11) for a wide collection of container (comparable to the C++ STL).

M*LIB: Generic type-safe Container Library for C language Overview M*LIB (M star lib) is a C library enabling to use generic and type safe container i

PpHd 571 Jan 5, 2023
Linear Linked List Library

list.h Implementations for singly-linked and doubly-linked list functions. Basic Working Example #include <stdio.h> #include <stdlib.h> #include "list

Nick Bulischeck 46 Dec 28, 2022
C header library for typed lists (using macros and "template" C).

vector.h C header library for typed lists (using macros and "template" C). Essentially, this is a resizable array of elements of your choosing that is

Christopher Swenson 33 Dec 19, 2022
Directed Acyclic Graph Execution Engine (DAGEE) is a C++ library that enables programmers to express computation and data movement, as task graphs that are scheduled concurrently and asynchronously on both CPUs and GPUs.

Directed Acyclic Graph Execution Engine (DAGEE) is a C++ library that enables programmers to express computation and data movement, as tasks in a graph structure, where edges represent task dependencies

null 28 Dec 18, 2022
nanoplan is a header-only C++11 library for search-based robot planning.

nanoplan is a header-only C++11 library for search-based robot planning. The primary design goals are correctness, ease-of-use, and efficiency (in tha

Jordan Ford 14 May 17, 2022
libsais is a library for linear time suffix array and burrows wheeler transform construction based on induced sorting algorithm.

libsais libsais is a library for fast (see Benchmarks below) linear time suffix array and Burrows-Wheeler transform construction based on induced sort

Ilya Grebnov 112 Dec 22, 2022
An open source library for C

Eric O Meehan C Library Introduction Eric O Meehan's C Library is an open source collection of tools for the C programming language. The project is in

Eric O Meehan 115 Dec 11, 2022
Wonderful library with lots of useful functions, algorithms and data structures in C, link it with -l9wada

Lib9wada Wonderful library with lots of useful functions, algorithms and data structures in C, link it with -l9wada Usage Compile the library with mak

Lprogrammers Lm9awdine 53 Nov 21, 2022
Experimental managed C-strings library

Stricks Managed C strings library. ?? API Why ? Because handling C strings is tedious and error-prone. Appending while keeping track of length, null-t

Francois Alcover 88 Oct 10, 2022
Wonderful library with lots of useful functions, algorithms and data structures in C, link it with -l9wada

LibC+ Wonderful library with lots of useful functions, algorithms and data structures in C, link it with -lC+ Better than C, not as much as c++ Usage

BnademOverflow 53 Nov 21, 2022
Simple C++ Genetic Algorithm library

crsGA: Simple C++ Genetic Algorithm library crsGA is a simple C++ template library for developing genetic algorithms, plus some other utilities (Logge

Rafael Gaitán 6 Apr 24, 2022
A library of type safe sets over fixed size collections of types or values, including methods for accessing, modifying, visiting and iterating over those.

cpp_enum_set A library of type safe sets over fixed size collections of types or values, including methods for accessing, modifying, visiting and iter

Carl Dehlin 22 Jun 16, 2022
BitMagic Library

BitMagic C++ Library BitMagic was created as a Algebra of Sets toolkit for Information Retrieval but currently evolved into a more general Data Scienc

Anatoliy Kuznetsov 357 Dec 21, 2022