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