/* * 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 class ValueSetAction : public systemic::IValueType { typedef systemic::IValueType Value; typedef systemic::IFunctor 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 inline void schematic::functor::ValueSetAction::set( ValueType new_value ) { if( sequence == Before ) action(); value.set(new_value); if( sequence == After ) action(); } template inline ValueType schematic::functor::ValueSetAction::get() const { return value.get(); } #endif /* UMLIBRARY_SCHEMATIC_ACTION_VALUESETACTION_HPP_ */