Program Listing for File HsmTypes.hpp

Return to documentation for file (include/hsmcpp/HsmTypes.hpp)

// Copyright (C) 2023 Igor Krechetov
// Distributed under MIT license. See file LICENSE for details
#ifndef HSMCPP_HSMTYPES_HPP
#define HSMCPP_HSMTYPES_HPP

#include <functional>

#include "variant.hpp"

namespace hsmcpp {

using HandlerID_t = int32_t;
using TimerID_t = int32_t;
using EventID_t = int32_t;
using StateID_t = int32_t;

constexpr int HSM_WAIT_INDEFINITELY = 0;

constexpr int INVALID_ID = -1000;
constexpr hsmcpp::EventID_t INVALID_HSM_EVENT_ID = static_cast<hsmcpp::EventID_t>(INVALID_ID);
constexpr hsmcpp::StateID_t INVALID_HSM_STATE_ID = static_cast<hsmcpp::StateID_t>(INVALID_ID);
constexpr hsmcpp::TimerID_t INVALID_HSM_TIMER_ID = static_cast<hsmcpp::TimerID_t>(INVALID_ID);

constexpr hsmcpp::HandlerID_t INVALID_HSM_DISPATCHER_HANDLER_ID = 0;

using HsmTransitionCallback_t = std::function<void(const VariantVector_t&)>;
using HsmTransitionConditionCallback_t = std::function<bool(const VariantVector_t&)>;
using HsmStateChangedCallback_t = std::function<void(const VariantVector_t&)>;
using HsmStateEnterCallback_t = std::function<bool(const VariantVector_t&)>;
using HsmStateExitCallback_t = std::function<bool(void)>;
using HsmTransitionFailedCallback_t = std::function<void(const std::list<StateID_t>&, const EventID_t, const VariantVector_t&)>;

// cppcheck-suppress misra-c2012-20.7 ; enclosing input expressions in parentheses is not needed (and will not compile)
#define HsmTransitionCallbackPtr_t(_class, _func) void (_class::*_func)(const VariantVector_t&)
// cppcheck-suppress misra-c2012-20.7
#define HsmTransitionConditionCallbackPtr_t(_class, _func) bool (_class::*_func)(const VariantVector_t&)
// cppcheck-suppress misra-c2012-20.7
#define HsmStateChangedCallbackPtr_t(_class, _func) void (_class::*_func)(const VariantVector_t&)
// cppcheck-suppress misra-c2012-20.7
#define HsmStateEnterCallbackPtr_t(_class, _func) bool (_class::*_func)(const VariantVector_t&)
// cppcheck-suppress misra-c2012-20.7
#define HsmStateExitCallbackPtr_t(_class, _func) bool (_class::*_func)()
// cppcheck-suppress misra-c2012-20.7
#define HsmTransitionFailedCallbackPtr_t(_class, _func) void (_class::*_func)(const std::list<StateID_t>&, const EventID_t, const VariantVector_t&)

enum class HistoryType {
    SHALLOW,
    DEEP
};

enum class TransitionType {
    INTERNAL_TRANSITION,
    EXTERNAL_TRANSITION
};

enum class StateActionTrigger {
    ON_STATE_ENTRY,
    ON_STATE_EXIT
};

enum class StateAction {
    START_TIMER,
    STOP_TIMER,
    RESTART_TIMER,
    TRANSITION,
};

}  // namespace hsmcpp

#endif  // HSMCPP_HSMTYPES_HPP