/* * ValueMath.hpp * * Created on: 25 окт. 2021 г. * Author: titov */ #ifndef UMLIBRARY_SCHEMATIC_VALUEMATH_HPP_ #define UMLIBRARY_SCHEMATIC_VALUEMATH_HPP_ #include "../systemic/IValueAsync.hpp" #include #include namespace schematic { class EquationBase2 { public: typedef float ValueType; typedef systemic::IValueType ValueInterface; struct Setting { ValueType left; //!<Левая часть выражения. ValueType right; //!<Правая часть выражения. bool isValid(); }; bool configure( Setting & config ); ValueInterface & left(); //!<Левая часть выражения. ValueInterface & right(); //!<Правая часть выражения. protected: virtual void update() = 0; struct EquationPart: public ValueInterface { float value; EquationBase2 & equation; void set( ValueType new_value ); ValueType get() const; EquationPart( EquationBase2 & equation ); } a, b; EquationBase2(); }; template class Equation : public EquationBase2 { public: Equation( ValueInterface & result, Functor functor = Functor() ) : result(result), functor(functor) {} private: ValueInterface & result; Functor functor; void update() { result.set( functor( a.value, b.value ) ); } }; typedef Equation< std::minus > EquationSubtraction; typedef Equation< std::plus > EquationAddition; typedef Equation< std::multiplies > EquationMultiplication; typedef Equation< std::divides > EquationDivision; typedef Equation< std::pointer_to_binary_function > EquationCustom; } #endif /* UMLIBRARY_SCHEMATIC_VALUEMATH_HPP_ */