/* * ValueChangeAction.hpp * * Created on: 10 θών. 2020 γ. * Author: LeonidTitov */ #ifndef UMLIBRARY_SCHEMATIC_ACTION_VALUECHANGEACTION_HPP_ #define UMLIBRARY_SCHEMATIC_ACTION_VALUECHANGEACTION_HPP_ #include "../../systemic/IFunctor.hh" #include "../../systemic/IValue.hpp" #include "../../systemic/IProcess.hh" namespace schematic { namespace functor { template struct ValueChangeAction : public systemic::IProcess { typedef systemic::IValue Value; typedef systemic::IFunctor Action; Value & value; Action & action; const ValueType expected; ValueType previous; void process(); ValueChangeAction( Value & value, Action & action, ValueType expected ) : value(value), action(action), expected(expected), previous(expected) {} }; } } template inline void schematic::functor::ValueChangeAction::process() { ValueType current = value; if( current == expected and previous != expected ) action(); previous = current; } #endif /* UMLIBRARY_SCHEMATIC_ACTION_VALUECHANGEACTION_HPP_ */