/* * IValueAsync.hpp * * Created on: 6 дек. 2019 г. * Author: titov */ #ifndef SOURCE_SYSTEMIC_IVALUEASYNC_HPP_ #define SOURCE_SYSTEMIC_IVALUEASYNC_HPP_ namespace systemic { //!Интерфейс установки значения. template struct IValueTypeSet { typedef T TypeInput; virtual void set( T ) = 0; // virtual ~IValueTypeSet() = default; }; template struct IValueTypeGet { typedef T TypeOutput; virtual T get() const = 0; // virtual ~IValueTypeGet() = default; }; template struct IValueTypeOutput { typedef T TypeSet; typedef IValueTypeSet SetInterface; virtual void set_output( SetInterface * ) = 0; // virtual ~IValueTypeOutput() = default; }; template struct IValueType : public systemic::IValueTypeSet, public systemic::IValueTypeGet { virtual void set( ValueType ) = 0; virtual ValueType get() const = 0; //virtual ~IValueType() = default; }; template struct IValueTransform { virtual ValueType operator()( ValueType ) = 0; }; template struct BaseValue : public IValueType { void set( ValueType new_value ) { value = new_value; } ValueType get() const { return value; } ValueType & value; BaseValue( ValueType & value ) : value(value) {} }; } #endif /* SOURCE_SYSTEMIC_IVALUEASYNC_HPP_ */