diff options
author | Lars Knoll <lars.knoll@qt.io> | 2020-04-30 10:25:50 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2020-05-14 07:48:49 +0200 |
commit | a639bcda1e42f48fa32885ede77f9fd320ce731c (patch) | |
tree | d3b0b4dcfff4526df599e94cb59e8c0d9ea07a89 /src/corelib | |
parent | 3ce9162ab5b99594d59b654dcdf2009bc500d3d7 (diff) |
Add methods to convert between encoding and name to QStringConverter
Add static methods that allow converting between a name for an
encoding and the Encoding enum.
Change-Id: I12bc503cf757ea31d3ca8d5e1f1216efddcb16d4
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib')
-rw-r--r-- | src/corelib/text/qstringconverter.cpp | 21 | ||||
-rw-r--r-- | src/corelib/text/qstringconverter.h | 8 |
2 files changed, 24 insertions, 5 deletions
diff --git a/src/corelib/text/qstringconverter.cpp b/src/corelib/text/qstringconverter.cpp index 9322fcd35e..4972bcde4f 100644 --- a/src/corelib/text/qstringconverter.cpp +++ b/src/corelib/text/qstringconverter.cpp @@ -1475,12 +1475,25 @@ static bool nameMatch(const char *a, const char *b) QStringConverter::QStringConverter(const char *name) : iface(nullptr) { + auto e = encodingForName(name); + if (e) + iface = encodingInterfaces + int(e.value()); +} + +std::optional<QStringConverter::Encoding> QStringConverter::encodingForName(const char *name) +{ for (int i = 0; i < LastEncoding + 1; ++i) { - if (nameMatch(encodingInterfaces[i].name, name)) { - iface = encodingInterfaces + i; - break; - } + if (nameMatch(encodingInterfaces[i].name, name)) + return QStringConverter::Encoding(i); } + if (nameMatch(name, "latin1")) + return QStringConverter::Latin1; + return std::nullopt; +} + +const char *QStringConverter::nameForEncoding(QStringConverter::Encoding e) +{ + return encodingInterfaces[int(e)].name; } QT_END_NAMESPACE diff --git a/src/corelib/text/qstringconverter.h b/src/corelib/text/qstringconverter.h index 73f9f4f9ba..fe401ecc9e 100644 --- a/src/corelib/text/qstringconverter.h +++ b/src/corelib/text/qstringconverter.h @@ -45,6 +45,8 @@ #include <QtCore/qstringbuilder.h> #endif +#include <optional> + QT_BEGIN_NAMESPACE // work around a compiler bug in GCC 7 @@ -148,7 +150,8 @@ protected: QSTRINGCONVERTER_CONSTEXPR QStringConverter(const Interface *i) : iface(i) {} - QStringConverter(const char *name); + Q_CORE_EXPORT QStringConverter(const char *name); + public: bool isValid() const { return iface != nullptr; } @@ -162,6 +165,9 @@ public: const char *name() const { return isValid() ? iface->name : nullptr; } + Q_CORE_EXPORT static std::optional<Encoding> encodingForName(const char *name); + Q_CORE_EXPORT static const char *nameForEncoding(Encoding e); + protected: const Interface *iface; State state; |