24#ifndef TAPROOT_GOVERNOR_LIMITED_COMMAND_HPP_
25#define TAPROOT_GOVERNOR_LIMITED_COMMAND_HPP_
31#include "../command.hpp"
44template <
size_t NUM_CONDITIONS>
49 const std::vector<Subsystem *> &subRequirements,
51 const std::array<CommandGovernorInterface *, NUM_CONDITIONS> &commandGovernorList)
53 commandGovernorList(commandGovernorList)
55 std::for_each(subRequirements.begin(), subRequirements.end(), [&](
auto sub) {
56 addSubsystemRequirement(sub);
66 commandGovernorList.begin(),
67 commandGovernorList.end(),
68 [](
auto governor) { return governor->isReady(); }) &&
76 for (
auto governor : commandGovernorList)
78 governor->onGovernedCommandInitialized();
84 void end(
bool interrupted)
override { command.
end(interrupted); }
89 commandGovernorList.begin(),
90 commandGovernorList.end(),
91 [](
auto governor) { return governor->isFinished(); }) ||
98 std::array<CommandGovernorInterface *, NUM_CONDITIONS> commandGovernorList;
Definition command.hpp:44
virtual void initialize()=0
virtual bool isFinished() const =0
virtual const char * getName() const =0
mockable subsystem_scheduler_bitmap_t getRequirementsBitwise() const
Definition command.hpp:64
virtual bool isReady()
Definition command.cpp:46
virtual void end(bool interrupted)=0
Definition governor_limited_command.hpp:46
GovernorLimitedCommand(const std::vector< Subsystem * > &subRequirements, Command &command, const std::array< CommandGovernorInterface *, NUM_CONDITIONS > &commandGovernorList)
Definition governor_limited_command.hpp:48
const char * getName() const override
Definition governor_limited_command.hpp:61
bool isReady() override
Definition governor_limited_command.hpp:63
void initialize() override
Definition governor_limited_command.hpp:72
bool isFinished() const override
Definition governor_limited_command.hpp:86
void end(bool interrupted) override
Definition governor_limited_command.hpp:84
void execute() override
Definition governor_limited_command.hpp:82
Definition command_governor_interface.hpp:28