Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(310)

Side by Side Diff: third_party/WebKit/Source/wtf/text/StringImpl.h

Issue 1373773002: Fix check-webkit-style errors in Source/wtf/text/. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2013 Apple Inc. All rights reserved. 3 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2013 Apple Inc. All rights reserved.
4 * Copyright (C) 2009 Google Inc. All rights reserved. 4 * Copyright (C) 2009 Google Inc. All rights reserved.
5 * 5 *
6 * This library is free software; you can redistribute it and/or 6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Library General Public 7 * modify it under the terms of the GNU Library General Public
8 * License as published by the Free Software Foundation; either 8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version. 9 * version 2 of the License, or (at your option) any later version.
10 * 10 *
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
115 friend struct WTF::LCharBufferTranslator; 115 friend struct WTF::LCharBufferTranslator;
116 friend struct WTF::SubstringTranslator; 116 friend struct WTF::SubstringTranslator;
117 friend struct WTF::UCharBufferTranslator; 117 friend struct WTF::UCharBufferTranslator;
118 118
119 private: 119 private:
120 // StringImpls are allocated out of the WTF buffer partition. 120 // StringImpls are allocated out of the WTF buffer partition.
121 void* operator new(size_t); 121 void* operator new(size_t);
122 void* operator new(size_t, void* ptr) { return ptr; } 122 void* operator new(size_t, void* ptr) { return ptr; }
123 void operator delete(void*); 123 void operator delete(void*);
124 124
125 // Used to construct static strings, which have an special refCount that can never hit zero. 125 // Used to construct static strings, which have an special refCount that can
126 // This means that the static string will never be destroyed, which is impor tant because 126 // never hit zero. This means that the static string will never be
127 // static strings will be shared across threads & ref-counted in a non-threa dsafe manner. 127 // destroyed, which is important because static strings will be shared
128 // across threads & ref-counted in a non-threadsafe manner.
128 enum ConstructEmptyStringTag { ConstructEmptyString }; 129 enum ConstructEmptyStringTag { ConstructEmptyString };
129 explicit StringImpl(ConstructEmptyStringTag) 130 explicit StringImpl(ConstructEmptyStringTag)
130 : m_refCount(1) 131 : m_refCount(1)
131 , m_length(0) 132 , m_length(0)
132 , m_hash(0) 133 , m_hash(0)
133 , m_isAtomic(false) 134 , m_isAtomic(false)
134 , m_is8Bit(true) 135 , m_is8Bit(true)
135 , m_isStatic(true) 136 , m_isStatic(true)
136 { 137 {
137 // Ensure that the hash is computed so that AtomicStringHash can call ex istingHash() 138 // Ensure that the hash is computed so that AtomicStringHash can call
138 // with impunity. The empty string is special because it is never entere d into 139 // existingHash() with impunity. The empty string is special because it
139 // AtomicString's HashKey, but still needs to compare correctly. 140 // is never entered into AtomicString's HashKey, but still needs to
141 // compare correctly.
140 STRING_STATS_ADD_8BIT_STRING(m_length); 142 STRING_STATS_ADD_8BIT_STRING(m_length);
141 hash(); 143 hash();
142 } 144 }
143 145
144 enum ConstructEmptyString16BitTag { ConstructEmptyString16Bit }; 146 enum ConstructEmptyString16BitTag { ConstructEmptyString16Bit };
145 explicit StringImpl(ConstructEmptyString16BitTag) 147 explicit StringImpl(ConstructEmptyString16BitTag)
146 : m_refCount(1) 148 : m_refCount(1)
147 , m_length(0) 149 , m_length(0)
148 , m_hash(0) 150 , m_hash(0)
149 , m_isAtomic(false) 151 , m_isAtomic(false)
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
208 return create8BitIfPossible(vector.data(), vector.size()); 210 return create8BitIfPossible(vector.data(), vector.size());
209 } 211 }
210 212
211 ALWAYS_INLINE static PassRefPtr<StringImpl> create(const char* s, unsigned l ength) { return create(reinterpret_cast<const LChar*>(s), length); } 213 ALWAYS_INLINE static PassRefPtr<StringImpl> create(const char* s, unsigned l ength) { return create(reinterpret_cast<const LChar*>(s), length); }
212 static PassRefPtr<StringImpl> create(const LChar*); 214 static PassRefPtr<StringImpl> create(const LChar*);
213 ALWAYS_INLINE static PassRefPtr<StringImpl> create(const char* s) { return c reate(reinterpret_cast<const LChar*>(s)); } 215 ALWAYS_INLINE static PassRefPtr<StringImpl> create(const char* s) { return c reate(reinterpret_cast<const LChar*>(s)); }
214 216
215 static PassRefPtr<StringImpl> createUninitialized(unsigned length, LChar*& d ata); 217 static PassRefPtr<StringImpl> createUninitialized(unsigned length, LChar*& d ata);
216 static PassRefPtr<StringImpl> createUninitialized(unsigned length, UChar*& d ata); 218 static PassRefPtr<StringImpl> createUninitialized(unsigned length, UChar*& d ata);
217 219
218 // Reallocate the StringImpl. The originalString must be only owned by the P assRefPtr. 220 // Reallocate the StringImpl. The originalString must be only owned by the
219 // Just like the input pointer of realloc(), the originalString can't be use d after this function. 221 // PassRefPtr. Just like the input pointer of realloc(), the originalString
222 // can't be used after this function.
220 static PassRefPtr<StringImpl> reallocate(PassRefPtr<StringImpl> originalStri ng, unsigned length); 223 static PassRefPtr<StringImpl> reallocate(PassRefPtr<StringImpl> originalStri ng, unsigned length);
221 224
222 // If this StringImpl has only one reference, we can truncate the string by updating 225 // If this StringImpl has only one reference, we can truncate the string by
223 // its m_length property without actually re-allocating its buffer. 226 // updating its m_length property without actually re-allocating its buffer.
224 void truncateAssumingIsolated(unsigned length) 227 void truncateAssumingIsolated(unsigned length)
225 { 228 {
226 ASSERT(hasOneRef()); 229 ASSERT(hasOneRef());
227 ASSERT(length <= m_length); 230 ASSERT(length <= m_length);
228 m_length = length; 231 m_length = length;
229 } 232 }
230 233
231 unsigned length() const { return m_length; } 234 unsigned length() const { return m_length; }
232 bool is8Bit() const { return m_is8Bit; } 235 bool is8Bit() const { return m_is8Bit; }
233 236
234 ALWAYS_INLINE const LChar* characters8() const { ASSERT(is8Bit()); return re interpret_cast<const LChar*>(this + 1); } 237 ALWAYS_INLINE const LChar* characters8() const { ASSERT(is8Bit()); return re interpret_cast<const LChar*>(this + 1); }
235 ALWAYS_INLINE const UChar* characters16() const { ASSERT(!is8Bit()); return reinterpret_cast<const UChar*>(this + 1); } 238 ALWAYS_INLINE const UChar* characters16() const { ASSERT(!is8Bit()); return reinterpret_cast<const UChar*>(this + 1); }
236 239
237 template <typename CharType> 240 template <typename CharType>
238 ALWAYS_INLINE const CharType * getCharacters() const; 241 ALWAYS_INLINE const CharType * getCharacters() const;
239 242
240 size_t sizeInBytes() const; 243 size_t sizeInBytes() const;
241 244
242 bool isAtomic() const { return m_isAtomic; } 245 bool isAtomic() const { return m_isAtomic; }
243 void setIsAtomic(bool isAtomic) { m_isAtomic = isAtomic; } 246 void setIsAtomic(bool isAtomic) { m_isAtomic = isAtomic; }
244 247
245 bool isStatic() const { return m_isStatic; } 248 bool isStatic() const { return m_isStatic; }
246 249
247 private: 250 private:
248 // The high bits of 'hash' are always empty, but we prefer to store our flag s 251 // The high bits of 'hash' are always empty, but we prefer to store our
249 // in the low bits because it makes them slightly more efficient to access. 252 // flags in the low bits because it makes them slightly more efficient to
250 // So, we shift left and right when setting and getting our hash code. 253 // access. So, we shift left and right when setting and getting our hash
254 // code.
251 void setHash(unsigned hash) const 255 void setHash(unsigned hash) const
252 { 256 {
253 ASSERT(!hasHash()); 257 ASSERT(!hasHash());
254 // Multiple clients assume that StringHasher is the canonical string has h function. 258 // Multiple clients assume that StringHasher is the canonical string
259 // hash function.
255 ASSERT(hash == (is8Bit() ? StringHasher::computeHashAndMaskTop8Bits(char acters8(), m_length) : StringHasher::computeHashAndMaskTop8Bits(characters16(), m_length))); 260 ASSERT(hash == (is8Bit() ? StringHasher::computeHashAndMaskTop8Bits(char acters8(), m_length) : StringHasher::computeHashAndMaskTop8Bits(characters16(), m_length)));
256 m_hash = hash; 261 m_hash = hash;
257 ASSERT(hash); // Verify that 0 is a valid sentinel hash value. 262 ASSERT(hash); // Verify that 0 is a valid sentinel hash value.
258 } 263 }
259 264
260 unsigned rawHash() const 265 unsigned rawHash() const
261 { 266 {
262 return m_hash; 267 return m_hash;
263 } 268 }
264 269
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
339 int toIntStrict(bool* ok = 0, int base = 10); 344 int toIntStrict(bool* ok = 0, int base = 10);
340 unsigned toUIntStrict(bool* ok = 0, int base = 10); 345 unsigned toUIntStrict(bool* ok = 0, int base = 10);
341 int64_t toInt64Strict(bool* ok = 0, int base = 10); 346 int64_t toInt64Strict(bool* ok = 0, int base = 10);
342 uint64_t toUInt64Strict(bool* ok = 0, int base = 10); 347 uint64_t toUInt64Strict(bool* ok = 0, int base = 10);
343 348
344 int toInt(bool* ok = 0); // ignores trailing garbage 349 int toInt(bool* ok = 0); // ignores trailing garbage
345 unsigned toUInt(bool* ok = 0); // ignores trailing garbage 350 unsigned toUInt(bool* ok = 0); // ignores trailing garbage
346 int64_t toInt64(bool* ok = 0); // ignores trailing garbage 351 int64_t toInt64(bool* ok = 0); // ignores trailing garbage
347 uint64_t toUInt64(bool* ok = 0); // ignores trailing garbage 352 uint64_t toUInt64(bool* ok = 0); // ignores trailing garbage
348 353
349 // FIXME: Like the strict functions above, these give false for "ok" when th ere is trailing garbage. 354 // FIXME: Like the strict functions above, these give false for "ok" when
350 // Like the non-strict functions above, these return the value when there is trailing garbage. 355 // there is trailing garbage. Like the non-strict functions above, these
351 // It would be better if these were more consistent with the above functions instead. 356 // return the value when there is trailing garbage. It would be better if
357 // these were more consistent with the above functions instead.
352 double toDouble(bool* ok = 0); 358 double toDouble(bool* ok = 0);
353 float toFloat(bool* ok = 0); 359 float toFloat(bool* ok = 0);
354 360
355 PassRefPtr<StringImpl> lower(); 361 PassRefPtr<StringImpl> lower();
356 PassRefPtr<StringImpl> upper(); 362 PassRefPtr<StringImpl> upper();
357 PassRefPtr<StringImpl> lower(const AtomicString& localeIdentifier); 363 PassRefPtr<StringImpl> lower(const AtomicString& localeIdentifier);
358 PassRefPtr<StringImpl> upper(const AtomicString& localeIdentifier); 364 PassRefPtr<StringImpl> upper(const AtomicString& localeIdentifier);
359 365
360 PassRefPtr<StringImpl> fill(UChar); 366 PassRefPtr<StringImpl> fill(UChar);
361 // FIXME: Do we need fill(char) or can we just do the right thing if UChar i s ASCII? 367 // FIXME: Do we need fill(char) or can we just do the right thing if UChar i s ASCII?
362 PassRefPtr<StringImpl> foldCase(); 368 PassRefPtr<StringImpl> foldCase();
363 369
364 PassRefPtr<StringImpl> stripWhiteSpace(); 370 PassRefPtr<StringImpl> stripWhiteSpace();
365 PassRefPtr<StringImpl> stripWhiteSpace(IsWhiteSpaceFunctionPtr); 371 PassRefPtr<StringImpl> stripWhiteSpace(IsWhiteSpaceFunctionPtr);
366 PassRefPtr<StringImpl> simplifyWhiteSpace(StripBehavior stripBehavior = Stri pExtraWhiteSpace); 372 PassRefPtr<StringImpl> simplifyWhiteSpace(StripBehavior = StripExtraWhiteSpa ce);
367 PassRefPtr<StringImpl> simplifyWhiteSpace(IsWhiteSpaceFunctionPtr, StripBeha vior stripBehavior = StripExtraWhiteSpace); 373 PassRefPtr<StringImpl> simplifyWhiteSpace(IsWhiteSpaceFunctionPtr, StripBeha vior = StripExtraWhiteSpace);
368 374
369 PassRefPtr<StringImpl> removeCharacters(CharacterMatchFunctionPtr); 375 PassRefPtr<StringImpl> removeCharacters(CharacterMatchFunctionPtr);
370 template <typename CharType> 376 template <typename CharType>
371 ALWAYS_INLINE PassRefPtr<StringImpl> removeCharacters(const CharType* charac ters, CharacterMatchFunctionPtr); 377 ALWAYS_INLINE PassRefPtr<StringImpl> removeCharacters(const CharType* charac ters, CharacterMatchFunctionPtr);
372 378
373 size_t find(LChar character, unsigned start = 0); 379 size_t find(LChar character, unsigned start = 0);
374 size_t find(char character, unsigned start = 0); 380 size_t find(char character, unsigned start = 0);
375 size_t find(UChar character, unsigned start = 0); 381 size_t find(UChar character, unsigned start = 0);
376 size_t find(CharacterMatchFunctionPtr, unsigned index = 0); 382 size_t find(CharacterMatchFunctionPtr, unsigned index = 0);
377 size_t find(const LChar*, unsigned index = 0); 383 size_t find(const LChar*, unsigned index = 0);
(...skipping 397 matching lines...) Expand 10 before | Expand all | Expand 10 after
775 } 781 }
776 782
777 using WTF::StringImpl; 783 using WTF::StringImpl;
778 using WTF::equal; 784 using WTF::equal;
779 using WTF::equalNonNull; 785 using WTF::equalNonNull;
780 using WTF::TextCaseSensitivity; 786 using WTF::TextCaseSensitivity;
781 using WTF::TextCaseSensitive; 787 using WTF::TextCaseSensitive;
782 using WTF::TextCaseInsensitive; 788 using WTF::TextCaseInsensitive;
783 789
784 #endif 790 #endif
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/wtf/text/StringHash.h ('k') | third_party/WebKit/Source/wtf/text/StringImpl.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698