tng 2003/02/04 13:21:20
Modified: c/src/xercesc/internal DGXMLScanner.cpp
Log:
Performance: check AllCharData charopts once instead for every nextCh in the loop.
Revision Changes Path
1.6 +19 -20 xml-xerces/c/src/xercesc/internal/DGXMLScanner.cpp
Index: DGXMLScanner.cpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/xercesc/internal/DGXMLScanner.cpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- DGXMLScanner.cpp 6 Jan 2003 19:44:57 -0000 1.5
+++ DGXMLScanner.cpp 4 Feb 2003 21:21:19 -0000 1.6
@@ -2544,6 +2544,11 @@
// characters specially here.
bool emittedError = false;
bool gotLeadingSurrogate = false;
+
+ // Get the character data opts for the current element
+ const ElemStack::StackElem* topElem = fElemStack.topElement();
+ XMLElementDecl::CharDataOpts charOpts =
topElem->fThisElement->getCharDataOpts();
+
while (true)
{
const XMLCh nextCh = fReaderMgr.getNextChar();
@@ -2560,13 +2565,8 @@
// This document is standalone; this ignorable CDATA whitespace is
forbidden.
// XML 1.0, Section 2.9
// And see if the current element is a 'Children' style content model
- const ElemStack::StackElem* topElem = fElemStack.topElement();
-
if (topElem->fThisElement->isExternal()) {
- // Get the character data opts for the current element
- XMLElementDecl::CharDataOpts charOpts =
topElem->fThisElement->getCharDataOpts();
-
if (charOpts == XMLElementDecl::SpacesOk) // Element Content
{
// Error - standalone should have a value of "no" as whitespace
detected in an
@@ -2580,6 +2580,19 @@
// sequence.
if (nextCh == chCloseSquare && fReaderMgr.skippedString(CDataClose))
{
+ // make sure we were not expecting a trailing surrogate.
+ if (gotLeadingSurrogate)
+ emitError(XMLErrs::Expected2ndSurrogateChar);
+
+ if (fValidate) {
+
+ if (charOpts != XMLElementDecl::AllCharData)
+ {
+ // They definitely cannot handle any type of char data
+ fValidator->emitError(XMLValid::NoCharDataInCM);
+ }
+ }
+
// If we have a doc handler, call it
if (fDocHandler)
{
@@ -2645,20 +2658,6 @@
}
}
gotLeadingSurrogate = false;
- }
- }
-
- if (fValidate) {
- // And see if the current element is a 'Children' style content model
- const ElemStack::StackElem* topElem = fElemStack.topElement();
-
- // Get the character data opts for the current element
- XMLElementDecl::CharDataOpts charOpts =
topElem->fThisElement->getCharDataOpts();
-
- if (charOpts != XMLElementDecl::AllCharData)
- {
- // They definitely cannot handle any type of char data
- fValidator->emitError(XMLValid::NoCharDataInCM);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]