diff options
author | Dominik Holland <dominik.holland@qt.io> | 2020-03-19 09:15:24 +0100 |
---|---|---|
committer | Dominik Holland <dominik.holland@qt.io> | 2020-03-23 09:24:27 +0100 |
commit | 9a1d79ac5cc2abf4eccacf0a50143e127e444a77 (patch) | |
tree | d46c70e9d74d5521bf8973a5c485a9e8d320d89a | |
parent | c3bb1a319d40a31befe7d24e0da60d479ee7c7da (diff) |
QIviSimulationGlobalObject: Make the domain checking more type safe
Instead of relying on the QVariant < and > operators, we now check
whether the values can be converted to doubles and compare them after
the conversion.
As the domain checking is done from JSON files using doubles should be
giving us enough precision.
Change-Id: Ie516606e68eb03aea103f93bf3243ee10f65c40b
Reviewed-by: Robert Griebl <robert.griebl@qt.io>
-rw-r--r-- | src/ivicore/qivisimulationglobalobject.cpp | 32 |
1 files changed, 24 insertions, 8 deletions
diff --git a/src/ivicore/qivisimulationglobalobject.cpp b/src/ivicore/qivisimulationglobalobject.cpp index 48c47ea..853d7a2 100644 --- a/src/ivicore/qivisimulationglobalobject.cpp +++ b/src/ivicore/qivisimulationglobalobject.cpp @@ -429,17 +429,33 @@ bool QIviSimulationGlobalObject::checkSettings(const QVariantMap &data, const QV } } const QVariant domainDomain = parseDomainValue(data, domainLiteral, zone); + bool valueToDouble = value.canConvert(QVariant::Double); + bool minDomainToDouble = minDomain.canConvert(QVariant::Double); + bool maxDomainToDouble = maxDomain.canConvert(QVariant::Double); - if (unsupportedDomain.isValid()) + if (unsupportedDomain.isValid()) { return !unsupportedDomain.toBool(); - if (minDomain.isValid() && maxDomain.isValid()) - return !(value < minDomain || value > maxDomain); - if (minDomain.isValid()) - return value >= minDomain; - if (maxDomain.isValid()) - return value <= maxDomain; - if (domainDomain.isValid()) + } else if (minDomain.isValid() && maxDomain.isValid()) { + if (!valueToDouble || !minDomainToDouble || !maxDomainToDouble) { + qWarning() << "Can't compare values: " << value << minDomain << maxDomain; + return false; + } + return !(value.toDouble() < minDomain.toDouble() || value.toDouble() > maxDomain.toDouble()); + } else if (minDomain.isValid()) { + if (!valueToDouble || !minDomainToDouble) { + qWarning() << "Can't compare values: " << value << minDomain; + return false; + } + return value.toDouble() >= minDomain.toDouble(); + } else if (maxDomain.isValid()) { + if (!valueToDouble || !maxDomainToDouble) { + qWarning() << "Can't compare values: " << value << maxDomain; + return false; + } + return value.toDouble() <= maxDomain.toDouble(); + } if (domainDomain.isValid()) { return domainDomain.toList().contains(value); + } return true; } |