mountcontrol/cxx/mcc_fsm.h
Timur A. Fatkhullin 47b2dbe7a1 ...
2025-05-29 00:06:37 +03:00

36 lines
872 B
C++

#pragma once
/* MOUNT CONTROL COMPONENTS LIBRARY */
/* FINITE-STATE MACHINE IMPLEMENTATION */
#include <string_view>
#include "mcc_fsm_utils.h"
namespace mcc::fsm
{
namespace traits
{
template <typename T>
concept fsm_event_c =
std::is_default_constructible_v<T> && std::is_move_constructible_v<T> && std::movable<T> && requires {
{ T::ID } -> std::same_as<const std::string_view>; // static constant member of event identificator
};
template <typename T>
concept fsm_state_c =
std::is_default_constructible_v<T> && std::is_move_constructible_v<T> && std::movable<T> && requires {
[]<mcc::traits::pair_holder_c PHT>(std::type_identity<PHT>) {}(T::transition_t);
{ T::ID } -> std::same_as<const std::string_view>; // static constant member of state identificator
};
} // namespace traits
} // namespace mcc::fsm