mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-21 01:01:43 +00:00
- Remove use of std::set. The only place std::set was actually used was in ParallelRaceGroup, but this was of minimal utility as ParallelRaceGroup checked for duplicate subsystem requirements, so it would be very unusual to end up with duplicate commands in any case; replaced it with a vector. - Remove use of std::unordered_map except for SelectCommand. Replaced with vector. - Use pImpl idiom for CommandScheduler - Minimize include files (remove unnecessary ones) - Reformat include file order for consistency
59 lines
2.0 KiB
C++
59 lines
2.0 KiB
C++
/*----------------------------------------------------------------------------*/
|
|
/* Copyright (c) 2019 FIRST. All Rights Reserved. */
|
|
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
|
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
|
/* the project. */
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
#pragma once
|
|
|
|
#include <functional>
|
|
|
|
#include "frc2/command/CommandBase.h"
|
|
#include "frc2/command/CommandHelper.h"
|
|
|
|
namespace frc2 {
|
|
/**
|
|
* A command that allows the user to pass in functions for each of the basic
|
|
* command methods through the constructor. Useful for inline definitions of
|
|
* complex commands - note, however, that if a command is beyond a certain
|
|
* complexity it is usually better practice to write a proper class for it than
|
|
* to inline it.
|
|
*/
|
|
class FunctionalCommand : public CommandHelper<CommandBase, FunctionalCommand> {
|
|
public:
|
|
/**
|
|
* Creates a new FunctionalCommand.
|
|
*
|
|
* @param onInit the function to run on command initialization
|
|
* @param onExecute the function to run on command execution
|
|
* @param onEnd the function to run on command end
|
|
* @param isFinished the function that determines whether the command has
|
|
* finished
|
|
* @param requirements the subsystems required by this command
|
|
*/
|
|
FunctionalCommand(std::function<void()> onInit,
|
|
std::function<void()> onExecute,
|
|
std::function<void(bool)> onEnd,
|
|
std::function<bool()> isFinished);
|
|
|
|
FunctionalCommand(FunctionalCommand&& other) = default;
|
|
|
|
FunctionalCommand(const FunctionalCommand& other) = default;
|
|
|
|
void Initialize() override;
|
|
|
|
void Execute() override;
|
|
|
|
void End(bool interrupted) override;
|
|
|
|
bool IsFinished() override;
|
|
|
|
private:
|
|
std::function<void()> m_onInit;
|
|
std::function<void()> m_onExecute;
|
|
std::function<void(bool)> m_onEnd;
|
|
std::function<bool()> m_isFinished;
|
|
};
|
|
} // namespace frc2
|