mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-20 00:51:42 +00:00
This is a major restructuring of the WPILib repository to simply build procedures and remove the remnants of Maven from everything except the eclipse plugins. Gradle files have been largely simplified or rewritten, taking advantage of splitting up parts of the build into separate build files for ease of reading. The eclipse plugins are now in a separate project, as is ntcore. All dependencies are resolved via Maven dependencies, with the Jenkins-maintained WPILib repo. Project structures have also been simplified: we no longer have separate subprojects inside wpilibc and wpilibj. Where possible, these changes hav been done with git renames, to make sure we still have full history for all repositories. Other unrelated subprojects have also been broken out: OutlineViewer is now a separate project. Change-Id: Ib4e2a6e1a2f66427a14f16612b0e0d69ed661878
75 lines
2.4 KiB
C++
75 lines
2.4 KiB
C++
/*----------------------------------------------------------------------------*/
|
|
/* Copyright (c) FIRST 2011. 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 $(WIND_BASE)/WPILib. */
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
#ifndef __COMMAND_GROUP_H__
|
|
#define __COMMAND_GROUP_H__
|
|
|
|
#include "Commands/Command.h"
|
|
#include "Commands/CommandGroupEntry.h"
|
|
#include <list>
|
|
#include <vector>
|
|
|
|
/**
|
|
* A {@link CommandGroup} is a list of commands which are executed in sequence.
|
|
*
|
|
* <p>Commands in a {@link CommandGroup} are added using the {@link
|
|
* CommandGroup#AddSequential(Command) AddSequential(...)} method
|
|
* and are called sequentially.
|
|
* {@link CommandGroup CommandGroups} are themselves {@link Command Commands}
|
|
* and can be given to other {@link CommandGroup CommandGroups}.</p>
|
|
*
|
|
* <p>{@link CommandGroup CommandGroups} will carry all of the requirements of
|
|
* their {@link Command subcommands}. Additional
|
|
* requirements can be specified by calling {@link
|
|
*CommandGroup#Requires(Subsystem) Requires(...)}
|
|
* normally in the constructor.</P>
|
|
*
|
|
* <p>CommandGroups can also execute commands in parallel, simply by adding them
|
|
* using {@link CommandGroup#AddParallel(Command) AddParallel(...)}.</p>
|
|
*
|
|
* @see Command
|
|
* @see Subsystem
|
|
*/
|
|
class CommandGroup : public Command {
|
|
public:
|
|
CommandGroup() = default;
|
|
CommandGroup(const std::string &name);
|
|
virtual ~CommandGroup() = default;
|
|
|
|
void AddSequential(Command *command);
|
|
void AddSequential(Command *command, double timeout);
|
|
void AddParallel(Command *command);
|
|
void AddParallel(Command *command, double timeout);
|
|
bool IsInterruptible() const;
|
|
int GetSize() const;
|
|
|
|
protected:
|
|
virtual void Initialize();
|
|
virtual void Execute();
|
|
virtual bool IsFinished();
|
|
virtual void End();
|
|
virtual void Interrupted();
|
|
virtual void _Initialize();
|
|
virtual void _Interrupted();
|
|
virtual void _Execute();
|
|
virtual void _End();
|
|
|
|
private:
|
|
void CancelConflicts(Command *command);
|
|
|
|
/** The commands in this group (stored in entries) */
|
|
std::vector<CommandGroupEntry> m_commands;
|
|
|
|
/** The active children in this group (stored in entries) */
|
|
std::list<CommandGroupEntry> m_children;
|
|
|
|
/** The current command, -1 signifies that none have been run */
|
|
int m_currentCommandIndex = -1;
|
|
};
|
|
|
|
#endif
|