15#ifndef CONTROLLER_INTERFACE__HELPERS_HPP_
16#define CONTROLLER_INTERFACE__HELPERS_HPP_
26#include "hardware_interface/helpers.hpp"
28namespace controller_interface
50bool get_ordered_interfaces(
51 std::vector<T> & unordered_interfaces,
const std::vector<std::string> & ordered_names,
52 const std::string & interface_type, std::vector<std::reference_wrapper<T>> & ordered_interfaces)
54 if (ordered_interfaces.capacity() < ordered_names.size())
56 throw std::range_error(
57 "Capacity of ordered_interfaces (" + std::to_string(ordered_interfaces.capacity()) +
58 ") has to be equal or higher as size of ordered_names (" +
59 std::to_string(ordered_names.size()) +
60 ") for realtime reasons. Please reserve sufficient space in the on_configure method to avoid "
61 "allocating memory in real-time loop.");
63 for (
const auto & name : ordered_names)
65 for (
auto & interface : unordered_interfaces)
67 if (!interface_type.empty())
72 ((name == interface.get_prefix_name()) &&
73 (interface_type == interface.get_interface_name())) ||
74 ((name +
"/" + interface_type) == interface.get_name()))
76 ordered_interfaces.push_back(std::ref(interface));
81 if (name == interface.get_name())
83 ordered_interfaces.push_back(std::ref(interface));
89 return ordered_names.size() == ordered_interfaces.size();
92inline bool interface_list_contains_interface_type(
93 const std::vector<std::string> & interface_type_list,
const std::string & interface_type)
95 return std::find(interface_type_list.begin(), interface_type_list.end(), interface_type) !=
96 interface_type_list.end();