aboutsummaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorJaromir Wysoglad2019-09-05 02:51:10 +0200
committerThierry Crozat2019-09-05 23:52:46 +0100
commit8f930126e7de6db9c22ff9f02d52564c4c99a9a8 (patch)
treebf72e404b6e282a93339d4c8074ff634b484488e /common
parenta9be9c1453c5106fca7598bd0d7ca1e685a59539 (diff)
downloadscummvm-rg350-8f930126e7de6db9c22ff9f02d52564c4c99a9a8.tar.gz
scummvm-rg350-8f930126e7de6db9c22ff9f02d52564c4c99a9a8.tar.bz2
scummvm-rg350-8f930126e7de6db9c22ff9f02d52564c4c99a9a8.zip
COMMON: Add string size computation to Encoding.
Diffstat (limited to 'common')
-rw-r--r--common/encoding.cpp16
-rw-r--r--common/encoding.h12
2 files changed, 28 insertions, 0 deletions
diff --git a/common/encoding.cpp b/common/encoding.cpp
index fc743e5119..3c70f19334 100644
--- a/common/encoding.cpp
+++ b/common/encoding.cpp
@@ -499,4 +499,20 @@ uint32 *Encoding::transliterateUTF32(const uint32 *string, size_t length) {
return result;
}
+size_t Encoding::stringLength(const char *string, const String &encoding) {
+ if (encoding.hasPrefixIgnoreCase("UTF-16")) {
+ const uint16 *i = (const uint16 *) string;
+ for (;*i != 0; i++) {}
+ return (const char *) i - string;
+ } else if (encoding.hasPrefixIgnoreCase("UTF-32")) {
+ const uint32 *i = (const uint32 *) string;
+ for (;*i != 0; i++) {}
+ return (const char *) i - string;
+ } else {
+ const char *i = string;
+ for (;*i != 0; i++) {}
+ return i - string;
+ }
+}
+
}
diff --git a/common/encoding.h b/common/encoding.h
index 2b079ad962..adb61191d1 100644
--- a/common/encoding.h
+++ b/common/encoding.h
@@ -108,6 +108,18 @@ class Encoding {
* @return Array of characters with the opposite endianity
*/
static char *switchEndian(const char *string, int length, int bitCount);
+
+ /**
+ * Computes length (in bytes) of a string in a given encoding.
+ * The string must be zero ended. Similar to strlen
+ * (could be used instead of strlen).
+ *
+ * @param string String, which size should be computed.
+ * @param encoding Encoding of the string.
+ *
+ * @return Size of the string in bytes.
+ */
+ static size_t stringLength(const char *string, const String &encoding);
private:
/** The encoding, which is currently being converted to */