Changeset 141342 in webkit


Ignore:
Timestamp:
Jan 30, 2013 4:50:24 PM (11 years ago)
Author:
Christophe Dumez
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):

Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WTF/ChangeLog

    r141308 r141342  
     12013-01-30  Christophe Dumez  <christophe.dumez@intel.com>
     2
     3        Add a StringTypeAdapter for ASCIILiteral
     4        https://bugs.webkit.org/show_bug.cgi?id=108338
     5
     6        Reviewed by Benjamin Poulain.
     7
     8        Add StringTypeAdapter for ASCIILiteral type so that concatenation of an
     9        ASCIILiteral and a String using + operator is efficiently handled.
     10
     11        * wtf/text/StringConcatenate.h:
     12        * wtf/text/StringOperators.h:
     13        (WTF::operator+): Inline some of the operator+ functions that were not
     14        yet.
     15        (WTF):
     16
    1172013-01-30  David Kilzer  <ddkilzer@apple.com>
    218
  • trunk/Source/WTF/wtf/text/StringConcatenate.h

    r134514 r141342  
    165165    void writeTo(UChar* destination)
    166166    {
    167         for (unsigned i = 0; i < m_length; ++i)
    168             destination[i] = m_buffer[i];
     167        StringImpl::copyChars(destination, m_buffer, m_length);
    169168    }
    170169
     
    260259    void writeTo(UChar* destination)
    261260    {
    262         for (unsigned i = 0; i < m_length; ++i)
    263             destination[i] = m_buffer[i];
     261        StringImpl::copyChars(destination, m_buffer, m_length);
     262    }
     263
     264private:
     265    const LChar* m_buffer;
     266    unsigned m_length;
     267};
     268
     269template<>
     270class StringTypeAdapter<ASCIILiteral> {
     271public:
     272    StringTypeAdapter<ASCIILiteral>(ASCIILiteral buffer)
     273        : m_buffer(reinterpret_cast<const LChar*>(static_cast<const char*>(buffer)))
     274        , m_length(strlen(buffer))
     275    {
     276    }
     277
     278    size_t length() { return m_length; }
     279
     280    bool is8Bit() { return true; }
     281
     282    void writeTo(LChar* destination)
     283    {
     284        memcpy(destination, m_buffer, static_cast<size_t>(m_length));
     285    }
     286
     287    void writeTo(UChar* destination)
     288    {
     289        StringImpl::copyChars(destination, m_buffer, m_length);
    264290    }
    265291
  • trunk/Source/WTF/wtf/text/StringOperators.h

    r111778 r141342  
    113113
    114114template<typename U, typename V>
    115 StringAppend<const char*, StringAppend<U, V> > operator+(const char* string1, const StringAppend<U, V>& string2)
     115inline StringAppend<const char*, StringAppend<U, V> > operator+(const char* string1, const StringAppend<U, V>& string2)
    116116{
    117117    return StringAppend<const char*, StringAppend<U, V> >(string1, string2);
     
    129129
    130130template<typename U, typename V>
    131 StringAppend<const UChar*, StringAppend<U, V> > operator+(const UChar* string1, const StringAppend<U, V>& string2)
     131inline StringAppend<const UChar*, StringAppend<U, V> > operator+(const UChar* string1, const StringAppend<U, V>& string2)
    132132{
    133133    return StringAppend<const UChar*, StringAppend<U, V> >(string1, string2);
     134}
     135
     136inline StringAppend<ASCIILiteral, String> operator+(const ASCIILiteral& string1, const String& string2)
     137{
     138    return StringAppend<ASCIILiteral, String>(string1, string2);
     139}
     140
     141inline StringAppend<ASCIILiteral, AtomicString> operator+(const ASCIILiteral& string1, const AtomicString& string2)
     142{
     143    return StringAppend<ASCIILiteral, AtomicString>(string1, string2);
     144}
     145
     146template<typename U, typename V>
     147inline StringAppend<ASCIILiteral, StringAppend<U, V> > operator+(const ASCIILiteral& string1, const StringAppend<U, V>& string2)
     148{
     149    return StringAppend<ASCIILiteral, StringAppend<U, V> >(string1, string2);
    134150}
    135151
  • trunk/Tools/ChangeLog

    r141341 r141342  
     12013-01-30  Christophe Dumez  <christophe.dumez@intel.com>
     2
     3        Add a StringTypeAdapter for ASCIILiteral
     4        https://bugs.webkit.org/show_bug.cgi?id=108338
     5
     6        Reviewed by Benjamin Poulain.
     7
     8        Add API tests for operator+() taking an ASCIILiteral.
     9
     10        * TestWebKitAPI/Tests/WTF/StringOperators.cpp:
     11        (TestWebKitAPI::TEST):
     12
    1132013-01-30  Roger Fong  <roger_fong@apple.com>
    214
  • trunk/Tools/TestWebKitAPI/Tests/WTF/StringOperators.cpp

    r95188 r141342  
    4646    String string("String");
    4747    AtomicString atomicString("AtomicString");
     48    ASCIILiteral literal("ASCIILiteral");
    4849
    4950    EXPECT_EQ(0, wtfStringCopyCount);
     
    5960    EXPECT_N_WTF_STRING_COPIES(1, atomicString + "C string");
    6061
     62    EXPECT_N_WTF_STRING_COPIES(1, literal + string);
     63    EXPECT_N_WTF_STRING_COPIES(1, string + literal);
     64    EXPECT_N_WTF_STRING_COPIES(1, literal + atomicString);
     65    EXPECT_N_WTF_STRING_COPIES(1, atomicString + literal);
     66
    6167    EXPECT_N_WTF_STRING_COPIES(2, "C string" + string + "C string" + string);
    6268    EXPECT_N_WTF_STRING_COPIES(2, "C string" + (string + "C string" + string));
     
    6571    EXPECT_N_WTF_STRING_COPIES(2, string + ("C string" + string + "C string"));
    6672    EXPECT_N_WTF_STRING_COPIES(2, (string + "C string") + (string + "C string"));
     73
     74    EXPECT_N_WTF_STRING_COPIES(2, literal + string + literal + string);
     75    EXPECT_N_WTF_STRING_COPIES(2, literal + (string + literal + string));
     76    EXPECT_N_WTF_STRING_COPIES(2, (literal + string) + (literal + string));
     77    EXPECT_N_WTF_STRING_COPIES(2, string + literal + string + literal);
     78    EXPECT_N_WTF_STRING_COPIES(2, string + (literal + string + literal));
     79    EXPECT_N_WTF_STRING_COPIES(2, (string + literal) + (string + literal));
     80
     81    EXPECT_N_WTF_STRING_COPIES(2, literal + string + "C string" + string);
     82    EXPECT_N_WTF_STRING_COPIES(2, literal + (string + "C string" + string));
     83    EXPECT_N_WTF_STRING_COPIES(2, (literal + string) + ("C string" + string));
     84    EXPECT_N_WTF_STRING_COPIES(2, "C string" + string + literal + string);
     85    EXPECT_N_WTF_STRING_COPIES(2, "C string" + (string + literal + string));
     86    EXPECT_N_WTF_STRING_COPIES(2, ("C string" + string) + (literal + string));
     87
     88    EXPECT_N_WTF_STRING_COPIES(2, literal + atomicString + "C string" + atomicString);
     89    EXPECT_N_WTF_STRING_COPIES(2, literal + (atomicString + "C string" + atomicString));
     90    EXPECT_N_WTF_STRING_COPIES(2, (literal + atomicString) + ("C string" + atomicString));
     91    EXPECT_N_WTF_STRING_COPIES(2, "C string" + atomicString + literal + atomicString);
     92    EXPECT_N_WTF_STRING_COPIES(2, "C string" + (atomicString + literal + atomicString));
     93    EXPECT_N_WTF_STRING_COPIES(2, ("C string" + atomicString) + (literal + atomicString));
     94
     95    EXPECT_N_WTF_STRING_COPIES(2, literal + atomicString + "C string" + string);
     96    EXPECT_N_WTF_STRING_COPIES(2, literal + (atomicString + "C string" + string));
     97    EXPECT_N_WTF_STRING_COPIES(2, (literal + atomicString) + ("C string" + string));
     98    EXPECT_N_WTF_STRING_COPIES(2, "C string" + atomicString + literal + string);
     99    EXPECT_N_WTF_STRING_COPIES(2, "C string" + (atomicString + literal + string));
     100    EXPECT_N_WTF_STRING_COPIES(2, ("C string" + atomicString) + (literal + string));
     101
     102    EXPECT_N_WTF_STRING_COPIES(2, literal + string + "C string" + atomicString);
     103    EXPECT_N_WTF_STRING_COPIES(2, literal + (string + "C string" + atomicString));
     104    EXPECT_N_WTF_STRING_COPIES(2, (literal + string) + ("C string" + atomicString));
     105    EXPECT_N_WTF_STRING_COPIES(2, "C string" + string + literal + atomicString);
     106    EXPECT_N_WTF_STRING_COPIES(2, "C string" + (string + literal + atomicString));
     107    EXPECT_N_WTF_STRING_COPIES(2, ("C string" + string) + (literal + atomicString));
    67108
    68109    EXPECT_N_WTF_STRING_COPIES(2, "C string" + atomicString + "C string" + atomicString);
     
    73114    EXPECT_N_WTF_STRING_COPIES(2, (atomicString + "C string") + (atomicString + "C string"));
    74115
     116    EXPECT_N_WTF_STRING_COPIES(2, literal + atomicString + literal + atomicString);
     117    EXPECT_N_WTF_STRING_COPIES(2, literal + (atomicString + literal + atomicString));
     118    EXPECT_N_WTF_STRING_COPIES(2, (literal + atomicString) + (literal + atomicString));
     119    EXPECT_N_WTF_STRING_COPIES(2, atomicString + literal + atomicString + literal);
     120    EXPECT_N_WTF_STRING_COPIES(2, atomicString + (literal + atomicString + literal));
     121    EXPECT_N_WTF_STRING_COPIES(2, (atomicString + literal) + (atomicString + literal));
     122
    75123    EXPECT_N_WTF_STRING_COPIES(2, "C string" + string + "C string" + atomicString);
    76124    EXPECT_N_WTF_STRING_COPIES(2, "C string" + (string + "C string" + atomicString));
     
    80128    EXPECT_N_WTF_STRING_COPIES(2, (string + "C string") + (atomicString + "C string"));
    81129
     130    EXPECT_N_WTF_STRING_COPIES(2, literal + string + literal + atomicString);
     131    EXPECT_N_WTF_STRING_COPIES(2, literal + (string + literal + atomicString));
     132    EXPECT_N_WTF_STRING_COPIES(2, (literal + string) + (literal + atomicString));
     133    EXPECT_N_WTF_STRING_COPIES(2, string + literal + atomicString + literal);
     134    EXPECT_N_WTF_STRING_COPIES(2, string + (literal + atomicString + literal));
     135    EXPECT_N_WTF_STRING_COPIES(2, (string + literal) + (atomicString + literal));
     136
    82137    EXPECT_N_WTF_STRING_COPIES(2, "C string" + atomicString + "C string" + string);
    83138    EXPECT_N_WTF_STRING_COPIES(2, "C string" + (atomicString + "C string" + string));
     
    86141    EXPECT_N_WTF_STRING_COPIES(2, atomicString + ("C string" + string + "C string"));
    87142    EXPECT_N_WTF_STRING_COPIES(2, (atomicString + "C string") + (string + "C string"));
     143
     144    EXPECT_N_WTF_STRING_COPIES(2, literal + atomicString + literal + string);
     145    EXPECT_N_WTF_STRING_COPIES(2, literal + (atomicString + literal + string));
     146    EXPECT_N_WTF_STRING_COPIES(2, (literal + atomicString) + (literal + string));
     147    EXPECT_N_WTF_STRING_COPIES(2, atomicString + literal + string + literal);
     148    EXPECT_N_WTF_STRING_COPIES(2, atomicString + (literal + string + literal));
     149    EXPECT_N_WTF_STRING_COPIES(2, (atomicString + literal) + (string + literal));
    88150
    89151#if COMPILER(MSVC)
Note: See TracChangeset for help on using the changeset viewer.