MotorControlModuleSDFM_TMS3.../Projects/EFC_Application/UMLibrary/systemic/IValueAsync.hpp

69 lines
1.4 KiB
C++
Raw Normal View History

/*
* IValueAsync.hpp
*
* Created on: 6 <EFBFBD><EFBFBD><EFBFBD>. 2019 <EFBFBD>.
* Author: titov
*/
#ifndef SOURCE_SYSTEMIC_IVALUEASYNC_HPP_
#define SOURCE_SYSTEMIC_IVALUEASYNC_HPP_
namespace systemic {
//!<21><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
template<typename T>
struct IValueTypeSet {
typedef T TypeInput;
virtual void set( T ) = 0;
// virtual ~IValueTypeSet() = default;
};
template<typename T>
struct IValueTypeGet {
typedef T TypeOutput;
virtual T get() const = 0;
// virtual ~IValueTypeGet() = default;
};
template<typename T>
struct IValueTypeOutput {
typedef T TypeSet;
typedef IValueTypeSet<TypeSet> SetInterface;
virtual void set_output( SetInterface * ) = 0;
// virtual ~IValueTypeOutput() = default;
};
template<typename ValueType>
struct IValueType : public systemic::IValueTypeSet<ValueType>, public systemic::IValueTypeGet<ValueType> {
virtual void set( ValueType ) = 0;
virtual ValueType get() const = 0;
//virtual ~IValueType() = default;
};
template<typename ValueType>
struct IValueTransform {
virtual ValueType operator()( ValueType ) = 0;
};
template<typename ValueType>
struct BaseValue : public IValueType<ValueType> {
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_ */