summaryrefslogtreecommitdiffstats
path: root/src/corelib/serialization
diff options
context:
space:
mode:
authorAhmad Samir <a.samirh78@gmail.com>2023-04-18 13:19:57 +0200
committerMarc Mutz <marc.mutz@qt.io>2023-07-06 03:28:21 +0000
commiteffb3bddf63eb6c53d81ce6b0a30be6e3e80e189 (patch)
treebf9f5d798e60e52a1034ad6f1d80af2633590c0d /src/corelib/serialization
parentb2b58624791cde5c2b24b9397f02ccad5b394ea6 (diff)
QXmlStreamReader: use std::optional
The optional-like FastScanNameResult was used to make some previous changes backport-able to Qt 5.15 (std::optional is C++17 whereas Qt 5.15 requires C++14). Amends commit 6326bec46a618c72feba4a2bb994c4d475050aed. Pick-to: 6.6 6.5 Change-Id: I409e1da83f82927c1eb24c47c1414c0c7ab1bf5b Reviewed-by: Marc Mutz <marc.mutz@qt.io>
Diffstat (limited to 'src/corelib/serialization')
-rw-r--r--src/corelib/serialization/qxmlstream.cpp13
-rw-r--r--src/corelib/serialization/qxmlstream_p.h12
2 files changed, 8 insertions, 17 deletions
diff --git a/src/corelib/serialization/qxmlstream.cpp b/src/corelib/serialization/qxmlstream.cpp
index 946d79367c..802909df00 100644
--- a/src/corelib/serialization/qxmlstream.cpp
+++ b/src/corelib/serialization/qxmlstream.cpp
@@ -1297,8 +1297,7 @@ inline qsizetype QXmlStreamReaderPrivate::fastScanContentCharList()
}
// Fast scan an XML attribute name (e.g. "xml:lang").
-inline QXmlStreamReaderPrivate::FastScanNameResult
-QXmlStreamReaderPrivate::fastScanName(Value *val)
+inline std::optional<qsizetype> QXmlStreamReaderPrivate::fastScanName(Value *val)
{
qsizetype n = 0;
uint c;
@@ -1307,7 +1306,7 @@ QXmlStreamReaderPrivate::fastScanName(Value *val)
// This is too long to be a sensible name, and
// can exhaust memory, or the range of decltype(*prefix)
raiseNamePrefixTooLongError();
- return {};
+ return std::nullopt;
}
switch (c) {
case '\n':
@@ -1341,18 +1340,18 @@ QXmlStreamReaderPrivate::fastScanName(Value *val)
putChar(':');
--n;
}
- return FastScanNameResult(n);
+ return n;
case ':':
if (val) {
if (val->prefix == 0) {
val->prefix = qint16(n + 2);
} else { // only one colon allowed according to the namespace spec.
putChar(c);
- return FastScanNameResult(n);
+ return n;
}
} else {
putChar(c);
- return FastScanNameResult(n);
+ return n;
}
Q_FALLTHROUGH();
default:
@@ -1366,7 +1365,7 @@ QXmlStreamReaderPrivate::fastScanName(Value *val)
qsizetype pos = textBuffer.size() - n;
putString(textBuffer, pos);
textBuffer.resize(pos);
- return FastScanNameResult(0);
+ return 0;
}
enum NameChar { NameBeginning, NameNotBeginning, NotName };
diff --git a/src/corelib/serialization/qxmlstream_p.h b/src/corelib/serialization/qxmlstream_p.h
index ca8bb51ff7..cb3d1975b1 100644
--- a/src/corelib/serialization/qxmlstream_p.h
+++ b/src/corelib/serialization/qxmlstream_p.h
@@ -21,6 +21,7 @@
#include <memory>
+#include <optional>
#ifndef QXMLSTREAM_P_H
#define QXMLSTREAM_P_H
@@ -498,16 +499,7 @@ public:
qsizetype fastScanLiteralContent();
qsizetype fastScanSpace();
qsizetype fastScanContentCharList();
-
- struct FastScanNameResult {
- FastScanNameResult() : ok(false) {}
- explicit FastScanNameResult(qsizetype len) : addToLen(len), ok(true) { }
- operator bool() { return ok; }
- qsizetype operator*() { Q_ASSERT(ok); return addToLen; }
- qsizetype addToLen;
- bool ok;
- };
- FastScanNameResult fastScanName(Value *val = nullptr);
+ std::optional<qsizetype> fastScanName(Value *val = nullptr);
inline qsizetype fastScanNMTOKEN();