MotorControlModuleSDFM_TMS3.../Projects/EFC_Communication/UMLibrary/schematic/SignalMath.hpp
2024-06-07 11:12:56 +03:00

77 lines
2.1 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* SignalMath.hpp
*
* Created on: 9 июн. 2020 г.
* Author: LeonidTitov
*/
#ifndef UMLIBRARY_SCHEMATIC_SIGNALMATH_HPP_
#define UMLIBRARY_SCHEMATIC_SIGNALMATH_HPP_
#include "../systemic/ISignal.hh"
#include <cmath>
#include <functional>
namespace systemic { namespace detail {
//!Абсолютное значение сигнала. Реализует функцию float = |value|.
class SignalAbs : public systemic::ISignal {
public:
SignalAbs( systemic::ISignal & value ) : value(value) {}
operator float() const {
return fabsf( value );
}
private:
systemic::ISignal & value;
};
template<typename Equation>
class SignalEquation2 : public systemic::ISignal {
public:
SignalEquation2( systemic::ISignal & a, systemic::ISignal & b, Equation eq = Equation() ) : a(a), b(b), equation(eq) {}
operator float() const {
return equation( a, b );
}
private:
Equation equation;
systemic::ISignal & a;
systemic::ISignal & b;
};
//!Разница двух сигналов. Реализует функцию float = a - b.
typedef SignalEquation2< std::minus<float> > SignalSubtraction;
typedef SignalEquation2< std::plus<float> > SignalAddition;
typedef SignalEquation2< std::multiplies<float> > SignalMultiplication;
typedef SignalEquation2< std::divides<float> > SignalDivision;
typedef SignalEquation2< std::modulus<float> > SignalModulation;
typedef SignalEquation2< std::pointer_to_binary_function<float, float, float> >
SignalBinaryFunction;
template<typename Equation>
class SignalEquation1 : public systemic::ISignal {
public:
SignalEquation1( systemic::ISignal & a, Equation eq = Equation() ) : a(a), equation(eq) {}
operator float() const {
return equation( a );
}
private:
Equation equation;
systemic::ISignal & a;
};
typedef SignalEquation1< std::negate<float> > SignalNegation;
typedef SignalEquation1< std::pointer_to_unary_function<float, float> > SignalUnaryFunction;
}}
#endif /* UMLIBRARY_SCHEMATIC_SIGNALMATH_HPP_ */