[wpilib] Implement Trajectory.equals() (#2517)

This commit is contained in:
Starlight220
2020-05-28 06:43:32 +03:00
committed by GitHub
parent 92380485c8
commit 1b395fa21d
3 changed files with 35 additions and 1 deletions

View File

@@ -151,3 +151,11 @@ void frc::from_json(const wpi::json& json, Trajectory::State& state) {
units::meters_per_second_squared_t{json.at("acceleration").get<double>()};
state.curvature = units::curvature_t{json.at("curvature").get<double>()};
}
bool Trajectory::operator==(const Trajectory& other) const {
return m_states == other.States();
}
bool Trajectory::operator!=(const Trajectory& other) const {
return !operator==(other);
}

View File

@@ -127,6 +127,22 @@ class Trajectory {
*/
Pose2d InitialPose() const { return Sample(0_s).pose; }
/**
* Checks equality between this Trajectory and another object.
*
* @param other The other object.
* @return Whether the two objects are equal.
*/
bool operator==(const Trajectory& other) const;
/**
* Checks inequality between this Trajectory and another object.
*
* @param other The other object.
* @return Whether the two objects are inequal.
*/
bool operator!=(const Trajectory& other) const;
private:
std::vector<State> m_states;
units::second_t m_totalTime = 0_s;

View File

@@ -1,5 +1,5 @@
/*----------------------------------------------------------------------------*/
/* Copyright (c) 2019 FIRST. All Rights Reserved. */
/* Copyright (c) 2019-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. */
@@ -328,4 +328,14 @@ public class Trajectory {
String stateList = m_states.stream().map(State::toString).collect(Collectors.joining(", \n"));
return String.format("Trajectory - Seconds: %.2f, States:\n%s", m_totalTimeSeconds, stateList);
}
@Override
public int hashCode() {
return m_states.hashCode();
}
@Override
public boolean equals(Object obj) {
return obj instanceof Trajectory && m_states.equals(((Trajectory) obj).getStates());
}
}