From 1b395fa21dfe55bd70a01bf84dfaf903599cf98c Mon Sep 17 00:00:00 2001 From: Starlight220 <53231611+Starlight220@users.noreply.github.com> Date: Thu, 28 May 2020 06:43:32 +0300 Subject: [PATCH] [wpilib] Implement Trajectory.equals() (#2517) --- .../main/native/cpp/trajectory/Trajectory.cpp | 8 ++++++++ .../native/include/frc/trajectory/Trajectory.h | 16 ++++++++++++++++ .../wpi/first/wpilibj/trajectory/Trajectory.java | 12 +++++++++++- 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/wpilibc/src/main/native/cpp/trajectory/Trajectory.cpp b/wpilibc/src/main/native/cpp/trajectory/Trajectory.cpp index 102f035822..d1f45eb9b8 100644 --- a/wpilibc/src/main/native/cpp/trajectory/Trajectory.cpp +++ b/wpilibc/src/main/native/cpp/trajectory/Trajectory.cpp @@ -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()}; state.curvature = units::curvature_t{json.at("curvature").get()}; } + +bool Trajectory::operator==(const Trajectory& other) const { + return m_states == other.States(); +} + +bool Trajectory::operator!=(const Trajectory& other) const { + return !operator==(other); +} diff --git a/wpilibc/src/main/native/include/frc/trajectory/Trajectory.h b/wpilibc/src/main/native/include/frc/trajectory/Trajectory.h index 6ecba9bb38..24e13d7f1d 100644 --- a/wpilibc/src/main/native/include/frc/trajectory/Trajectory.h +++ b/wpilibc/src/main/native/include/frc/trajectory/Trajectory.h @@ -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 m_states; units::second_t m_totalTime = 0_s; diff --git a/wpilibj/src/main/java/edu/wpi/first/wpilibj/trajectory/Trajectory.java b/wpilibj/src/main/java/edu/wpi/first/wpilibj/trajectory/Trajectory.java index f1d51b9a70..a47009032e 100644 --- a/wpilibj/src/main/java/edu/wpi/first/wpilibj/trajectory/Trajectory.java +++ b/wpilibj/src/main/java/edu/wpi/first/wpilibj/trajectory/Trajectory.java @@ -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()); + } }