summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorIvan Solovev <ivan.solovev@qt.io>2023-01-13 19:41:44 +0100
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2023-01-19 16:45:22 +0000
commit0fbef8c9c81ab21e8e399c3815e3c51bcf4e9527 (patch)
tree8e33886b35a438a802769bb6cd1e67b8662dbf3a /src
parent98a263fb10d679bfa1d5baa4dc91383ccbd3f3a4 (diff)
Introduce struct QCanSignalDescription::MultiplexValueRange
... and use it instead of QPair<QVarian, QVariant> to define a range of values for a multiplexor signal. Change-Id: Ibc04d9618ec46fa0af2f94d9808a82af35fb7dd7 Reviewed-by: Marc Mutz <marc.mutz@qt.io> (cherry picked from commit 53631e08169f285e81cc6c991d05cc511a7d9ed1) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
Diffstat (limited to 'src')
-rw-r--r--src/serialbus/qcandbcfileparser.cpp4
-rw-r--r--src/serialbus/qcansignaldescription.cpp40
-rw-r--r--src/serialbus/qcansignaldescription.h26
3 files changed, 64 insertions, 6 deletions
diff --git a/src/serialbus/qcandbcfileparser.cpp b/src/serialbus/qcandbcfileparser.cpp
index e327d7f..422efb0 100644
--- a/src/serialbus/qcandbcfileparser.cpp
+++ b/src/serialbus/qcandbcfileparser.cpp
@@ -843,7 +843,7 @@ void QCanDbcFileParserPrivate::parseExtendedMux(const QStringView data)
if (sepIdx != -1) {
const auto min = rangeView.first(sepIdx).trimmed().toUInt();
const auto max = rangeView.sliced(sepIdx + 1).trimmed().toUInt();
- rangeValues.emplaceBack(qMakePair(min, max));
+ rangeValues.push_back({min, max});
}
// We can have an arbitrary amount of ranges, so we can't use capture groups
@@ -861,7 +861,7 @@ void QCanDbcFileParserPrivate::parseExtendedMux(const QStringView data)
if (sepIdx != -1) {
const auto min = range.first(sepIdx).trimmed().toUInt();
const auto max = range.sliced(sepIdx + 1).trimmed().toUInt();
- rangeValues.emplaceBack(qMakePair(min, max));
+ rangeValues.push_back({min, max});
}
}
}
diff --git a/src/serialbus/qcansignaldescription.cpp b/src/serialbus/qcansignaldescription.cpp
index 7a016ad..113e736 100644
--- a/src/serialbus/qcansignaldescription.cpp
+++ b/src/serialbus/qcansignaldescription.cpp
@@ -162,6 +162,32 @@ QT_BEGIN_NAMESPACE
*/
/*!
+ \struct QCanSignalDescription::MultiplexValueRange
+ \inmodule QtSerialBus
+ \since 6.5
+
+ \brief Defines a range of values for a multiplexor signal.
+
+ Each multiplexor signal can have several ranges of values assigned to it.
+ This type represents one range. Both minimum and maximum values are
+ included in the range. Minimum and maximum values can be equal, so a
+ MultiplexValueRange is never empty. If maximum is less than minimum, the
+ values will be swapped while doing the range check.
+
+ \sa {Multiplexed Signals Explained}
+*/
+
+/*!
+ \variable QCanSignalDescription::MultiplexValueRange::minimum
+ \brief the minimum value of the range.
+*/
+
+/*!
+ \variable QCanSignalDescription::MultiplexValueRange::maximum
+ \brief the maximum value of the range.
+*/
+
+/*!
\typealias QCanSignalDescription::MultiplexValues
*/
@@ -747,7 +773,7 @@ void QCanSignalDescription::addMultiplexSignal(const QString &name, const Multip
void QCanSignalDescription::addMultiplexSignal(const QString &name, const QVariant &value)
{
d.detach();
- d->muxSignals.insert(name, { qMakePair(value, value) });
+ d->muxSignals.insert(name, { {value, value} });
}
// copied from qtbase/src/testlib/qtestcase.cpp
@@ -820,6 +846,14 @@ QDebug QCanSignalDescription::debugStreaming(QDebug dbg, const QCanSignalDescrip
dbg << ")";
return dbg;
}
+
+QDebug QCanSignalDescription::MultiplexValueRange::debugStreaming(QDebug dbg,
+ const MultiplexValueRange &range)
+{
+ QDebugStateSaver saver(dbg);
+ dbg.nospace() << "MultiplexValueRange(" << range.minimum << ", " << range.maximum << ")";
+ return dbg;
+}
#endif // QT_NO_DEBUG_STREAM
template <typename T>
@@ -828,8 +862,8 @@ static bool checkValue(const QVariant &valueVar,
{
const T val = valueVar.value<T>();
for (const auto &pair : ranges) {
- T min = pair.first.value<T>();
- T max = pair.second.value<T>();
+ T min = pair.minimum.value<T>();
+ T max = pair.maximum.value<T>();
if (min > max)
max = std::exchange(min, max);
if (val >= min && val <= max)
diff --git a/src/serialbus/qcansignaldescription.h b/src/serialbus/qcansignaldescription.h
index aa54419..cbd2d9c 100644
--- a/src/serialbus/qcansignaldescription.h
+++ b/src/serialbus/qcansignaldescription.h
@@ -6,6 +6,7 @@
#include <QtCore/QDebug>
#include <QtCore/QExplicitlySharedDataPointer>
+#include <QtCore/QVariant>
#include <QtSerialBus/qcancommondefinitions.h>
#include <QtSerialBus/qtserialbusglobal.h>
@@ -18,7 +19,30 @@ QT_DECLARE_QESDP_SPECIALIZATION_DTOR_WITH_EXPORT(QCanSignalDescriptionPrivate, Q
class Q_SERIALBUS_EXPORT QCanSignalDescription
{
public:
- using MultiplexValues = QList<QPair<QVariant, QVariant>>;
+ struct MultiplexValueRange {
+ QVariant minimum;
+ QVariant maximum;
+ private:
+ friend bool operator==(const MultiplexValueRange &lhs,
+ const MultiplexValueRange &rhs) noexcept
+ {
+ return lhs.minimum == rhs.minimum && lhs.maximum == rhs.maximum;
+ }
+ friend bool operator!=(const MultiplexValueRange &lhs,
+ const MultiplexValueRange &rhs) noexcept
+ {
+ return !(lhs == rhs);
+ }
+ friend size_t qHash(const MultiplexValueRange &, size_t) noexcept = delete;
+#ifndef QT_NO_DEBUG_STREAM
+ friend QDebug operator<<(QDebug dbg, const MultiplexValueRange &range)
+ {
+ return debugStreaming(dbg, range);
+ }
+ static QDebug debugStreaming(QDebug dbg, const MultiplexValueRange &range);
+#endif // QT_NO_DEBUG_STREAM
+ };
+ using MultiplexValues = QList<MultiplexValueRange>;
using MultiplexSignalValues = QHash<QString, MultiplexValues>;