/* * SignalMathSetup.hh * * Created on: 14 мая 2020 г. * Author: LeonidTitov */ #ifndef UMLIBRARY_APPLICATION_SCHEMATIC_SIGNALMATHSETUP_HH_ #define UMLIBRARY_APPLICATION_SCHEMATIC_SIGNALMATHSETUP_HH_ #include "../ISetupStep.hh" #include "../../schematic/SignalMath.hpp" namespace application { namespace schematic { //!Абсолютное значение сигнала. Реализует функцию abs = |a|. struct SignalAbs : public ISetupStep { systemic::ISignal * value_a = nullptr; bool input( Environment & env ); void build( Environment & env ); struct Links { Environment::SignalId a; Environment::SignalId abs; //!<Константный сигнал. }; const Links & links; SignalAbs( const Links & links ) : links(links) {} }; //!Разница двух сигналов. Реализует функцию subtraction = a - b. struct SignalSubtraction : public ISetupStep { systemic::ISignal * value_a = nullptr; systemic::ISignal * value_b = nullptr; bool input( Environment & env ); void build( Environment & env ); struct Links { Environment::SignalId a; //!<Сигнал "a". Environment::SignalId b; //!<Сигнал "b". Environment::SignalId subtraction; //!<Разница двух сигналов. }; const Links & links; SignalSubtraction( const Links & links ) : links(links) {} }; //!Сумма двух сигналов. Реализует функцию addition = a + b. struct SignalAddition : public ISetupStep { systemic::ISignal * value_a = nullptr; systemic::ISignal * value_b = nullptr; bool input( Environment & env ); void build( Environment & env ); struct Links { Environment::SignalId a; //!<Сигнал "a". Environment::SignalId b; //!<Сигнал "b". Environment::SignalId addition; //!<Сумма двух сигналов. }; const Links & links; SignalAddition( const Links & links ) : links(links) {} }; //!Произведение двух сигналов. Реализует функцию multiplication = a * b. struct SignalMultiplication : public ISetupStep { systemic::ISignal * value_a = nullptr; systemic::ISignal * value_b = nullptr; bool input( Environment & env ); void build( Environment & env ); struct Links { Environment::SignalId a; //!<Сигнал "a". Environment::SignalId b; //!<Сигнал "b". Environment::SignalId multiplication; //!<Произведение двух сигналов. }; const Links & links; SignalMultiplication( const Links & links ) : links(links) {} }; //!Деление двух сигналов. Реализует функцию division = a / b. struct SignalDivision : public ISetupStep { systemic::ISignal * value_a = nullptr; systemic::ISignal * value_b = nullptr; bool input( Environment & env ); void build( Environment & env ); struct Links { Environment::SignalId a; //!<Сигнал "a". Environment::SignalId b; //!<Сигнал "b". Environment::SignalId division; //!<Деление двух сигналов. }; const Links & links; SignalDivision( const Links & links ) : links(links) {} }; //!Квадратный корень сигнала. Реализует функцию sqrt = sqrt(a). struct SignalSquareRoot : public ISetupStep { systemic::ISignal * value_a = nullptr; bool input( Environment & env ); void build( Environment & env ); struct Links { Environment::SignalId a; //!<Сигнал "a". Environment::SignalId sqrt; //!<Квадратный корень сигнала "а". }; const Links & links; SignalSquareRoot( const Links & links ) : links(links) {} }; ////!Квадрат сигнала. Реализует функцию sqr = a^2. //struct SignalSquare : public ISetupStep { // // systemic::ISignal * value_a = nullptr; // // bool input( Environment & env ); // void build( Environment & env ); // // struct Links { // Environment::SignalId a; //!<Сигнал "a". // Environment::SignalId sqr; //!<Квадрат сигнала "а". // }; // // const Links & links; // // SignalSquare( const Links & links ) : links(links) {} // //}; //!Возведение сигнала в степень. Реализует функцию power = pow(a, b). struct SignalPower : public ISetupStep { systemic::ISignal * value_a = nullptr; systemic::ISignal * value_b = nullptr; bool input( Environment & env ); void build( Environment & env ); struct Links { Environment::SignalId a; //!<Сигнал "a". Environment::SignalId b; //!<Сигнал "b". Environment::SignalId power; //!<Степень "b" сигнала "а". }; const Links & links; SignalPower( const Links & links ) : links(links) {} }; } } #endif /* UMLIBRARY_APPLICATION_SCHEMATIC_SIGNALMATH_HH_ */