QStringEncoder/Decoder: add missing noexcept
The interesting part is what cannot be noexcept: - nameForEncoding() and ctor from Encoding: because they don't handle all valid values of type Encoding, so have a narrow contract - encodingForHtml(): because it allocates memory (→ QTBUG-101046) Change-Id: I30cdc19a32537be047e43955e3337e4d6ccc363f Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>bb10
parent
4b8bc8b5bb
commit
330f2132ca
|
|
@ -1699,7 +1699,7 @@ static bool nameMatch(const char *a, const char *b)
|
|||
/*!
|
||||
\internal
|
||||
*/
|
||||
QStringConverter::QStringConverter(const char *name, Flags f)
|
||||
QStringConverter::QStringConverter(const char *name, Flags f) noexcept
|
||||
: iface(nullptr), state(f)
|
||||
{
|
||||
auto e = encodingForName(name);
|
||||
|
|
@ -1745,7 +1745,7 @@ QStringConverter::QStringConverter(const char *name, Flags f)
|
|||
Returns an optional encoding for \a name. The optional is empty if the name could
|
||||
not get converted to a valid encoding.
|
||||
*/
|
||||
std::optional<QStringConverter::Encoding> QStringConverter::encodingForName(const char *name)
|
||||
std::optional<QStringConverter::Encoding> QStringConverter::encodingForName(const char *name) noexcept
|
||||
{
|
||||
for (int i = 0; i < LastEncoding + 1; ++i) {
|
||||
if (nameMatch(encodingInterfaces[i].name, name))
|
||||
|
|
@ -1763,7 +1763,8 @@ std::optional<QStringConverter::Encoding> QStringConverter::encodingForName(cons
|
|||
|
||||
The returned optional is empty, if the encoding is unclear.
|
||||
*/
|
||||
std::optional<QStringConverter::Encoding> QStringConverter::encodingForData(QByteArrayView data, char16_t expectedFirstCharacter)
|
||||
std::optional<QStringConverter::Encoding>
|
||||
QStringConverter::encodingForData(QByteArrayView data, char16_t expectedFirstCharacter) noexcept
|
||||
{
|
||||
// someone set us up the BOM?
|
||||
qsizetype arraySize = data.size();
|
||||
|
|
|
|||
|
|
@ -58,17 +58,17 @@ QT_BEGIN_NAMESPACE
|
|||
class QStringEncoder : public QStringConverter
|
||||
{
|
||||
protected:
|
||||
constexpr explicit QStringEncoder(const Interface *i)
|
||||
constexpr explicit QStringEncoder(const Interface *i) noexcept
|
||||
: QStringConverter(i)
|
||||
{}
|
||||
public:
|
||||
constexpr QStringEncoder()
|
||||
constexpr QStringEncoder() noexcept
|
||||
: QStringConverter()
|
||||
{}
|
||||
constexpr explicit QStringEncoder(Encoding encoding, Flags flags = Flag::Default)
|
||||
: QStringConverter(encoding, flags)
|
||||
{}
|
||||
explicit QStringEncoder(const char *name, Flags flags = Flag::Default)
|
||||
explicit QStringEncoder(const char *name, Flags flags = Flag::Default) noexcept
|
||||
: QStringConverter(name, flags)
|
||||
{}
|
||||
|
||||
|
|
@ -116,17 +116,17 @@ private:
|
|||
class QStringDecoder : public QStringConverter
|
||||
{
|
||||
protected:
|
||||
constexpr explicit QStringDecoder(const Interface *i)
|
||||
constexpr explicit QStringDecoder(const Interface *i) noexcept
|
||||
: QStringConverter(i)
|
||||
{}
|
||||
public:
|
||||
constexpr explicit QStringDecoder(Encoding encoding, Flags flags = Flag::Default)
|
||||
: QStringConverter(encoding, flags)
|
||||
{}
|
||||
constexpr QStringDecoder()
|
||||
constexpr QStringDecoder() noexcept
|
||||
: QStringConverter()
|
||||
{}
|
||||
explicit QStringDecoder(const char *name, Flags f = Flag::Default)
|
||||
explicit QStringDecoder(const char *name, Flags f = Flag::Default) noexcept
|
||||
: QStringConverter(name, f)
|
||||
{}
|
||||
|
||||
|
|
|
|||
|
|
@ -72,7 +72,7 @@ public:
|
|||
Q_DECLARE_FLAGS(Flags, Flag)
|
||||
|
||||
struct State {
|
||||
constexpr State(Flags f = Flag::Default)
|
||||
constexpr State(Flags f = Flag::Default) noexcept
|
||||
: flags(f), state_data{0, 0, 0, 0} {}
|
||||
~State() { clear(); }
|
||||
State(State &&other) noexcept
|
||||
|
|
@ -155,33 +155,35 @@ protected:
|
|||
LengthFn fromUtf16Len = nullptr;
|
||||
};
|
||||
|
||||
constexpr QStringConverter()
|
||||
constexpr QStringConverter() noexcept
|
||||
: iface(nullptr)
|
||||
{}
|
||||
constexpr explicit QStringConverter(Encoding encoding, Flags f)
|
||||
: iface(&encodingInterfaces[int(encoding)]), state(f)
|
||||
{}
|
||||
constexpr explicit QStringConverter(const Interface *i)
|
||||
constexpr explicit QStringConverter(const Interface *i) noexcept
|
||||
: iface(i)
|
||||
{}
|
||||
Q_CORE_EXPORT explicit QStringConverter(const char *name, Flags f);
|
||||
Q_CORE_EXPORT explicit QStringConverter(const char *name, Flags f) noexcept;
|
||||
|
||||
|
||||
public:
|
||||
bool isValid() const { return iface != nullptr; }
|
||||
|
||||
void resetState()
|
||||
bool isValid() const noexcept { return iface != nullptr; }
|
||||
|
||||
void resetState() noexcept
|
||||
{
|
||||
state.clear();
|
||||
}
|
||||
bool hasError() const { return state.invalidChars != 0; }
|
||||
bool hasError() const noexcept { return state.invalidChars != 0; }
|
||||
|
||||
const char *name() const
|
||||
const char *name() const noexcept
|
||||
{ return isValid() ? iface->name : nullptr; }
|
||||
|
||||
Q_CORE_EXPORT static std::optional<Encoding> encodingForName(const char *name);
|
||||
Q_CORE_EXPORT static std::optional<Encoding> encodingForName(const char *name) noexcept;
|
||||
Q_CORE_EXPORT static const char *nameForEncoding(Encoding e);
|
||||
Q_CORE_EXPORT static std::optional<Encoding> encodingForData(QByteArrayView data, char16_t expectedFirstCharacter = 0);
|
||||
Q_CORE_EXPORT static std::optional<Encoding>
|
||||
encodingForData(QByteArrayView data, char16_t expectedFirstCharacter = 0) noexcept;
|
||||
Q_CORE_EXPORT static std::optional<Encoding> encodingForHtml(QByteArrayView data);
|
||||
|
||||
protected:
|
||||
|
|
|
|||
Loading…
Reference in New Issue