Reviewed by Dave.
authormjs <mjs@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 9 May 2004 04:55:11 +0000 (04:55 +0000)
committermjs <mjs@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 9 May 2004 04:55:11 +0000 (04:55 +0000)
- change things around so extremely hot TokenizerString::current()
method doesn't have to do any work. It's cheaper to maintain the
relevant state than to always compute it.

        * khtml/misc/stringit.h:
        (khtml::TokenizerString::TokenizerString): Initialize m_currentChar
        (khtml::TokenizerString::push): update m_currentChar
        (khtml::TokenizerString::advance): ditto
        (khtml::TokenizerString::current): return m_currentChar
        * khtml/misc/stringit.cpp:
        (khtml::TokenizerString::clear): update m_currentChar
        (khtml::TokenizerString::append): update m_currentChar
        (khtml::TokenizerString::prepend): update m_currentChar

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@6562 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebCore/ChangeLog-2005-08-23
WebCore/khtml/misc/stringit.cpp
WebCore/khtml/misc/stringit.h

index 031fe05..4118f80 100644 (file)
@@ -1,3 +1,21 @@
+2004-05-07  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Dave.
+
+       - change things around so extremely hot TokenizerString::current()
+       method doesn't have to do any work. It's cheaper to maintain the
+       relevant state than to always compute it.
+       
+        * khtml/misc/stringit.h:
+        (khtml::TokenizerString::TokenizerString): Initialize m_currentChar
+        (khtml::TokenizerString::push): update m_currentChar
+        (khtml::TokenizerString::advance): ditto
+        (khtml::TokenizerString::current): return m_currentChar
+        * khtml/misc/stringit.cpp:
+        (khtml::TokenizerString::clear): update m_currentChar
+        (khtml::TokenizerString::append): update m_currentChar
+        (khtml::TokenizerString::prepend): update m_currentChar
+
 2004-05-07  Don Melton  <gramps@apple.com>
 
         Reviewed by Dave.
index 6362693..cb97b90 100644 (file)
@@ -44,6 +44,7 @@ void TokenizerString::clear()
 {
     m_pushedChar1 = 0;
     m_pushedChar2 = 0;
+    m_currentChar = 0;
     m_currentString.clear();
     m_substrings.clear();
     m_lines = 0;
@@ -53,9 +54,9 @@ void TokenizerString::clear()
 void TokenizerString::append(const TokenizerSubstring &s)
 {
     if (s.m_length) {
-        if (!m_currentString.m_length)
+        if (!m_currentString.m_length) {
             m_currentString = s;
-        else {
+       } else {
             m_substrings.append(s);
             m_composite = true;
         }
@@ -87,6 +88,7 @@ void TokenizerString::append(const TokenizerString &s)
         for (; i != e; ++i)
             append(*i);
     }
+    m_currentChar = m_pushedChar1.isNull() ? m_currentString.m_current : &m_pushedChar1;
 }
 
 void TokenizerString::prepend(const TokenizerString &s)
@@ -100,6 +102,7 @@ void TokenizerString::prepend(const TokenizerString &s)
             prepend(*i);
     }
     prepend(s.m_currentString);
+    m_currentChar = m_pushedChar1.isNull() ? m_currentString.m_current : &m_pushedChar1;
 }
 
 void TokenizerString::advanceSubstring()
index bfc6678..f06253c 100644 (file)
@@ -67,9 +67,9 @@ private:
 class TokenizerString
 {
 public:
-    TokenizerString() : m_lines(0), m_composite(false) {}
-    TokenizerString(const QChar *str, int length) : m_currentString(str, length), m_lines(0), m_composite(false) {}
-    TokenizerString(const QString &str) : m_currentString(str), m_lines(0), m_composite(false) {}
+    TokenizerString() : m_currentChar(0), m_lines(0), m_composite(false) {}
+    TokenizerString(const QChar *str, int length) : m_currentString(str, length), m_currentChar(m_currentString.m_current), m_lines(0), m_composite(false) {}
+    TokenizerString(const QString &str) : m_currentString(str), m_currentChar(m_currentString.m_current), m_lines(0), m_composite(false) {}
 
     void clear();
 
@@ -77,9 +77,10 @@ public:
     void prepend(const TokenizerString &);
     
     void push(QChar c) {
-        if (m_pushedChar1.isNull())
+        if (m_pushedChar1.isNull()) {
             m_pushedChar1 = c;
-        else {
+           m_currentChar = m_pushedChar1.isNull() ? m_currentString.m_current : &m_pushedChar1;
+       } else {
             assert(m_pushedChar2.isNull());
             m_pushedChar2 = c;
         }
@@ -97,6 +98,7 @@ public:
             if (--m_currentString.m_length == 0)
                 advanceSubstring();
         }
+       m_currentChar = m_pushedChar1.isNull() ? m_currentString.m_current: &m_pushedChar1;
     }
     
     bool escaped() const { return !m_pushedChar1.isNull(); }
@@ -115,11 +117,12 @@ private:
     void prepend(const TokenizerSubstring &);
 
     void advanceSubstring();
-    const QChar *current() const { return m_pushedChar1.isNull() ? m_currentString.m_current : &m_pushedChar1; }
+    const QChar *current() const { return m_currentChar; }
 
     QChar m_pushedChar1;
     QChar m_pushedChar2;
     TokenizerSubstring m_currentString;
+    const QChar *m_currentChar;
     QValueList<TokenizerSubstring> m_substrings;
     int m_lines;
     bool m_composite;