]> git.saurik.com Git - apple/javascriptcore.git/blobdiff - runtime/UStringConcatenate.h
JavaScriptCore-1097.3.tar.gz
[apple/javascriptcore.git] / runtime / UStringConcatenate.h
index 0990c7273ac1720889bbfaae2059d4097facc358..cbd4e60ca4b3a7ae54fcc7525ffaf20946bee2d2 100644 (file)
@@ -35,21 +35,37 @@ template<>
 class StringTypeAdapter<JSC::UString> {
 public:
     StringTypeAdapter<JSC::UString>(JSC::UString& string)
-        : m_data(string.characters())
+        : m_string(string)
         , m_length(string.length())
     {
     }
 
     unsigned length() { return m_length; }
 
-    void writeTo(UChar* destination)
+    bool is8Bit() { return m_string.isNull() || m_string.is8Bit(); }
+
+    void writeTo(LChar* destination)
     {
+        const LChar* characters = m_string.characters8();
         for (unsigned i = 0; i < m_length; ++i)
-            destination[i] = m_data[i];
+            destination[i] = characters[i];
+    }
+
+    void writeTo(UChar* destination)
+    {
+        if (is8Bit()) {
+            const LChar* characters = m_string.characters8();
+            for (unsigned i = 0; i < m_length; ++i)
+                destination[i] = characters[i];
+        } else {
+            const UChar* characters = m_string.characters16();
+            for (unsigned i = 0; i < m_length; ++i)
+                destination[i] = characters[i];
+        }
     }
 
 private:
-    const UChar* m_data;
+    const JSC::UString& m_string;
     unsigned m_length;
 };