QCborMap: merge the constFind methods into a template
Change-Id: I5e52dc5b093c43a3b678fffd16b6e558c4e1f089 Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
This commit is contained in:
parent
3531f578d3
commit
11ea172178
@ -932,12 +932,7 @@ QCborMap::iterator QCborMap::find(const QCborValue &key)
|
|||||||
*/
|
*/
|
||||||
QCborMap::const_iterator QCborMap::constFind(qint64 key) const
|
QCborMap::const_iterator QCborMap::constFind(qint64 key) const
|
||||||
{
|
{
|
||||||
for (qsizetype i = 0; i < 2 * size(); i += 2) {
|
return d ? d->findCborMapKey(key) : constEnd();
|
||||||
const auto &e = d->elements.at(i);
|
|
||||||
if (e.type == QCborValue::Integer && e.value == key)
|
|
||||||
return { d.data(), i + 1 };
|
|
||||||
}
|
|
||||||
return constEnd();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@ -958,11 +953,7 @@ QCborMap::const_iterator QCborMap::constFind(qint64 key) const
|
|||||||
*/
|
*/
|
||||||
QCborMap::const_iterator QCborMap::constFind(QLatin1String key) const
|
QCborMap::const_iterator QCborMap::constFind(QLatin1String key) const
|
||||||
{
|
{
|
||||||
for (qsizetype i = 0; i < 2 * size(); i += 2) {
|
return d ? d->findCborMapKey(key) : constEnd();
|
||||||
if (d->stringEqualsElement(i, key))
|
|
||||||
return { d.data(), i + 1 };
|
|
||||||
}
|
|
||||||
return constEnd();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@ -981,13 +972,9 @@ QCborMap::const_iterator QCborMap::constFind(QLatin1String key) const
|
|||||||
remove(const QString &), contains(const QString &)
|
remove(const QString &), contains(const QString &)
|
||||||
value(qint64), value(QLatin1String), value(const QCborValue &)
|
value(qint64), value(QLatin1String), value(const QCborValue &)
|
||||||
*/
|
*/
|
||||||
QCborMap::const_iterator QCborMap::constFind(const QString & key) const
|
QCborMap::const_iterator QCborMap::constFind(const QString &key) const
|
||||||
{
|
{
|
||||||
for (qsizetype i = 0; i < 2 * size(); i += 2) {
|
return d ? d->findCborMapKey(qToStringViewIgnoringNull(key)) : constEnd();
|
||||||
if (d->stringEqualsElement(i, key))
|
|
||||||
return { d.data(), i + 1 };
|
|
||||||
}
|
|
||||||
return constEnd();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@ -1008,12 +995,7 @@ QCborMap::const_iterator QCborMap::constFind(const QString & key) const
|
|||||||
*/
|
*/
|
||||||
QCborMap::const_iterator QCborMap::constFind(const QCborValue &key) const
|
QCborMap::const_iterator QCborMap::constFind(const QCborValue &key) const
|
||||||
{
|
{
|
||||||
for (qsizetype i = 0; i < 2 * size(); i += 2) {
|
return d ? d->findCborMapKey<const QCborValue &>(key) : constEnd();
|
||||||
int cmp = d->compareElement(i, key);
|
|
||||||
if (cmp == 0)
|
|
||||||
return { d.data(), i + 1 };
|
|
||||||
}
|
|
||||||
return constEnd();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
@ -419,6 +419,27 @@ public:
|
|||||||
elements.remove(idx);
|
elements.remove(idx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// doesn't apply to JSON
|
||||||
|
template <typename KeyType> QCborValueRef findCborMapKey(KeyType key)
|
||||||
|
{
|
||||||
|
qsizetype i = 0;
|
||||||
|
for ( ; i < elements.size(); i += 2) {
|
||||||
|
const auto &e = elements.at(i);
|
||||||
|
bool equals;
|
||||||
|
if constexpr (std::is_same_v<std::decay_t<KeyType>, QCborValue>) {
|
||||||
|
equals = (compareElement(i, key) == 0);
|
||||||
|
} else if constexpr (std::is_integral_v<KeyType>) {
|
||||||
|
equals = (e.type == QCborValue::Integer && e.value == key);
|
||||||
|
} else {
|
||||||
|
// assume it's a string
|
||||||
|
equals = stringEqualsElement(i, key);
|
||||||
|
}
|
||||||
|
if (equals)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return QCborValueRef{ this, i + 1 };
|
||||||
|
}
|
||||||
|
|
||||||
#if QT_CONFIG(cborstreamreader)
|
#if QT_CONFIG(cborstreamreader)
|
||||||
void decodeValueFromCbor(QCborStreamReader &reader, int remainingStackDepth);
|
void decodeValueFromCbor(QCborStreamReader &reader, int remainingStackDepth);
|
||||||
void decodeStringFromCbor(QCborStreamReader &reader);
|
void decodeStringFromCbor(QCborStreamReader &reader);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user