From 8f930126e7de6db9c22ff9f02d52564c4c99a9a8 Mon Sep 17 00:00:00 2001 From: Jaromir Wysoglad Date: Thu, 5 Sep 2019 02:51:10 +0200 Subject: COMMON: Add string size computation to Encoding. --- common/encoding.cpp | 16 ++++++++++++++++ common/encoding.h | 12 ++++++++++++ 2 files changed, 28 insertions(+) (limited to 'common') 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 */ -- cgit v1.2.3