diff --git a/src/validators/common/DFAContentModel.cpp b/src/validators/common/DFAContentModel.cpp index ffa84e8c218cbe63e21f747db7d6905831449fcd..63060b039de1fabcf7fca5eb1f04397ed92b61fb 100644 --- a/src/validators/common/DFAContentModel.cpp +++ b/src/validators/common/DFAContentModel.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.26 2001/11/07 21:10:46 tng + * Performance: move getRawName() to outer loop so that it is called only once per outer loop. + * * Revision 1.25 2001/10/04 15:08:55 knoaman * Add support for circular import. * @@ -290,6 +293,9 @@ DFAContentModel::validateContent( QName** const children { // Get the current element index out const QName* curElem = children[childIndex]; + const XMLCh* curElemRawName = 0; + if (fDTD) + curElemRawName = curElem->getRawName(); // If this is text in a Schema mixed content model, skip it. if ( fIsMixed && @@ -302,7 +308,7 @@ DFAContentModel::validateContent( QName** const children { const QName* inElem = fElemMap[elemIndex]; if (fDTD) { - if (!XMLString::compareString(inElem->getRawName(), curElem->getRawName())) { + if (!XMLString::compareString(inElem->getRawName(), curElemRawName)) { nextState = fTransTable[curState][elemIndex]; if (nextState != XMLContentModel::gInvalidTrans) break; @@ -583,6 +589,9 @@ void DFAContentModel::buildDFA(ContentSpecNode* const curNode) // Get the current leaf's element index const QName* element = fLeafList[outIndex]->getElement(); + const XMLCh* elementRawName = 0; + if (fDTD && element) + elementRawName = element->getRawName(); // See if the current leaf node's element index is in the list unsigned int inIndex = 0; @@ -591,7 +600,7 @@ void DFAContentModel::buildDFA(ContentSpecNode* const curNode) { const QName* inElem = fElemMap[inIndex]; if (fDTD) { - if (!XMLString::compareString(inElem->getRawName(), element->getRawName())) { + if (!XMLString::compareString(inElem->getRawName(), elementRawName)) { break; } } @@ -630,13 +639,17 @@ void DFAContentModel::buildDFA(ContentSpecNode* const curNode) for (unsigned int elemIndex = 0; elemIndex < fElemMapSize; elemIndex++) { + const QName* element = fElemMap[elemIndex]; + const XMLCh* elementRawName = 0; + if (fDTD && element) + elementRawName = element->getRawName(); + for (unsigned int leafIndex = 0; leafIndex < fLeafCount; leafIndex++) { const QName* leaf = fLeafList[leafIndex]->getElement(); const int leafType = fLeafListType[leafIndex]; - const QName* element = fElemMap[elemIndex]; if (fDTD) { - if (!XMLString::compareString(leaf->getRawName(), element->getRawName())) { + if (!XMLString::compareString(leaf->getRawName(), elementRawName)) { fLeafSorter[fSortCount++] = leafIndex; } }