#pragma once #include // Singleton-instance class StateMachine { enum class State { INITIALIZING, IDLING, MOVING, ERROR }; public: StateMachine(const StateMachine&) = delete; StateMachine(StateMachine&&) = delete; static StateMachine& getInstance() noexcept; State getState() const noexcept { return state; }; String getLastError() const noexcept { return lastError; }; // May fail if a state transition from state a to b is not valid bool setState(const State newState) noexcept; bool raiseError(const String& reason) noexcept; bool canSwitchToState(const State newState) const noexcept; private: StateMachine() noexcept {}; State state = State::INITIALIZING; String lastError = ""; };