From 267896b0ebbce197ab10c7d0265557e2b8127baf Mon Sep 17 00:00:00 2001
From: Alberto Massari <amassari@apache.org>
Date: Tue, 27 Mar 2007 19:16:21 +0000
Subject: [PATCH] Performance improvements

git-svn-id: https://svn.apache.org/repos/asf/xerces/c/trunk@523038 13f79535-47bb-0310-9956-ffa450edef68
---
 src/xercesc/internal/XMLReader.cpp  | 10 ++++------
 src/xercesc/internal/XMLReader.hpp  |  2 +-
 src/xercesc/internal/XMLScanner.cpp |  5 +++++
 src/xercesc/util/XMLString.hpp      | 10 +++-------
 4 files changed, 13 insertions(+), 14 deletions(-)

diff --git a/src/xercesc/internal/XMLReader.cpp b/src/xercesc/internal/XMLReader.cpp
index e7d02674b..45ec33110 100644
--- a/src/xercesc/internal/XMLReader.cpp
+++ b/src/xercesc/internal/XMLReader.cpp
@@ -1130,7 +1130,7 @@ bool XMLReader::skippedString(const XMLCh* const toSkip)
         //  dirty comparison straight to its buffer with no requirement to unget
         //  if it fails.
         //
-        if (XMLString::compareNString(&fCharBuf[fCharIndex], toSkip, srcLen))
+        if (memcmp(&fCharBuf[fCharIndex], toSkip, srcLen*sizeof(XMLCh)))
             return false;
 
         //
@@ -1146,7 +1146,7 @@ bool XMLReader::skippedString(const XMLCh* const toSkip)
             if (charsLeft == 0)
                 return false; // error situation
         }
-        if (XMLString::compareNString(&fCharBuf[fCharIndex], toSkip, charsLeft))
+        if (memcmp(&fCharBuf[fCharIndex], toSkip, charsLeft*sizeof(XMLCh)))
             return false;
 
         fCharIndex += charsLeft;
@@ -1161,7 +1161,7 @@ bool XMLReader::skippedString(const XMLCh* const toSkip)
                 return false; // error situation
             if (charsLeft > remainingLen)
                 charsLeft = remainingLen;
-            if (XMLString::compareNString(&fCharBuf[fCharIndex], toSkip+offset, charsLeft))
+            if (memcmp(&fCharBuf[fCharIndex], toSkip+offset, charsLeft*sizeof(XMLCh)))
                 return false;
             offset += charsLeft;
             remainingLen -= charsLeft;
@@ -1215,7 +1215,7 @@ bool XMLReader::peekString(const XMLCh* const toPeek)
     //  dirty comparison straight to its buffer with no requirement to unget
     //  if it fails.
     //
-    if (XMLString::compareNString(&fCharBuf[fCharIndex], toPeek, srcLen))
+    if (memcmp(&fCharBuf[fCharIndex], toPeek, srcLen*sizeof(XMLCh)))
         return false;
 
     return true;
@@ -1857,8 +1857,6 @@ void XMLReader::handleEOL(XMLCh& curCh, bool inDecl)
     {
         fCurCol++;
     }
-
-    return;
 }
 
 XERCES_CPP_NAMESPACE_END
diff --git a/src/xercesc/internal/XMLReader.hpp b/src/xercesc/internal/XMLReader.hpp
index 3746fe0ea..f2f4abcc3 100644
--- a/src/xercesc/internal/XMLReader.hpp
+++ b/src/xercesc/internal/XMLReader.hpp
@@ -771,7 +771,7 @@ inline bool XMLReader::peekNextChar(XMLCh& chGotten)
     //  normal char get method in regards to newline normalization, though
     //  its not as complicated as the actual character getting method's.
     //
-    if ((chGotten == chCR || ((chGotten == chNEL || chGotten == chLineSeparator) && fNEL))
+    if ((chGotten == chCR || (fNEL && (chGotten == chNEL || chGotten == chLineSeparator)))
         && (fSource == Source_External))
         chGotten = chLF;
 
diff --git a/src/xercesc/internal/XMLScanner.cpp b/src/xercesc/internal/XMLScanner.cpp
index 6dc613cce..b7e451ae4 100644
--- a/src/xercesc/internal/XMLScanner.cpp
+++ b/src/xercesc/internal/XMLScanner.cpp
@@ -1946,6 +1946,11 @@ XMLScanner::XMLTokens XMLScanner::senseNextToken(unsigned int& orgReader)
     //  in order to catch the scenario where the current entity ended at
     //  the > of some markup.
     XMLCh nextCh;
+
+    // avoid setting up the ThrowEOEJanitor if we know that we have data in the current reader
+    if(fReaderMgr.getCurrentReader() && fReaderMgr.getCurrentReader()->charsLeftInBuffer()>0)
+        nextCh = fReaderMgr.peekNextChar();
+    else
     {
         ThrowEOEJanitor janMgr(&fReaderMgr, true);
         nextCh = fReaderMgr.peekNextChar();
diff --git a/src/xercesc/util/XMLString.hpp b/src/xercesc/util/XMLString.hpp
index 7d207893e..5e06cae13 100644
--- a/src/xercesc/util/XMLString.hpp
+++ b/src/xercesc/util/XMLString.hpp
@@ -16,7 +16,7 @@
  */
 
 /*
- * $Id $
+ * $Id$
  */
 
 #if !defined(XMLSTRING_HPP)
@@ -1521,14 +1521,10 @@ inline unsigned int XMLString::hash(   const   XMLCh* const    tohash
         return 0;
 
     const XMLCh* curCh = tohash;
-    unsigned int hashVal = (unsigned int)(*curCh);
-    curCh++;
+    unsigned int hashVal = (unsigned int)(*curCh++);
 
     while (*curCh)
-    {
-        hashVal = (hashVal * 38) + (hashVal >> 24) + (unsigned int)(*curCh);
-        curCh++;
-    }
+        hashVal = (hashVal * 38) + (hashVal >> 24) + (unsigned int)(*curCh++);
 
     // Divide by modulus
     return hashVal % hashModulus;
-- 
GitLab