MotorControlModuleSDFM_TMS3.../Projects/EFC_Application/UMLibrary/schematic/action/ValueChangeAction.hpp

51 lines
1.1 KiB
C++

/*
* 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<typename ValueType>
struct ValueChangeAction : public systemic::IProcess {
typedef systemic::IValue<ValueType> Value;
typedef systemic::IFunctor<void> 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<typename ValueType>
inline void schematic::functor::ValueChangeAction<ValueType>::process() {
ValueType current = value;
if( current == expected and previous != expected )
action();
previous = current;
}
#endif /* UMLIBRARY_SCHEMATIC_ACTION_VALUECHANGEACTION_HPP_ */