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

64 lines
1.3 KiB
C++

/*
* ValueSetAction.hpp
*
* Created on: 6 èþë. 2020 ã.
* Author: LeonidTitov
*/
#ifndef UMLIBRARY_SCHEMATIC_ACTION_VALUESETACTION_HPP_
#define UMLIBRARY_SCHEMATIC_ACTION_VALUESETACTION_HPP_
#include "../../systemic/IFunctor.hh"
#include "../../systemic/IValueAsync.hpp"
namespace schematic { namespace functor {
template<typename ValueType>
class ValueSetAction : public systemic::IValueType<ValueType> {
typedef systemic::IValueType<ValueType> Value;
typedef systemic::IFunctor<void> Action;
Value & value;
Action & action;
public:
enum ActionSequence {
Before,
After
};
const ActionSequence sequence;
void set( ValueType );
ValueType get() const;
ValueSetAction( Value & value, Action & action, ActionSequence sequence ) : value(value), action(action), sequence(sequence) {}
};
}}
template<typename ValueType>
inline void schematic::functor::ValueSetAction<ValueType>::set( ValueType new_value ) {
if( sequence == Before )
action();
value.set(new_value);
if( sequence == After )
action();
}
template<typename ValueType>
inline ValueType schematic::functor::ValueSetAction<ValueType>::get() const {
return value.get();
}
#endif /* UMLIBRARY_SCHEMATIC_ACTION_VALUESETACTION_HPP_ */