...
This commit is contained in:
parent
ad8e81896a
commit
c84756ce07
@ -97,6 +97,8 @@ protected:
|
|||||||
template <typename VT>
|
template <typename VT>
|
||||||
inline static std::unordered_map<const AdcValueHolder*, std::function<void(const VT&)>> _setterFunc{};
|
inline static std::unordered_map<const AdcValueHolder*, std::function<void(const VT&)>> _setterFunc{};
|
||||||
|
|
||||||
|
std::function<void()> _clearFunc;
|
||||||
|
|
||||||
void init(std::invocable<> auto&& getter,
|
void init(std::invocable<> auto&& getter,
|
||||||
std::invocable<const traits::adc_retval_t<decltype(getter)>&> auto&& setter,
|
std::invocable<const traits::adc_retval_t<decltype(getter)>&> auto&& setter,
|
||||||
std::predicate<const traits::adc_retval_t<decltype(getter)>&> auto&& validator)
|
std::predicate<const traits::adc_retval_t<decltype(getter)>&> auto&& validator)
|
||||||
@ -123,6 +125,11 @@ protected:
|
|||||||
throw std::system_error(AdcValueHolderErrorCode::ERROR_VALUE_IS_NOT_VALID);
|
throw std::system_error(AdcValueHolderErrorCode::ERROR_VALUE_IS_NOT_VALID);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
_clearFunc = [this]() {
|
||||||
|
_getterFunc<value_t>.erase(this);
|
||||||
|
_setterFunc<value_t>.erase(this);
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -195,7 +202,7 @@ public:
|
|||||||
AdcValueHolder(const AdcValueHolder&) = default;
|
AdcValueHolder(const AdcValueHolder&) = default;
|
||||||
AdcValueHolder(AdcValueHolder&&) = default;
|
AdcValueHolder(AdcValueHolder&&) = default;
|
||||||
|
|
||||||
virtual ~AdcValueHolder() = default;
|
virtual ~AdcValueHolder() { _clearFunc(); };
|
||||||
|
|
||||||
|
|
||||||
/* PUBLIC METHODS */
|
/* PUBLIC METHODS */
|
||||||
@ -209,6 +216,8 @@ public:
|
|||||||
VT&& validator = AdcValueHolder::AdcValueHolderDummyValidator<VALT>)
|
VT&& validator = AdcValueHolder::AdcValueHolderDummyValidator<VALT>)
|
||||||
requires std::invocable<GT> && std::predicate<VT, const VALT&>
|
requires std::invocable<GT> && std::predicate<VT, const VALT&>
|
||||||
{
|
{
|
||||||
|
_clearFunc();
|
||||||
|
|
||||||
init(std::forward<decltype(getter)>(getter), std::forward<decltype(setter)>(setter),
|
init(std::forward<decltype(getter)>(getter), std::forward<decltype(setter)>(setter),
|
||||||
std::forward<decltype(validator)>(validator));
|
std::forward<decltype(validator)>(validator));
|
||||||
|
|
||||||
@ -286,6 +295,12 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
_clearFunc = [prev_clear = _clearFunc, this]() {
|
||||||
|
_getterFunc<user_t>.erase(this);
|
||||||
|
_setterFunc<user_t>.erase(this);
|
||||||
|
prev_clear();
|
||||||
|
};
|
||||||
|
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user