Changeset 141342 in webkit
- Timestamp:
- Jan 30, 2013 4:50:24 PM (11 years ago)
- Location:
- trunk
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WTF/ChangeLog
r141308 r141342 1 2013-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 1 17 2013-01-30 David Kilzer <ddkilzer@apple.com> 2 18 -
trunk/Source/WTF/wtf/text/StringConcatenate.h
r134514 r141342 165 165 void writeTo(UChar* destination) 166 166 { 167 for (unsigned i = 0; i < m_length; ++i) 168 destination[i] = m_buffer[i]; 167 StringImpl::copyChars(destination, m_buffer, m_length); 169 168 } 170 169 … … 260 259 void writeTo(UChar* destination) 261 260 { 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 264 private: 265 const LChar* m_buffer; 266 unsigned m_length; 267 }; 268 269 template<> 270 class StringTypeAdapter<ASCIILiteral> { 271 public: 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); 264 290 } 265 291 -
trunk/Source/WTF/wtf/text/StringOperators.h
r111778 r141342 113 113 114 114 template<typename U, typename V> 115 StringAppend<const char*, StringAppend<U, V> > operator+(const char* string1, const StringAppend<U, V>& string2)115 inline StringAppend<const char*, StringAppend<U, V> > operator+(const char* string1, const StringAppend<U, V>& string2) 116 116 { 117 117 return StringAppend<const char*, StringAppend<U, V> >(string1, string2); … … 129 129 130 130 template<typename U, typename V> 131 StringAppend<const UChar*, StringAppend<U, V> > operator+(const UChar* string1, const StringAppend<U, V>& string2)131 inline StringAppend<const UChar*, StringAppend<U, V> > operator+(const UChar* string1, const StringAppend<U, V>& string2) 132 132 { 133 133 return StringAppend<const UChar*, StringAppend<U, V> >(string1, string2); 134 } 135 136 inline StringAppend<ASCIILiteral, String> operator+(const ASCIILiteral& string1, const String& string2) 137 { 138 return StringAppend<ASCIILiteral, String>(string1, string2); 139 } 140 141 inline StringAppend<ASCIILiteral, AtomicString> operator+(const ASCIILiteral& string1, const AtomicString& string2) 142 { 143 return StringAppend<ASCIILiteral, AtomicString>(string1, string2); 144 } 145 146 template<typename U, typename V> 147 inline StringAppend<ASCIILiteral, StringAppend<U, V> > operator+(const ASCIILiteral& string1, const StringAppend<U, V>& string2) 148 { 149 return StringAppend<ASCIILiteral, StringAppend<U, V> >(string1, string2); 134 150 } 135 151 -
trunk/Tools/ChangeLog
r141341 r141342 1 2013-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 1 13 2013-01-30 Roger Fong <roger_fong@apple.com> 2 14 -
trunk/Tools/TestWebKitAPI/Tests/WTF/StringOperators.cpp
r95188 r141342 46 46 String string("String"); 47 47 AtomicString atomicString("AtomicString"); 48 ASCIILiteral literal("ASCIILiteral"); 48 49 49 50 EXPECT_EQ(0, wtfStringCopyCount); … … 59 60 EXPECT_N_WTF_STRING_COPIES(1, atomicString + "C string"); 60 61 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 61 67 EXPECT_N_WTF_STRING_COPIES(2, "C string" + string + "C string" + string); 62 68 EXPECT_N_WTF_STRING_COPIES(2, "C string" + (string + "C string" + string)); … … 65 71 EXPECT_N_WTF_STRING_COPIES(2, string + ("C string" + string + "C string")); 66 72 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)); 67 108 68 109 EXPECT_N_WTF_STRING_COPIES(2, "C string" + atomicString + "C string" + atomicString); … … 73 114 EXPECT_N_WTF_STRING_COPIES(2, (atomicString + "C string") + (atomicString + "C string")); 74 115 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 75 123 EXPECT_N_WTF_STRING_COPIES(2, "C string" + string + "C string" + atomicString); 76 124 EXPECT_N_WTF_STRING_COPIES(2, "C string" + (string + "C string" + atomicString)); … … 80 128 EXPECT_N_WTF_STRING_COPIES(2, (string + "C string") + (atomicString + "C string")); 81 129 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 82 137 EXPECT_N_WTF_STRING_COPIES(2, "C string" + atomicString + "C string" + string); 83 138 EXPECT_N_WTF_STRING_COPIES(2, "C string" + (atomicString + "C string" + string)); … … 86 141 EXPECT_N_WTF_STRING_COPIES(2, atomicString + ("C string" + string + "C string")); 87 142 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)); 88 150 89 151 #if COMPILER(MSVC)
Note: See TracChangeset
for help on using the changeset viewer.