summaryrefslogtreecommitdiff
path: root/cpp/src/IceUtil/Unicode.cpp
diff options
context:
space:
mode:
authorJose <jose@zeroc.com>2016-03-08 22:09:37 +0100
committerJose <jose@zeroc.com>2016-03-08 22:09:37 +0100
commitcfa587bc0be11012b9ab4e8fd333e96080eb71e2 (patch)
tree31ecc86af1a9a84d09eb3c62cd302830d02a74ce /cpp/src/IceUtil/Unicode.cpp
parentminor fixes to icegriddb/icestormdb (diff)
parentmore icegriddb/icestormdb fixes (diff)
downloadice-cfa587bc0be11012b9ab4e8fd333e96080eb71e2.tar.bz2
ice-cfa587bc0be11012b9ab4e8fd333e96080eb71e2.tar.xz
ice-cfa587bc0be11012b9ab4e8fd333e96080eb71e2.zip
Merge remote-tracking branch 'origin/3.6'
Diffstat (limited to 'cpp/src/IceUtil/Unicode.cpp')
-rw-r--r--cpp/src/IceUtil/Unicode.cpp38
1 files changed, 38 insertions, 0 deletions
diff --git a/cpp/src/IceUtil/Unicode.cpp b/cpp/src/IceUtil/Unicode.cpp
index cae3476e277..7bad1d67c17 100644
--- a/cpp/src/IceUtil/Unicode.cpp
+++ b/cpp/src/IceUtil/Unicode.cpp
@@ -128,4 +128,42 @@ IceUtilInternal::convertUTF8ToUTFWstring(const Byte*& sourceStart, const Byte* s
return result;
}
+ConversionResult
+IceUtilInternal::convertUTF8ToUTF16(const vector<unsigned char>& source, vector<unsigned short>& target, ConversionFlags flags)
+{
+ target.resize(source.size());
+ const unsigned char* sourceStart = &source[0];
+ const unsigned char* sourceEnd = &source[0] + source.size();
+
+ unsigned short* targetStart = &target[0];
+ unsigned short* targetEnd = &target[0] + target.size();
+ ConversionResult result = ConvertUTF8toUTF16(&sourceStart, sourceEnd, &targetStart, targetEnd, flags);
+
+ if(result == conversionOK)
+ {
+ target.resize(targetStart - &target[0]);
+ }
+ return result;
+}
+
+ConversionResult
+IceUtilInternal::convertUTF32ToUTF8(const vector<unsigned int>& source, vector<unsigned char>& target, ConversionFlags flags)
+{
+ target.resize(source.size() * 4);
+
+ const unsigned int* sourceStart = &source[0];
+ const unsigned int* sourceEnd = &source[0] + source.size();
+
+ unsigned char* targetStart = &target[0];
+ unsigned char* targetEnd = &target[0] + target.size();
+ ConversionResult result = ConvertUTF32toUTF8(&sourceStart, sourceEnd, &targetStart, targetEnd, flags);
+
+ if(result == conversionOK)
+ {
+ target.resize(targetStart - &target[0]);
+ }
+ return result;
+}
+
+