Add helper to check if value is a valid number

This commit is contained in:
WarmUpTill 2023-06-07 14:16:56 +02:00 committed by WarmUpTill
parent 6cc224aeec
commit eddd9fa8ab
2 changed files with 39 additions and 6 deletions

View File

@ -15,6 +15,7 @@ public:
T GetValue() const;
T GetFixedValue() const { return _value; }
bool HasValidValue() const;
void SetValue(T val) { _value = val; }
void SetValue(const std::weak_ptr<Variable> &var) { _variable = var; }
operator T() const;

View File

@ -46,15 +46,47 @@ void NumberVariable<T>::Load(obs_data_t *obj, const char *name)
template<typename T> T NumberVariable<T>::GetValue() const
{
if (_type == Type::VARIABLE) {
auto var = _variable.lock();
if (!var) {
return {};
}
if (_type == Type::FIXED_VALUE) {
return _value;
}
auto var = _variable.lock();
if (!var) {
return {};
}
if constexpr (std::is_same<T, int>::value) {
auto value = var->IntValue();
return value.value_or(0);
} else if constexpr (std::is_same<T, double>::value) {
auto value = var->DoubleValue();
return value.value_or(0.0);
}
return _value;
assert(false);
return 0;
}
template<typename T> bool NumberVariable<T>::HasValidValue() const
{
if (_type == Type::FIXED_VALUE) {
return true;
}
auto var = _variable.lock();
if (!var) {
return false;
}
if constexpr (std::is_same<T, int>::value) {
auto value = var->IntValue();
return value.has_value();
} else if constexpr (std::is_same<T, double>::value) {
auto value = var->IntValue();
return value.has_value();
}
assert(false);
return false;
}
template<typename T> NumberVariable<T>::operator T() const