Title: [141342] trunk
Revision
141342
Author
christophe.du...@intel.com
Date
2013-01-30 16:50:24 -0800 (Wed, 30 Jan 2013)

Log Message

Add a StringTypeAdapter for ASCIILiteral
https://bugs.webkit.org/show_bug.cgi?id=108338

Reviewed by Benjamin Poulain.

Source/WTF:

Add StringTypeAdapter for ASCIILiteral type so that concatenation of an
ASCIILiteral and a String using + operator is efficiently handled.

* wtf/text/StringConcatenate.h:
* wtf/text/StringOperators.h:
(WTF::operator+): Inline some of the operator+ functions that were not
yet.
(WTF):

Tools:

Add API tests for operator+() taking an ASCIILiteral.

* TestWebKitAPI/Tests/WTF/StringOperators.cpp:
(TestWebKitAPI::TEST):

Modified Paths

Diff

Modified: trunk/Source/WTF/ChangeLog (141341 => 141342)


--- trunk/Source/WTF/ChangeLog	2013-01-31 00:49:05 UTC (rev 141341)
+++ trunk/Source/WTF/ChangeLog	2013-01-31 00:50:24 UTC (rev 141342)
@@ -1,3 +1,19 @@
+2013-01-30  Christophe Dumez  <christophe.du...@intel.com>
+
+        Add a StringTypeAdapter for ASCIILiteral
+        https://bugs.webkit.org/show_bug.cgi?id=108338
+
+        Reviewed by Benjamin Poulain.
+
+        Add StringTypeAdapter for ASCIILiteral type so that concatenation of an
+        ASCIILiteral and a String using + operator is efficiently handled.
+
+        * wtf/text/StringConcatenate.h:
+        * wtf/text/StringOperators.h:
+        (WTF::operator+): Inline some of the operator+ functions that were not
+        yet.
+        (WTF):
+
 2013-01-30  David Kilzer  <ddkil...@apple.com>
 
         Upstream iOS build file changes for WTF

Modified: trunk/Source/WTF/wtf/text/StringConcatenate.h (141341 => 141342)


--- trunk/Source/WTF/wtf/text/StringConcatenate.h	2013-01-31 00:49:05 UTC (rev 141341)
+++ trunk/Source/WTF/wtf/text/StringConcatenate.h	2013-01-31 00:50:24 UTC (rev 141342)
@@ -164,8 +164,7 @@
 
     void writeTo(UChar* destination)
     {
-        for (unsigned i = 0; i < m_length; ++i)
-            destination[i] = m_buffer[i];
+        StringImpl::copyChars(destination, m_buffer, m_length);
     }
 
 private:
@@ -259,8 +258,7 @@
 
     void writeTo(UChar* destination)
     {
-        for (unsigned i = 0; i < m_length; ++i)
-            destination[i] = m_buffer[i];
+        StringImpl::copyChars(destination, m_buffer, m_length);
     }
 
 private:
@@ -269,6 +267,34 @@
 };
 
 template<>
+class StringTypeAdapter<ASCIILiteral> {
+public:
+    StringTypeAdapter<ASCIILiteral>(ASCIILiteral buffer)
+        : m_buffer(reinterpret_cast<const LChar*>(static_cast<const char*>(buffer)))
+        , m_length(strlen(buffer))
+    {
+    }
+
+    size_t length() { return m_length; }
+
+    bool is8Bit() { return true; }
+
+    void writeTo(LChar* destination)
+    {
+        memcpy(destination, m_buffer, static_cast<size_t>(m_length));
+    }
+
+    void writeTo(UChar* destination)
+    {
+        StringImpl::copyChars(destination, m_buffer, m_length);
+    }
+
+private:
+    const LChar* m_buffer;
+    unsigned m_length;
+};
+
+template<>
 class StringTypeAdapter<Vector<char> > {
 public:
     StringTypeAdapter<Vector<char> >(const Vector<char>& buffer)

Modified: trunk/Source/WTF/wtf/text/StringOperators.h (141341 => 141342)


--- trunk/Source/WTF/wtf/text/StringOperators.h	2013-01-31 00:49:05 UTC (rev 141341)
+++ trunk/Source/WTF/wtf/text/StringOperators.h	2013-01-31 00:50:24 UTC (rev 141342)
@@ -112,7 +112,7 @@
 }
 
 template<typename U, typename V>
-StringAppend<const char*, StringAppend<U, V> > operator+(const char* string1, const StringAppend<U, V>& string2)
+inline StringAppend<const char*, StringAppend<U, V> > operator+(const char* string1, const StringAppend<U, V>& string2)
 {
     return StringAppend<const char*, StringAppend<U, V> >(string1, string2);
 }
@@ -128,11 +128,27 @@
 }
 
 template<typename U, typename V>
-StringAppend<const UChar*, StringAppend<U, V> > operator+(const UChar* string1, const StringAppend<U, V>& string2)
+inline StringAppend<const UChar*, StringAppend<U, V> > operator+(const UChar* string1, const StringAppend<U, V>& string2)
 {
     return StringAppend<const UChar*, StringAppend<U, V> >(string1, string2);
 }
 
+inline StringAppend<ASCIILiteral, String> operator+(const ASCIILiteral& string1, const String& string2)
+{
+    return StringAppend<ASCIILiteral, String>(string1, string2);
+}
+
+inline StringAppend<ASCIILiteral, AtomicString> operator+(const ASCIILiteral& string1, const AtomicString& string2)
+{
+    return StringAppend<ASCIILiteral, AtomicString>(string1, string2);
+}
+
+template<typename U, typename V>
+inline StringAppend<ASCIILiteral, StringAppend<U, V> > operator+(const ASCIILiteral& string1, const StringAppend<U, V>& string2)
+{
+    return StringAppend<ASCIILiteral, StringAppend<U, V> >(string1, string2);
+}
+
 template<typename T>
 StringAppend<String, T> operator+(const String& string1, T string2)
 {

Modified: trunk/Tools/ChangeLog (141341 => 141342)


--- trunk/Tools/ChangeLog	2013-01-31 00:49:05 UTC (rev 141341)
+++ trunk/Tools/ChangeLog	2013-01-31 00:50:24 UTC (rev 141342)
@@ -1,3 +1,15 @@
+2013-01-30  Christophe Dumez  <christophe.du...@intel.com>
+
+        Add a StringTypeAdapter for ASCIILiteral
+        https://bugs.webkit.org/show_bug.cgi?id=108338
+
+        Reviewed by Benjamin Poulain.
+
+        Add API tests for operator+() taking an ASCIILiteral.
+
+        * TestWebKitAPI/Tests/WTF/StringOperators.cpp:
+        (TestWebKitAPI::TEST):
+
 2013-01-30  Roger Fong  <roger_f...@apple.com>
 
         Modify runtests.py script so that --skip-failing-tests option is not added when platform is cygwin.

Modified: trunk/Tools/TestWebKitAPI/Tests/WTF/StringOperators.cpp (141341 => 141342)


--- trunk/Tools/TestWebKitAPI/Tests/WTF/StringOperators.cpp	2013-01-31 00:49:05 UTC (rev 141341)
+++ trunk/Tools/TestWebKitAPI/Tests/WTF/StringOperators.cpp	2013-01-31 00:50:24 UTC (rev 141342)
@@ -45,6 +45,7 @@
 {
     String string("String");
     AtomicString atomicString("AtomicString");
+    ASCIILiteral literal("ASCIILiteral");
 
     EXPECT_EQ(0, wtfStringCopyCount);
 
@@ -58,6 +59,11 @@
     EXPECT_N_WTF_STRING_COPIES(1, "C string" + atomicString);
     EXPECT_N_WTF_STRING_COPIES(1, atomicString + "C string");
 
+    EXPECT_N_WTF_STRING_COPIES(1, literal + string);
+    EXPECT_N_WTF_STRING_COPIES(1, string + literal);
+    EXPECT_N_WTF_STRING_COPIES(1, literal + atomicString);
+    EXPECT_N_WTF_STRING_COPIES(1, atomicString + literal);
+
     EXPECT_N_WTF_STRING_COPIES(2, "C string" + string + "C string" + string);
     EXPECT_N_WTF_STRING_COPIES(2, "C string" + (string + "C string" + string));
     EXPECT_N_WTF_STRING_COPIES(2, ("C string" + string) + ("C string" + string));
@@ -65,6 +71,41 @@
     EXPECT_N_WTF_STRING_COPIES(2, string + ("C string" + string + "C string"));
     EXPECT_N_WTF_STRING_COPIES(2, (string + "C string") + (string + "C string"));
 
+    EXPECT_N_WTF_STRING_COPIES(2, literal + string + literal + string);
+    EXPECT_N_WTF_STRING_COPIES(2, literal + (string + literal + string));
+    EXPECT_N_WTF_STRING_COPIES(2, (literal + string) + (literal + string));
+    EXPECT_N_WTF_STRING_COPIES(2, string + literal + string + literal);
+    EXPECT_N_WTF_STRING_COPIES(2, string + (literal + string + literal));
+    EXPECT_N_WTF_STRING_COPIES(2, (string + literal) + (string + literal));
+
+    EXPECT_N_WTF_STRING_COPIES(2, literal + string + "C string" + string);
+    EXPECT_N_WTF_STRING_COPIES(2, literal + (string + "C string" + string));
+    EXPECT_N_WTF_STRING_COPIES(2, (literal + string) + ("C string" + string));
+    EXPECT_N_WTF_STRING_COPIES(2, "C string" + string + literal + string);
+    EXPECT_N_WTF_STRING_COPIES(2, "C string" + (string + literal + string));
+    EXPECT_N_WTF_STRING_COPIES(2, ("C string" + string) + (literal + string));
+
+    EXPECT_N_WTF_STRING_COPIES(2, literal + atomicString + "C string" + atomicString);
+    EXPECT_N_WTF_STRING_COPIES(2, literal + (atomicString + "C string" + atomicString));
+    EXPECT_N_WTF_STRING_COPIES(2, (literal + atomicString) + ("C string" + atomicString));
+    EXPECT_N_WTF_STRING_COPIES(2, "C string" + atomicString + literal + atomicString);
+    EXPECT_N_WTF_STRING_COPIES(2, "C string" + (atomicString + literal + atomicString));
+    EXPECT_N_WTF_STRING_COPIES(2, ("C string" + atomicString) + (literal + atomicString));
+
+    EXPECT_N_WTF_STRING_COPIES(2, literal + atomicString + "C string" + string);
+    EXPECT_N_WTF_STRING_COPIES(2, literal + (atomicString + "C string" + string));
+    EXPECT_N_WTF_STRING_COPIES(2, (literal + atomicString) + ("C string" + string));
+    EXPECT_N_WTF_STRING_COPIES(2, "C string" + atomicString + literal + string);
+    EXPECT_N_WTF_STRING_COPIES(2, "C string" + (atomicString + literal + string));
+    EXPECT_N_WTF_STRING_COPIES(2, ("C string" + atomicString) + (literal + string));
+
+    EXPECT_N_WTF_STRING_COPIES(2, literal + string + "C string" + atomicString);
+    EXPECT_N_WTF_STRING_COPIES(2, literal + (string + "C string" + atomicString));
+    EXPECT_N_WTF_STRING_COPIES(2, (literal + string) + ("C string" + atomicString));
+    EXPECT_N_WTF_STRING_COPIES(2, "C string" + string + literal + atomicString);
+    EXPECT_N_WTF_STRING_COPIES(2, "C string" + (string + literal + atomicString));
+    EXPECT_N_WTF_STRING_COPIES(2, ("C string" + string) + (literal + atomicString));
+
     EXPECT_N_WTF_STRING_COPIES(2, "C string" + atomicString + "C string" + atomicString);
     EXPECT_N_WTF_STRING_COPIES(2, "C string" + (atomicString + "C string" + atomicString));
     EXPECT_N_WTF_STRING_COPIES(2, ("C string" + atomicString) + ("C string" + atomicString));
@@ -72,6 +113,13 @@
     EXPECT_N_WTF_STRING_COPIES(2, atomicString + ("C string" + atomicString + "C string"));
     EXPECT_N_WTF_STRING_COPIES(2, (atomicString + "C string") + (atomicString + "C string"));
 
+    EXPECT_N_WTF_STRING_COPIES(2, literal + atomicString + literal + atomicString);
+    EXPECT_N_WTF_STRING_COPIES(2, literal + (atomicString + literal + atomicString));
+    EXPECT_N_WTF_STRING_COPIES(2, (literal + atomicString) + (literal + atomicString));
+    EXPECT_N_WTF_STRING_COPIES(2, atomicString + literal + atomicString + literal);
+    EXPECT_N_WTF_STRING_COPIES(2, atomicString + (literal + atomicString + literal));
+    EXPECT_N_WTF_STRING_COPIES(2, (atomicString + literal) + (atomicString + literal));
+
     EXPECT_N_WTF_STRING_COPIES(2, "C string" + string + "C string" + atomicString);
     EXPECT_N_WTF_STRING_COPIES(2, "C string" + (string + "C string" + atomicString));
     EXPECT_N_WTF_STRING_COPIES(2, ("C string" + string) + ("C string" + atomicString));
@@ -79,6 +127,13 @@
     EXPECT_N_WTF_STRING_COPIES(2, string + ("C string" + atomicString + "C string"));
     EXPECT_N_WTF_STRING_COPIES(2, (string + "C string") + (atomicString + "C string"));
 
+    EXPECT_N_WTF_STRING_COPIES(2, literal + string + literal + atomicString);
+    EXPECT_N_WTF_STRING_COPIES(2, literal + (string + literal + atomicString));
+    EXPECT_N_WTF_STRING_COPIES(2, (literal + string) + (literal + atomicString));
+    EXPECT_N_WTF_STRING_COPIES(2, string + literal + atomicString + literal);
+    EXPECT_N_WTF_STRING_COPIES(2, string + (literal + atomicString + literal));
+    EXPECT_N_WTF_STRING_COPIES(2, (string + literal) + (atomicString + literal));
+
     EXPECT_N_WTF_STRING_COPIES(2, "C string" + atomicString + "C string" + string);
     EXPECT_N_WTF_STRING_COPIES(2, "C string" + (atomicString + "C string" + string));
     EXPECT_N_WTF_STRING_COPIES(2, ("C string" + atomicString) + ("C string" + string));
@@ -86,6 +141,13 @@
     EXPECT_N_WTF_STRING_COPIES(2, atomicString + ("C string" + string + "C string"));
     EXPECT_N_WTF_STRING_COPIES(2, (atomicString + "C string") + (string + "C string"));
 
+    EXPECT_N_WTF_STRING_COPIES(2, literal + atomicString + literal + string);
+    EXPECT_N_WTF_STRING_COPIES(2, literal + (atomicString + literal + string));
+    EXPECT_N_WTF_STRING_COPIES(2, (literal + atomicString) + (literal + string));
+    EXPECT_N_WTF_STRING_COPIES(2, atomicString + literal + string + literal);
+    EXPECT_N_WTF_STRING_COPIES(2, atomicString + (literal + string + literal));
+    EXPECT_N_WTF_STRING_COPIES(2, (atomicString + literal) + (string + literal));
+
 #if COMPILER(MSVC)
     EXPECT_N_WTF_STRING_COPIES(1, L"wide string" + string);
     EXPECT_N_WTF_STRING_COPIES(1, string + L"wide string");
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to