summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDominik Holland <dominik.holland@qt.io>2020-03-19 09:15:24 +0100
committerDominik Holland <dominik.holland@qt.io>2020-03-23 09:24:27 +0100
commit9a1d79ac5cc2abf4eccacf0a50143e127e444a77 (patch)
treed46c70e9d74d5521bf8973a5c485a9e8d320d89a /src
parentc3bb1a319d40a31befe7d24e0da60d479ee7c7da (diff)
downloadqtivi-9a1d79ac5cc2abf4eccacf0a50143e127e444a77.tar.gz
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>
Diffstat (limited to 'src')
-rw-r--r--src/ivicore/qivisimulationglobalobject.cpp32
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;
}