OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2009, 2010, 2012, 2013 Apple Inc. All rights reserved. | 2 * Copyright (C) 2009, 2010, 2012, 2013 Apple Inc. All rights reserved. |
3 * Copyright (C) 2012 Google Inc. All rights reserved. | 3 * Copyright (C) 2012 Google Inc. All rights reserved. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
7 * are met: | 7 * are met: |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
200 // If the buffer is sufficiently over-allocated, make a new AtomicString
from a copy so its buffer is not so large. | 200 // If the buffer is sufficiently over-allocated, make a new AtomicString
from a copy so its buffer is not so large. |
201 if (canShrink()) { | 201 if (canShrink()) { |
202 if (is8Bit()) | 202 if (is8Bit()) |
203 return AtomicString(characters8(), length()); | 203 return AtomicString(characters8(), length()); |
204 return AtomicString(characters16(), length()); | 204 return AtomicString(characters16(), length()); |
205 } | 205 } |
206 | 206 |
207 if (!m_string.isNull()) | 207 if (!m_string.isNull()) |
208 return AtomicString(m_string); | 208 return AtomicString(m_string); |
209 | 209 |
210 ASSERT(m_buffer); | 210 DCHECK(m_buffer); |
211 return AtomicString(m_buffer.get(), 0, m_length); | 211 return AtomicString(m_buffer.get(), 0, m_length); |
212 } | 212 } |
213 | 213 |
214 unsigned length() const | 214 unsigned length() const |
215 { | 215 { |
216 return m_length; | 216 return m_length; |
217 } | 217 } |
218 | 218 |
219 bool isEmpty() const { return !m_length; } | 219 bool isEmpty() const { return !m_length; } |
220 | 220 |
(...skipping 13 matching lines...) Expand all Loading... |
234 UChar operator[](unsigned i) const | 234 UChar operator[](unsigned i) const |
235 { | 235 { |
236 ASSERT_WITH_SECURITY_IMPLICATION(i < m_length); | 236 ASSERT_WITH_SECURITY_IMPLICATION(i < m_length); |
237 if (m_is8Bit) | 237 if (m_is8Bit) |
238 return characters8()[i]; | 238 return characters8()[i]; |
239 return characters16()[i]; | 239 return characters16()[i]; |
240 } | 240 } |
241 | 241 |
242 const LChar* characters8() const | 242 const LChar* characters8() const |
243 { | 243 { |
244 ASSERT(m_is8Bit); | 244 DCHECK(m_is8Bit); |
245 if (!m_length) | 245 if (!m_length) |
246 return 0; | 246 return 0; |
247 if (!m_string.isNull()) | 247 if (!m_string.isNull()) |
248 return m_string.characters8(); | 248 return m_string.characters8(); |
249 ASSERT(m_buffer); | 249 DCHECK(m_buffer); |
250 return m_buffer->characters8(); | 250 return m_buffer->characters8(); |
251 } | 251 } |
252 | 252 |
253 const UChar* characters16() const | 253 const UChar* characters16() const |
254 { | 254 { |
255 ASSERT(!m_is8Bit); | 255 DCHECK(!m_is8Bit); |
256 if (!m_length) | 256 if (!m_length) |
257 return 0; | 257 return 0; |
258 if (!m_string.isNull()) | 258 if (!m_string.isNull()) |
259 return m_string.characters16(); | 259 return m_string.characters16(); |
260 ASSERT(m_buffer); | 260 DCHECK(m_buffer); |
261 return m_buffer->characters16(); | 261 return m_buffer->characters16(); |
262 } | 262 } |
263 | 263 |
264 bool is8Bit() const { return m_is8Bit; } | 264 bool is8Bit() const { return m_is8Bit; } |
265 | 265 |
266 void clear() | 266 void clear() |
267 { | 267 { |
268 m_length = 0; | 268 m_length = 0; |
269 m_string = String(); | 269 m_string = String(); |
270 m_buffer = nullptr; | 270 m_buffer = nullptr; |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
302 LChar* m_bufferCharacters8; | 302 LChar* m_bufferCharacters8; |
303 UChar* m_bufferCharacters16; | 303 UChar* m_bufferCharacters16; |
304 }; | 304 }; |
305 unsigned m_length; | 305 unsigned m_length; |
306 bool m_is8Bit; | 306 bool m_is8Bit; |
307 }; | 307 }; |
308 | 308 |
309 template <> | 309 template <> |
310 ALWAYS_INLINE LChar* StringBuilder::getBufferCharacters<LChar>() | 310 ALWAYS_INLINE LChar* StringBuilder::getBufferCharacters<LChar>() |
311 { | 311 { |
312 ASSERT(m_is8Bit); | 312 DCHECK(m_is8Bit); |
313 return m_bufferCharacters8; | 313 return m_bufferCharacters8; |
314 } | 314 } |
315 | 315 |
316 template <> | 316 template <> |
317 ALWAYS_INLINE UChar* StringBuilder::getBufferCharacters<UChar>() | 317 ALWAYS_INLINE UChar* StringBuilder::getBufferCharacters<UChar>() |
318 { | 318 { |
319 ASSERT(!m_is8Bit); | 319 DCHECK(!m_is8Bit); |
320 return m_bufferCharacters16; | 320 return m_bufferCharacters16; |
321 } | 321 } |
322 | 322 |
323 template <typename CharType> | 323 template <typename CharType> |
324 bool equal(const StringBuilder& s, const CharType* buffer, unsigned length) | 324 bool equal(const StringBuilder& s, const CharType* buffer, unsigned length) |
325 { | 325 { |
326 if (s.length() != length) | 326 if (s.length() != length) |
327 return false; | 327 return false; |
328 | 328 |
329 if (s.is8Bit()) | 329 if (s.is8Bit()) |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
394 inline bool operator==(const StringBuilder& a, const String& b) { return equal(a
, b); } | 394 inline bool operator==(const StringBuilder& a, const String& b) { return equal(a
, b); } |
395 inline bool operator!=(const StringBuilder& a, const String& b) { return !equal(
a, b); } | 395 inline bool operator!=(const StringBuilder& a, const String& b) { return !equal(
a, b); } |
396 inline bool operator==(const String& a, const StringBuilder& b) { return equal(b
, a); } | 396 inline bool operator==(const String& a, const StringBuilder& b) { return equal(b
, a); } |
397 inline bool operator!=(const String& a, const StringBuilder& b) { return !equal(
b, a); } | 397 inline bool operator!=(const String& a, const StringBuilder& b) { return !equal(
b, a); } |
398 | 398 |
399 } // namespace WTF | 399 } // namespace WTF |
400 | 400 |
401 using WTF::StringBuilder; | 401 using WTF::StringBuilder; |
402 | 402 |
403 #endif // StringBuilder_h | 403 #endif // StringBuilder_h |
OLD | NEW |