WPILibC++ 2024.3.1
RepeatCommand.h
Go to the documentation of this file.
1// Copyright (c) FIRST and other WPILib contributors.
2// Open Source Software; you can modify and/or share it under the terms of
3// the WPILib BSD license file in the root directory of this project.
4
5#pragma once
6
7#ifdef _WIN32
8#pragma warning(push)
9#pragma warning(disable : 4521)
10#endif
11
12#include <concepts>
13#include <memory>
14#include <utility>
15
18
19namespace frc2 {
20/**
21 * A command that runs another command repeatedly, restarting it when it ends,
22 * until this command is interrupted. Command instances that are passed to it
23 * cannot be added to any other groups, or scheduled individually.
24 *
25 * <p>The rules for command compositions apply: command instances that are
26 * passed to it are owned by the composition and cannot be added to any other
27 * composition or scheduled individually, and the composition requires all
28 * subsystems its components require.
29 *
30 * <p>This class is provided by the NewCommands VendorDep
31 */
32class RepeatCommand : public CommandHelper<Command, RepeatCommand> {
33 public:
34 /**
35 * Creates a new RepeatCommand. Will run another command repeatedly,
36 * restarting it whenever it ends, until this command is interrupted.
37 *
38 * @param command the command to run repeatedly
39 */
40 explicit RepeatCommand(std::unique_ptr<Command>&& command);
41
42 /**
43 * Creates a new RepeatCommand. Will run another command repeatedly,
44 * restarting it whenever it ends, until this command is interrupted.
45 *
46 * @param command the command to run repeatedly
47 */
48 template <std::derived_from<Command> T>
49 // NOLINTNEXTLINE(bugprone-forwarding-reference-overload)
50 explicit RepeatCommand(T&& command)
52 std::make_unique<std::decay_t<T>>(std::forward<T>(command))) {}
53
54 RepeatCommand(RepeatCommand&& other) = default;
55
56 // No copy constructors for command groups
57 RepeatCommand(const RepeatCommand& other) = delete;
58
59 // Prevent template expansion from emulating copy ctor
61
62 void Initialize() override;
63
64 void Execute() override;
65
66 bool IsFinished() override;
67
68 void End(bool interrupted) override;
69
70 bool RunsWhenDisabled() const override;
71
73
74 void InitSendable(wpi::SendableBuilder& builder) override;
75
76 private:
77 std::unique_ptr<Command> m_command;
78 bool m_ended;
79};
80} // namespace frc2
81
82#ifdef _WIN32
83#pragma warning(pop)
84#endif
CRTP implementation to allow polymorphic decorator functions in Command.
Definition: CommandHelper.h:27
InterruptionBehavior
An enum describing the command's behavior when another command with a shared requirement is scheduled...
Definition: Command.h:173
A command that runs another command repeatedly, restarting it when it ends, until this command is int...
Definition: RepeatCommand.h:32
RepeatCommand(RepeatCommand &&other)=default
void End(bool interrupted) override
void InitSendable(wpi::SendableBuilder &builder) override
void Execute() override
bool RunsWhenDisabled() const override
RepeatCommand(T &&command)
Creates a new RepeatCommand.
Definition: RepeatCommand.h:50
void Initialize() override
Command::InterruptionBehavior GetInterruptionBehavior() const override
RepeatCommand(const RepeatCommand &other)=delete
RepeatCommand(RepeatCommand &)=delete
RepeatCommand(std::unique_ptr< Command > &&command)
Creates a new RepeatCommand.
bool IsFinished() override
Helper class for building Sendable dashboard representations.
Definition: SendableBuilder.h:21
Definition: TrapezoidProfileSubsystem.h:12
Definition: array.h:89
typename std::decay< T >::type decay_t
Definition: expected:231