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