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

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

Issue 110843004: Replaced HTMLIdentifier with an atomized string factory function (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Review fixes Created 7 years 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
« no previous file with comments | « Source/wtf/text/AtomicString.cpp ('k') | Source/wtf/text/StringImpl.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 *
11 * This library is distributed in the hope that it will be useful, 11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Library General Public License for more details. 14 * Library General Public License for more details.
15 * 15 *
16 * You should have received a copy of the GNU Library General Public License 16 * You should have received a copy of the GNU Library General Public License
17 * along with this library; see the file COPYING.LIB. If not, write to 17 * along with this library; see the file COPYING.LIB. If not, write to
18 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 18 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
19 * Boston, MA 02110-1301, USA. 19 * Boston, MA 02110-1301, USA.
20 * 20 *
21 */ 21 */
22 22
23 #ifndef StringImpl_h 23 #ifndef StringImpl_h
24 #define StringImpl_h 24 #define StringImpl_h
25 25
26 #include <limits.h> 26 #include <limits.h>
27 #include "wtf/ASCIICType.h" 27 #include "wtf/ASCIICType.h"
28 #include "wtf/Forward.h" 28 #include "wtf/Forward.h"
29 #include "wtf/HashMap.h"
29 #include "wtf/StringHasher.h" 30 #include "wtf/StringHasher.h"
30 #include "wtf/Vector.h" 31 #include "wtf/Vector.h"
31 #include "wtf/WTFExport.h" 32 #include "wtf/WTFExport.h"
32 #include "wtf/unicode/Unicode.h" 33 #include "wtf/unicode/Unicode.h"
33 34
34 #if USE(CF) 35 #if USE(CF)
35 typedef const struct __CFString * CFStringRef; 36 typedef const struct __CFString * CFStringRef;
36 #endif 37 #endif
37 38
38 #ifdef __OBJC__ 39 #ifdef __OBJC__
39 @class NSString; 40 @class NSString;
40 #endif 41 #endif
41 42
42 namespace WTF { 43 namespace WTF {
43 44
45 struct AlreadyHashed;
44 struct CStringTranslator; 46 struct CStringTranslator;
45 template<typename CharacterType> struct HashAndCharactersTranslator; 47 template<typename CharacterType> struct HashAndCharactersTranslator;
46 struct HashAndUTF8CharactersTranslator; 48 struct HashAndUTF8CharactersTranslator;
47 struct LCharBufferTranslator; 49 struct LCharBufferTranslator;
48 struct CharBufferFromLiteralDataTranslator; 50 struct CharBufferFromLiteralDataTranslator;
49 struct SubstringTranslator; 51 struct SubstringTranslator;
50 struct UCharBufferTranslator; 52 struct UCharBufferTranslator;
51 template<typename> class RetainPtr; 53 template<typename> class RetainPtr;
52 54
53 enum TextCaseSensitivity { TextCaseSensitive, TextCaseInsensitive }; 55 enum TextCaseSensitivity { TextCaseSensitive, TextCaseInsensitive };
54 56
55 enum StripBehavior { StripExtraWhiteSpace, DoNotStripWhiteSpace }; 57 enum StripBehavior { StripExtraWhiteSpace, DoNotStripWhiteSpace };
56 58
57 typedef bool (*CharacterMatchFunctionPtr)(UChar); 59 typedef bool (*CharacterMatchFunctionPtr)(UChar);
58 typedef bool (*IsWhiteSpaceFunctionPtr)(UChar); 60 typedef bool (*IsWhiteSpaceFunctionPtr)(UChar);
61 typedef HashMap<unsigned, StringImpl*, AlreadyHashed> StaticStringsTable;
59 62
60 // Define STRING_STATS to turn on run time statistics of string sizes and memory usage 63 // Define STRING_STATS to turn on run time statistics of string sizes and memory usage
61 #undef STRING_STATS 64 #undef STRING_STATS
62 65
63 #ifdef STRING_STATS 66 #ifdef STRING_STATS
64 struct StringStats { 67 struct StringStats {
65 inline void add8BitString(unsigned length) 68 inline void add8BitString(unsigned length)
66 { 69 {
67 ++m_totalNumberStrings; 70 ++m_totalNumberStrings;
68 ++m_number8BitStrings; 71 ++m_number8BitStrings;
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
173 , m_is8Bit(true) 176 , m_is8Bit(true)
174 , m_isStatic(true) 177 , m_isStatic(true)
175 { 178 {
176 } 179 }
177 180
178 public: 181 public:
179 ~StringImpl(); 182 ~StringImpl();
180 183
181 static StringImpl* createStatic(const char* string, unsigned length, unsigne d hash); 184 static StringImpl* createStatic(const char* string, unsigned length, unsigne d hash);
182 static void freezeStaticStrings(); 185 static void freezeStaticStrings();
183 static const Vector<StringImpl*>& allStaticStrings(); 186 static const StaticStringsTable& allStaticStrings();
187 static unsigned highestStaticStringLength() { return m_highestStaticStringLe ngth; }
184 188
185 static PassRefPtr<StringImpl> create(const UChar*, unsigned length); 189 static PassRefPtr<StringImpl> create(const UChar*, unsigned length);
186 static PassRefPtr<StringImpl> create(const LChar*, unsigned length); 190 static PassRefPtr<StringImpl> create(const LChar*, unsigned length);
187 static PassRefPtr<StringImpl> create8BitIfPossible(const UChar*, unsigned le ngth); 191 static PassRefPtr<StringImpl> create8BitIfPossible(const UChar*, unsigned le ngth);
188 template<size_t inlineCapacity> 192 template<size_t inlineCapacity>
189 static PassRefPtr<StringImpl> create8BitIfPossible(const Vector<UChar, inlin eCapacity>& vector) 193 static PassRefPtr<StringImpl> create8BitIfPossible(const Vector<UChar, inlin eCapacity>& vector)
190 { 194 {
191 return create8BitIfPossible(vector.data(), vector.size()); 195 return create8BitIfPossible(vector.data(), vector.size());
192 } 196 }
193 197
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
435 static const unsigned s_copyCharsInlineCutOff = 20; 439 static const unsigned s_copyCharsInlineCutOff = 20;
436 440
437 template <class UCharPredicate> PassRefPtr<StringImpl> stripMatchedCharacter s(UCharPredicate); 441 template <class UCharPredicate> PassRefPtr<StringImpl> stripMatchedCharacter s(UCharPredicate);
438 template <typename CharType, class UCharPredicate> PassRefPtr<StringImpl> si mplifyMatchedCharactersToSpace(UCharPredicate, StripBehavior); 442 template <typename CharType, class UCharPredicate> PassRefPtr<StringImpl> si mplifyMatchedCharactersToSpace(UCharPredicate, StripBehavior);
439 NEVER_INLINE unsigned hashSlowCase() const; 443 NEVER_INLINE unsigned hashSlowCase() const;
440 444
441 #ifdef STRING_STATS 445 #ifdef STRING_STATS
442 static StringStats m_stringStats; 446 static StringStats m_stringStats;
443 #endif 447 #endif
444 448
449 static unsigned m_highestStaticStringLength;
450
445 #ifndef NDEBUG 451 #ifndef NDEBUG
446 void assertHashIsCorrect() 452 void assertHashIsCorrect()
447 { 453 {
448 ASSERT(hasHash()); 454 ASSERT(hasHash());
449 ASSERT(existingHash() == StringHasher::computeHashAndMaskTop8Bits(charac ters8(), length())); 455 ASSERT(existingHash() == StringHasher::computeHashAndMaskTop8Bits(charac ters8(), length()));
450 } 456 }
451 #endif 457 #endif
452 458
453 private: 459 private:
454 unsigned m_refCount; 460 unsigned m_refCount;
(...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after
746 } 752 }
747 753
748 using WTF::StringImpl; 754 using WTF::StringImpl;
749 using WTF::equal; 755 using WTF::equal;
750 using WTF::equalNonNull; 756 using WTF::equalNonNull;
751 using WTF::TextCaseSensitivity; 757 using WTF::TextCaseSensitivity;
752 using WTF::TextCaseSensitive; 758 using WTF::TextCaseSensitive;
753 using WTF::TextCaseInsensitive; 759 using WTF::TextCaseInsensitive;
754 760
755 #endif 761 #endif
OLDNEW
« no previous file with comments | « Source/wtf/text/AtomicString.cpp ('k') | Source/wtf/text/StringImpl.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698