From eddd9fa8ab27c8da254cbb9dbccf43af994ef50c Mon Sep 17 00:00:00 2001 From: WarmUpTill Date: Wed, 7 Jun 2023 14:16:56 +0200 Subject: [PATCH] Add helper to check if value is a valid number --- src/utils/variable-number.hpp | 1 + src/utils/variable-number.tpp | 44 ++++++++++++++++++++++++++++++----- 2 files changed, 39 insertions(+), 6 deletions(-) diff --git a/src/utils/variable-number.hpp b/src/utils/variable-number.hpp index c0b41884..8c0011e0 100644 --- a/src/utils/variable-number.hpp +++ b/src/utils/variable-number.hpp @@ -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 &var) { _variable = var; } operator T() const; diff --git a/src/utils/variable-number.tpp b/src/utils/variable-number.tpp index ff370ef8..9608546d 100644 --- a/src/utils/variable-number.tpp +++ b/src/utils/variable-number.tpp @@ -46,15 +46,47 @@ void NumberVariable::Load(obs_data_t *obj, const char *name) template T NumberVariable::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::value) { + auto value = var->IntValue(); + return value.value_or(0); + } else if constexpr (std::is_same::value) { auto value = var->DoubleValue(); return value.value_or(0.0); } - return _value; + + assert(false); + return 0; +} + +template bool NumberVariable::HasValidValue() const +{ + if (_type == Type::FIXED_VALUE) { + return true; + } + + auto var = _variable.lock(); + if (!var) { + return false; + } + + if constexpr (std::is_same::value) { + auto value = var->IntValue(); + return value.has_value(); + } else if constexpr (std::is_same::value) { + auto value = var->IntValue(); + return value.has_value(); + } + assert(false); + return false; } template NumberVariable::operator T() const