mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-26 01:51:41 +00:00
[wpilib] SpeedControllerGroup: Add vector-taking constructor (#2194)
This allows the list to be constructed dynamically. Co-authored-by: Thad House <thadhouse1@gmail.com>
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) 2016-2018 FIRST. All Rights Reserved. */
|
||||
/* Copyright (c) 2016-2020 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. */
|
||||
@@ -8,9 +8,27 @@
|
||||
#include "frc/SpeedControllerGroup.h"
|
||||
|
||||
#include "frc/smartdashboard/SendableBuilder.h"
|
||||
#include "frc/smartdashboard/SendableRegistry.h"
|
||||
|
||||
using namespace frc;
|
||||
|
||||
// Can't use a delegated constructor here because of an MSVC bug.
|
||||
// https://developercommunity.visualstudio.com/content/problem/583/compiler-bug-with-delegating-a-constructor.html
|
||||
|
||||
SpeedControllerGroup::SpeedControllerGroup(
|
||||
std::vector<std::reference_wrapper<SpeedController>>&& speedControllers)
|
||||
: m_speedControllers(std::move(speedControllers)) {
|
||||
Initialize();
|
||||
}
|
||||
|
||||
void SpeedControllerGroup::Initialize() {
|
||||
for (auto& speedController : m_speedControllers)
|
||||
SendableRegistry::GetInstance().AddChild(this, &speedController.get());
|
||||
static int instances = 0;
|
||||
++instances;
|
||||
SendableRegistry::GetInstance().Add(this, "SpeedControllerGroup", instances);
|
||||
}
|
||||
|
||||
void SpeedControllerGroup::Set(double speed) {
|
||||
for (auto speedController : m_speedControllers) {
|
||||
speedController.get().Set(m_isInverted ? -speed : speed);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) 2016-2019 FIRST. All Rights Reserved. */
|
||||
/* Copyright (c) 2016-2020 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. */
|
||||
@@ -23,7 +23,8 @@ class SpeedControllerGroup : public Sendable,
|
||||
template <class... SpeedControllers>
|
||||
explicit SpeedControllerGroup(SpeedController& speedController,
|
||||
SpeedControllers&... speedControllers);
|
||||
~SpeedControllerGroup() override = default;
|
||||
explicit SpeedControllerGroup(
|
||||
std::vector<std::reference_wrapper<SpeedController>>&& speedControllers);
|
||||
|
||||
SpeedControllerGroup(SpeedControllerGroup&&) = default;
|
||||
SpeedControllerGroup& operator=(SpeedControllerGroup&&) = default;
|
||||
@@ -41,6 +42,8 @@ class SpeedControllerGroup : public Sendable,
|
||||
private:
|
||||
bool m_isInverted = false;
|
||||
std::vector<std::reference_wrapper<SpeedController>> m_speedControllers;
|
||||
|
||||
void Initialize();
|
||||
};
|
||||
|
||||
} // namespace frc
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) 2016-2019 FIRST. All Rights Reserved. */
|
||||
/* Copyright (c) 2016-2020 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. */
|
||||
@@ -7,19 +7,17 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "frc/smartdashboard/SendableRegistry.h"
|
||||
#include <functional>
|
||||
#include <vector>
|
||||
|
||||
namespace frc {
|
||||
|
||||
template <class... SpeedControllers>
|
||||
SpeedControllerGroup::SpeedControllerGroup(
|
||||
SpeedController& speedController, SpeedControllers&... speedControllers)
|
||||
: m_speedControllers{speedController, speedControllers...} {
|
||||
for (auto& speedController : m_speedControllers)
|
||||
SendableRegistry::GetInstance().AddChild(this, &speedController.get());
|
||||
static int instances = 0;
|
||||
++instances;
|
||||
SendableRegistry::GetInstance().Add(this, "SpeedControllerGroup", instances);
|
||||
: m_speedControllers(std::vector<std::reference_wrapper<SpeedController>>{
|
||||
speedController, speedControllers...}) {
|
||||
Initialize();
|
||||
}
|
||||
|
||||
} // namespace frc
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) 2016-2019 FIRST. All Rights Reserved. */
|
||||
/* Copyright (c) 2016-2020 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. */
|
||||
@@ -7,6 +7,8 @@
|
||||
|
||||
package edu.wpi.first.wpilibj;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
import edu.wpi.first.wpilibj.smartdashboard.SendableBuilder;
|
||||
import edu.wpi.first.wpilibj.smartdashboard.SendableRegistry;
|
||||
|
||||
@@ -28,13 +30,23 @@ public class SpeedControllerGroup implements SpeedController, Sendable, AutoClos
|
||||
SpeedController... speedControllers) {
|
||||
m_speedControllers = new SpeedController[speedControllers.length + 1];
|
||||
m_speedControllers[0] = speedController;
|
||||
SendableRegistry.addChild(this, speedController);
|
||||
for (int i = 0; i < speedControllers.length; i++) {
|
||||
m_speedControllers[i + 1] = speedControllers[i];
|
||||
SendableRegistry.addChild(this, speedControllers[i]);
|
||||
}
|
||||
init();
|
||||
}
|
||||
|
||||
public SpeedControllerGroup(SpeedController[] speedControllers) {
|
||||
m_speedControllers = Arrays.copyOf(speedControllers, speedControllers.length);
|
||||
init();
|
||||
}
|
||||
|
||||
private void init() {
|
||||
for (SpeedController controller : m_speedControllers) {
|
||||
SendableRegistry.addChild(this, controller);
|
||||
}
|
||||
instances++;
|
||||
SendableRegistry.addLW(this, "tSpeedControllerGroup", instances);
|
||||
SendableRegistry.addLW(this, "SpeedControllerGroup", instances);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user