/* * ReversCounter.hh * * Created on: 20 мая 2021 г. * Author: sozonov */ #ifndef UMLIBRARY_APPLICATION_SCHEMATIC_REVERSCOUNTER_HH_ #define UMLIBRARY_APPLICATION_SCHEMATIC_REVERSCOUNTER_HH_ #include "../ISetupStep.hh" #include "../../schematic/CallBackReversCounter.hh" namespace application { namespace schematic { //todo: Не используем тавталогию при именовании. //!Реверсивный счётчик. По достижению одной из границ значение счётчика становится равным значению другой границы. Напрявление счёта, значение сброса и верхняя граница задаются через настройки. struct ActionCounter : public ISetupStep { typedef systemic::IFunctor Action; //Входы Action * border_cross = nullptr; //!Сигнал о переходе через верхнюю либо нижнюю границу. bool input( Environment & env ); void build( Environment & env ); struct Links { Environment::Id border_cross; //!<Действие при переходе через границу. Environment::Id count; //!<Выполнение шага счёта. Environment::Id reset; //!<Сброс счётчика. Environment::SignalId value; //!<Текущее значение счётчика. }; //!Начальные значения. struct Setting { unsigned int direction; //!<Направление счета: 0 - положительное, 1 - отрицательное. unsigned int module; //!<Модуль счёта. unsigned int reset_value; //!<Значение по сбросу. }; const Links & links; const Setting & setting; ActionCounter( const Links & links, const Setting & setting ) : links(links), setting(setting) {} }; }} #endif /* UMLIBRARY_APPLICATION_SCHEMATIC_REVERSCOUNTER_HH_ */