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

Unified Diff: Source/platform/text/SegmentedString.h

Issue 1319913002: Remove SegmentedString::m_pushedChar{1,2} optimization (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: rebased / use pushIfPossible Created 5 years, 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | Source/platform/text/SegmentedString.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/platform/text/SegmentedString.h
diff --git a/Source/platform/text/SegmentedString.h b/Source/platform/text/SegmentedString.h
index c08742a569b058c081d66e6366fbe5813c0d9c31..42025727cd377acd783a523bf230ff464f98828b 100644
--- a/Source/platform/text/SegmentedString.h
+++ b/Source/platform/text/SegmentedString.h
@@ -55,10 +55,11 @@ public:
}
} else {
m_is8Bit = false;
+ m_data.string8Ptr = nullptr;
}
}
- void clear() { m_length = 0; m_data.string16Ptr = 0; m_is8Bit = false;}
+ void clear() { m_length = 0; m_data.string16Ptr = nullptr; m_is8Bit = false;}
bool is8Bit() { return m_is8Bit; }
@@ -81,6 +82,30 @@ public:
}
}
+ bool pushIfPossible(UChar c)
+ {
+ if (!m_length)
+ return false;
+
+ if (m_is8Bit) {
+ if (m_data.string8Ptr == m_string.characters8())
+ return false;
+
+ --m_data.string8Ptr;
+ ASSERT(*m_data.string8Ptr == c);
+ ++m_length;
+ return true;
+ }
+
+ if (m_data.string16Ptr == m_string.characters16())
+ return false;
+
+ --m_data.string16Ptr;
+ ASSERT(*m_data.string16Ptr == static_cast<LChar>(c));
+ ++m_length;
+ return true;
+ }
+
UChar getCurrentChar8()
{
return *m_data.string8Ptr;
@@ -148,9 +173,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 +186,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 +209,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 +228,6 @@ public:
void advance()
{
if (m_fastPathFlags & Use8BitAdvance) {
- ASSERT(!m_pushedChar1);
m_currentChar = m_currentString.incrementAndGetCurrentChar8();
decrementAndCheckLength();
return;
@@ -231,8 +239,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 +275,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 +291,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; }
Yoav Weiss 2015/08/31 07:57:44 I believe we can get rid of escaped() altogether.
int numberOfCharactersConsumed() const
{
int numberOfPushedCharacters = 0;
- if (m_pushedChar1) {
- ++numberOfPushedCharacters;
- if (m_pushedChar2)
- ++numberOfPushedCharacters;
- }
return m_numberOfCharactersConsumedPriorToCurrentString + m_currentString.numberOfCharactersConsumed() - numberOfPushedCharacters;
}
@@ -340,7 +341,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 +374,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 +400,6 @@ private:
bool isComposite() const { return !m_substrings.isEmpty(); }
- UChar m_pushedChar1;
- UChar m_pushedChar2;
SegmentedSubstring m_currentString;
UChar m_currentChar;
int m_numberOfCharactersConsumedPriorToCurrentString;
« no previous file with comments | « no previous file | Source/platform/text/SegmentedString.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698