// Copyright (c) FIRST and other WPILib contributors. // Open Source Software; you can modify and/or share it under the terms of // the WPILib BSD license file in the root directory of this project. #pragma once #include #include #include namespace frc::sim { template class BaseCallbackHelper { public: bool WasTriggered() const { return m_wasTriggered; } ValueType GetLastValue() const { return m_lastValue; } void Reset() { m_wasTriggered = false; m_lastValue = 0; } virtual void HandleCallback(std::string_view name, const HAL_Value* value) = 0; std::function GetCallback() { return [&](std::string_view name, const HAL_Value* value) { HandleCallback(name, value); }; } protected: bool m_wasTriggered{false}; ValueType m_lastValue{0}; }; class BooleanCallback : public BaseCallbackHelper { public: void HandleCallback(std::string_view name, const HAL_Value* value) override; }; class EnumCallback : public BaseCallbackHelper { public: void HandleCallback(std::string_view name, const HAL_Value* value) override; }; class IntCallback : public BaseCallbackHelper { public: void HandleCallback(std::string_view name, const HAL_Value* value) override; }; class LongCallback : public BaseCallbackHelper { public: void HandleCallback(std::string_view name, const HAL_Value* value) override; }; class DoubleCallback : public BaseCallbackHelper { public: void HandleCallback(std::string_view name, const HAL_Value* value) override; }; } // namespace frc::sim