Changeset 165703 in webkit for trunk/Source/JavaScriptCore/runtime/JSStringBuilder.h
- Timestamp:
- Mar 16, 2014, 10:35:53 AM (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/runtime/JSStringBuilder.h
r162784 r165703 33 33 namespace JSC { 34 34 35 // FIXME: Should move the last few callers over from this to WTF::StringBuilder. 35 36 class JSStringBuilder { 36 37 public: … … 41 42 } 42 43 43 void append( const UChar u)44 void append(LChar character) 44 45 { 45 46 if (m_is8Bit) { 46 if (u < 0xff) { 47 LChar c = u; 48 m_okay &= buffer8.tryAppend(&c, 1); 47 m_okay &= buffer8.tryAppend(&character, 1); 48 return; 49 } 50 UChar upconvertedCharacter = character; 51 m_okay &= buffer16.tryAppend(&upconvertedCharacter, 1); 52 } 53 54 void append(UChar character) 55 { 56 if (m_is8Bit) { 57 if (character < 0x100) { 58 LChar narrowedCharacter = character; 59 m_okay &= buffer8.tryAppend(&narrowedCharacter, 1); 49 60 return; 50 61 } 51 62 upConvert(); 52 63 } 53 m_okay &= buffer16.tryAppend(& u, 1);64 m_okay &= buffer16.tryAppend(&character, 1); 54 65 } 55 66 56 67 void append(const char* str) 57 68 { 58 append(str, strlen(str)); 59 } 60 61 void append(const char* str, size_t len) 62 { 63 if (m_is8Bit) { 64 m_okay &= buffer8.tryAppend(reinterpret_cast<const LChar*>(str), len); 65 return; 66 } 67 m_okay &= buffer8.tryReserveCapacity(buffer16.size() + len); 68 for (size_t i = 0; i < len; i++) { 69 UChar u = static_cast<unsigned char>(str[i]); 70 m_okay &= buffer16.tryAppend(&u, 1); 71 } 72 } 73 74 void append(const LChar* str, size_t len) 75 { 76 if (m_is8Bit) { 77 m_okay &= buffer8.tryAppend(str, len); 78 return; 79 } 80 m_okay &= buffer8.tryReserveCapacity(buffer16.size() + len); 81 for (size_t i = 0; i < len; i++) { 82 UChar u = str[i]; 83 m_okay &= buffer16.tryAppend(&u, 1); 84 } 85 } 86 87 void append(const UChar* str, size_t len) 88 { 89 if (m_is8Bit) 90 upConvert(); // FIXME: We could check character by character its size. 91 m_okay &= buffer16.tryAppend(str, len); 92 } 93 94 void append(const String& str) 95 { 96 unsigned length = str.length(); 97 98 if (!length) 99 return; 100 101 if (m_is8Bit) { 102 if (str.is8Bit()) { 103 m_okay &= buffer8.tryAppend(str.characters8(), length); 104 return; 105 } 106 upConvert(); 107 } 108 m_okay &= buffer16.tryAppend(str.deprecatedCharacters(), length); 109 } 110 111 void upConvert() 112 { 113 ASSERT(m_is8Bit); 114 size_t len = buffer8.size(); 115 116 for (size_t i = 0; i < len; i++) 117 buffer16.append(buffer8[i]); 118 119 buffer8.clear(); 120 m_is8Bit = false; 69 append(reinterpret_cast<const LChar*>(str), strlen(str)); 121 70 } 122 71 … … 137 86 } 138 87 139 protected: 88 private: 89 void append(const LChar* characters, size_t length) 90 { 91 if (m_is8Bit) { 92 m_okay &= buffer8.tryAppend(characters, length); 93 return; 94 } 95 // FIXME: There must be a more efficient way of doing this. 96 m_okay &= buffer16.tryReserveCapacity(buffer16.size() + length); 97 for (size_t i = 0; i < length; i++) { 98 UChar upconvertedCharacter = characters[i]; 99 m_okay &= buffer16.tryAppend(&upconvertedCharacter, 1); 100 } 101 } 102 103 void upConvert() 104 { 105 ASSERT(m_is8Bit); 106 size_t len = buffer8.size(); 107 108 for (size_t i = 0; i < len; i++) 109 buffer16.append(buffer8[i]); 110 111 buffer8.clear(); 112 m_is8Bit = false; 113 } 114 140 115 Vector<LChar, 64, UnsafeVectorOverflow> buffer8; 141 116 Vector<UChar, 64, UnsafeVectorOverflow> buffer16;
Note:
See TracChangeset
for help on using the changeset viewer.