Chromium Code Reviews| Index: Source/platform/text/SegmentedString.h |
| diff --git a/Source/platform/text/SegmentedString.h b/Source/platform/text/SegmentedString.h |
| index c08742a569b058c081d66e6366fbe5813c0d9c31..bdfdf2205d54476a6fc363ade0ecb073876dce35 100644 |
| --- a/Source/platform/text/SegmentedString.h |
| +++ b/Source/platform/text/SegmentedString.h |
| @@ -81,6 +81,29 @@ public: |
| } |
| } |
| + void push(UChar c) |
| + { |
| + if (m_is8Bit) { |
| + if (m_data.string8Ptr == m_string.characters8()) { |
| + m_string.insert(&c, 1, 0); |
|
Yoav Weiss
2015/08/27 13:19:03
AFAICT this goes back to String::append which look
kouhei (in TOK)
2015/08/28 05:38:47
I replaced this codepath with prepend() call in Se
|
| + m_data.string8Ptr = m_string.characters8(); |
| + m_length = m_string.length(); |
| + } else { |
| + --m_data.string8Ptr; |
| + ASSERT(*m_data.string8Ptr == c); |
| + } |
| + } else { |
| + if (m_data.string16Ptr == m_string.characters16()) { |
| + m_string.insert(&c, 1, 0); |
| + m_data.string16Ptr = m_string.characters16(); |
| + m_length = m_string.length(); |
| + } else { |
| + --m_data.string16Ptr; |
| + ASSERT(*m_data.string16Ptr == static_cast<LChar>(c)); |
| + } |
| + } |
| + } |
| + |
| UChar getCurrentChar8() |
| { |
| return *m_data.string8Ptr; |
| @@ -148,9 +171,7 @@ private: |
| class PLATFORM_EXPORT SegmentedString { |
| public: |
| SegmentedString() |
| - : m_pushedChar1(0) |
| - , m_pushedChar2(0) |
| - , m_currentChar(0) |
| + : m_currentChar(0) |
| , m_numberOfCharactersConsumedPriorToCurrentString(0) |
| , m_numberOfCharactersConsumedPriorToCurrentLine(0) |
| , m_currentLine(0) |
| @@ -163,9 +184,7 @@ public: |
| } |
| SegmentedString(const String& str) |
| - : m_pushedChar1(0) |
| - , m_pushedChar2(0) |
| - , m_currentString(str) |
| + : m_currentString(str) |
| , m_currentChar(0) |
| , m_numberOfCharactersConsumedPriorToCurrentString(0) |
| , m_numberOfCharactersConsumedPriorToCurrentLine(0) |
| @@ -188,19 +207,7 @@ public: |
| bool excludeLineNumbers() const { return m_currentString.excludeLineNumbers(); } |
| void setExcludeLineNumbers(); |
| - void push(UChar c) |
| - { |
| - ASSERT(c); |
| - |
| - if (!m_pushedChar1) { |
| - m_currentChar = m_pushedChar1 = c; |
| - updateSlowCaseFunctionPointers(); |
| - } else { |
| - ASSERT(!m_pushedChar2); |
| - m_pushedChar2 = m_pushedChar1; |
| - m_currentChar = m_pushedChar1 = c; |
| - } |
| - } |
| + void push(UChar); |
| bool isEmpty() const { return m_empty; } |
| unsigned length() const; |
| @@ -219,7 +226,6 @@ public: |
| void advance() |
| { |
| if (m_fastPathFlags & Use8BitAdvance) { |
| - ASSERT(!m_pushedChar1); |
| m_currentChar = m_currentString.incrementAndGetCurrentChar8(); |
| decrementAndCheckLength(); |
| return; |
| @@ -231,8 +237,6 @@ public: |
| inline void advanceAndUpdateLineNumber() |
| { |
| if (m_fastPathFlags & Use8BitAdvance) { |
| - ASSERT(!m_pushedChar1); |
| - |
| bool haveNewLine = (m_currentChar == '\n') & !!(m_fastPathFlags & Use8BitAdvanceAndUpdateLineNumbers); |
| m_currentChar = m_currentString.incrementAndGetCurrentChar8(); |
| decrementAndCheckLength(); |
| @@ -269,7 +273,7 @@ public: |
| void advancePastNewlineAndUpdateLineNumber() |
| { |
| ASSERT(currentChar() == '\n'); |
| - if (!m_pushedChar1 && m_currentString.length() > 1) { |
| + if (m_currentString.length() > 1) { |
| int newLineFlag = m_currentString.doNotExcludeLineNumbers(); |
| m_currentLine += newLineFlag; |
| if (newLineFlag) |
| @@ -285,16 +289,11 @@ public: |
| // have space for at least |count| characters. |
| void advance(unsigned count, UChar* consumedCharacters); |
| - bool escaped() const { return m_pushedChar1; } |
| + bool escaped() const { return false; } |
| int numberOfCharactersConsumed() const |
| { |
| int numberOfPushedCharacters = 0; |
| - if (m_pushedChar1) { |
| - ++numberOfPushedCharacters; |
| - if (m_pushedChar2) |
| - ++numberOfPushedCharacters; |
| - } |
| return m_numberOfCharactersConsumedPriorToCurrentString + m_currentString.numberOfCharactersConsumed() - numberOfPushedCharacters; |
| } |
| @@ -340,7 +339,7 @@ private: |
| void updateAdvanceFunctionPointers() |
| { |
| - if ((m_currentString.length() > 1) && !m_pushedChar1) { |
| + if (m_currentString.length() > 1) { |
| if (m_currentString.is8Bit()) { |
| m_advanceFunc = &SegmentedString::advance8; |
| m_fastPathFlags = Use8BitAdvance; |
| @@ -373,7 +372,7 @@ private: |
| inline LookAheadResult lookAheadInline(const String& string, TextCaseSensitivity caseSensitivity) |
| { |
| - if (!m_pushedChar1 && string.length() <= static_cast<unsigned>(m_currentString.length())) { |
| + if (string.length() <= static_cast<unsigned>(m_currentString.length())) { |
| String currentSubstring = m_currentString.currentSubString(string.length()); |
| if (currentSubstring.startsWith(string, caseSensitivity)) |
| return DidMatch; |
| @@ -399,8 +398,6 @@ private: |
| bool isComposite() const { return !m_substrings.isEmpty(); } |
| - UChar m_pushedChar1; |
| - UChar m_pushedChar2; |
| SegmentedSubstring m_currentString; |
| UChar m_currentChar; |
| int m_numberOfCharactersConsumedPriorToCurrentString; |