tng 2003/01/03 08:38:22 Modified: c/src/xercesc/validators/schema TraverseSchema.cpp TraverseSchema.hpp Log: Performance: define fGlobalDeclarations as an array of ValueVectorOf to avoid string comparison. Revision Changes Path 1.48 +37 -17 xml-xerces/c/src/xercesc/validators/schema/TraverseSchema.cpp Index: TraverseSchema.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/schema/TraverseSchema.cpp,v retrieving revision 1.47 retrieving revision 1.48 diff -u -r1.47 -r1.48 --- TraverseSchema.cpp 3 Jan 2003 16:34:25 -0000 1.47 +++ TraverseSchema.cpp 3 Jan 2003 16:38:21 -0000 1.48 @@ -174,6 +174,17 @@ SchemaSymbols::fgELT_KEYREF }; +// Flags for global declaration +enum { + ENUM_ELT_SIMPLETYPE, + ENUM_ELT_COMPLEXTYPE, + ENUM_ELT_ELEMENT, + ENUM_ELT_ATTRIBUTE, + ENUM_ELT_ATTRIBUTEGROUP, + ENUM_ELT_GROUP, + ENUM_ELT_SIZE +}; + // --------------------------------------------------------------------------- // TraverseSchema: Constructors and Destructor // --------------------------------------------------------------------------- @@ -4147,15 +4158,15 @@ else if (XMLString::equals(name, SchemaSymbols::fgELT_SIMPLETYPE)) { if (typeName && *typeName) { - if (fGlobalDeclarations->containsKey(SchemaSymbols::fgELT_SIMPLETYPE, fullNameId) - || fGlobalDeclarations->containsKey(SchemaSymbols::fgELT_COMPLEXTYPE, fullNameId)) { + if (fGlobalDeclarations[ENUM_ELT_SIMPLETYPE]->containsElement(fullNameId) + || fGlobalDeclarations[ENUM_ELT_COMPLEXTYPE]->containsElement(fullNameId)) { reportSchemaError(child, XMLUni::fgXMLErrDomain, XMLErrs::DuplicateGlobalType, SchemaSymbols::fgELT_SIMPLETYPE, typeName, SchemaSymbols::fgELT_COMPLEXTYPE); continue; } else { - fGlobalDeclarations->put((void*) SchemaSymbols::fgELT_SIMPLETYPE, fullNameId, 0); + fGlobalDeclarations[ENUM_ELT_SIMPLETYPE]->addElement(fullNameId); } } @@ -4164,15 +4175,15 @@ else if (XMLString::equals(name, SchemaSymbols::fgELT_COMPLEXTYPE)) { if (typeName && *typeName) { - if (fGlobalDeclarations->containsKey(SchemaSymbols::fgELT_SIMPLETYPE, fullNameId) - || fGlobalDeclarations->containsKey(SchemaSymbols::fgELT_COMPLEXTYPE, fullNameId)) { + if (fGlobalDeclarations[ENUM_ELT_SIMPLETYPE]->containsElement(fullNameId) + || fGlobalDeclarations[ENUM_ELT_COMPLEXTYPE]->containsElement(fullNameId)) { reportSchemaError(child, XMLUni::fgXMLErrDomain, XMLErrs::DuplicateGlobalType, SchemaSymbols::fgELT_COMPLEXTYPE, typeName, SchemaSymbols::fgELT_SIMPLETYPE); continue; } else { - fGlobalDeclarations->put((void*) SchemaSymbols::fgELT_COMPLEXTYPE, fullNameId, 0); + fGlobalDeclarations[ENUM_ELT_COMPLEXTYPE]->addElement(fullNameId); } } @@ -4181,14 +4192,14 @@ else if (XMLString::equals(name, SchemaSymbols::fgELT_ELEMENT)) { if (typeName && *typeName) { - if (fGlobalDeclarations->containsKey(SchemaSymbols::fgELT_ELEMENT, fullNameId)) { + if (fGlobalDeclarations[ENUM_ELT_ELEMENT]->containsElement(fullNameId)) { reportSchemaError(child, XMLUni::fgXMLErrDomain, XMLErrs::DuplicateGlobalDeclaration, SchemaSymbols::fgELT_ELEMENT, typeName); continue; } else { - fGlobalDeclarations->put((void*) SchemaSymbols::fgELT_ELEMENT, fullNameId, 0); + fGlobalDeclarations[ENUM_ELT_ELEMENT]->addElement(fullNameId); } } @@ -4198,14 +4209,14 @@ else if (XMLString::equals(name, SchemaSymbols::fgELT_ATTRIBUTEGROUP)) { if (typeName && *typeName) { - if (fGlobalDeclarations->containsKey(SchemaSymbols::fgELT_ATTRIBUTEGROUP, fullNameId)) { + if (fGlobalDeclarations[ENUM_ELT_ATTRIBUTEGROUP]->containsElement(fullNameId)) { reportSchemaError(child, XMLUni::fgXMLErrDomain, XMLErrs::DuplicateGlobalDeclaration, SchemaSymbols::fgELT_ATTRIBUTEGROUP, typeName); continue; } else { - fGlobalDeclarations->put((void*) SchemaSymbols::fgELT_ATTRIBUTEGROUP, fullNameId, 0); + fGlobalDeclarations[ENUM_ELT_ATTRIBUTEGROUP]->addElement(fullNameId); } } @@ -4216,13 +4227,13 @@ else if (XMLString::equals(name, SchemaSymbols::fgELT_ATTRIBUTE)) { if (typeName && *typeName) { - if (fGlobalDeclarations->containsKey(SchemaSymbols::fgELT_ATTRIBUTE, fullNameId)) { + if (fGlobalDeclarations[ENUM_ELT_ATTRIBUTE]->containsElement(fullNameId)) { reportSchemaError(child, XMLUni::fgXMLErrDomain, XMLErrs::DuplicateAttribute, typeName); continue; } else { - fGlobalDeclarations->put((void*) SchemaSymbols::fgELT_ATTRIBUTE, fullNameId, 0); + fGlobalDeclarations[ENUM_ELT_ATTRIBUTE]->addElement(fullNameId); } } @@ -4233,14 +4244,14 @@ else if (XMLString::equals(name, SchemaSymbols::fgELT_GROUP)) { if (typeName && *typeName) { - if (fGlobalDeclarations->containsKey(SchemaSymbols::fgELT_GROUP, fullNameId)) { + if (fGlobalDeclarations[ENUM_ELT_GROUP]->containsElement(fullNameId)) { reportSchemaError(child, XMLUni::fgXMLErrDomain, XMLErrs::DuplicateGlobalDeclaration, SchemaSymbols::fgELT_GROUP, typeName); continue; } else { - fGlobalDeclarations->put((void*) SchemaSymbols::fgELT_GROUP, fullNameId, 0); + fGlobalDeclarations[ENUM_ELT_GROUP]->addElement(fullNameId); } } @@ -7819,7 +7830,11 @@ fEmptyNamespaceURI = fScanner->getEmptyNamespaceId(); fCurrentTypeNameStack = new ValueVectorOf<unsigned int>(8); fCurrentGroupStack = new ValueVectorOf<unsigned int>(8); - fGlobalDeclarations = new RefHash2KeysTableOf<XMLCh>(29, false); + + fGlobalDeclarations = new ValueVectorOf<unsigned int>*[ENUM_ELT_SIZE]; + for(unsigned int i=0; i < ENUM_ELT_SIZE; i++) + fGlobalDeclarations[i] = new ValueVectorOf<unsigned int>(8); + fNotationRegistry = new RefHash2KeysTableOf<XMLCh>(13, false); fSchemaInfoList = new RefHash2KeysTableOf<SchemaInfo>(29); fPreprocessedNodes = new RefHashTableOf<SchemaInfo>(29, false, new HashPtr()); @@ -7832,7 +7847,12 @@ delete fSchemaInfoList; delete fCurrentTypeNameStack; delete fCurrentGroupStack; - delete fGlobalDeclarations; + + for(unsigned int i=0; i < ENUM_ELT_SIZE; i++) + delete fGlobalDeclarations[i]; + + delete [] fGlobalDeclarations; + delete fNotationRegistry; delete fRedefineComponents; delete fIdentityConstraintNames; 1.19 +13 -13 xml-xerces/c/src/xercesc/validators/schema/TraverseSchema.hpp Index: TraverseSchema.hpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/schema/TraverseSchema.hpp,v retrieving revision 1.18 retrieving revision 1.19 diff -u -r1.18 -r1.19 --- TraverseSchema.hpp 13 Dec 2002 21:16:11 -0000 1.18 +++ TraverseSchema.hpp 3 Jan 2003 16:38:21 -0000 1.19 @@ -128,11 +128,11 @@ ~TraverseSchema(); private: - // This enumeration is defined here for compatibility with the CodeWarrior - // compiler, which apparently doesn't like to accept default parameter - // arguments that it hasn't yet seen. The Not_All_Context argument is - // used in the declaration of checkMinMax, below. - // + // This enumeration is defined here for compatibility with the CodeWarrior + // compiler, which apparently doesn't like to accept default parameter + // arguments that it hasn't yet seen. The Not_All_Context argument is + // used in the declaration of checkMinMax, below. + // // Flags indicate any special restrictions on minOccurs and maxOccurs // relating to "all". // Not_All_Context - not processing an <all> @@ -749,7 +749,8 @@ RefHashTableOf<ComplexTypeInfo>* fComplexTypeRegistry; RefHashTableOf<XercesGroupInfo>* fGroupRegistry; RefHashTableOf<XercesAttGroupInfo>* fAttGroupRegistry; - RefHash2KeysTableOf<SchemaInfo>* fSchemaInfoList; + RefHashTableOf<ElemVector>* fIC_ElementsNS; + RefHashTableOf<SchemaInfo>* fPreprocessedNodes; SchemaInfo* fSchemaInfo; XercesGroupInfo* fCurrentGroupInfo; XercesAttGroupInfo* fCurrentAttGroupInfo; @@ -759,17 +760,16 @@ ValueVectorOf<unsigned int>* fIC_NamespaceDepth; ValueVectorOf<SchemaElementDecl*>* fIC_Elements; ValueVectorOf<const DOMElement*>* fDeclStack; - GeneralAttributeCheck fAttributeCheck; - RefHash2KeysTableOf<XMLCh>* fGlobalDeclarations; + ValueVectorOf<unsigned int>** fGlobalDeclarations; + RefHashTableOf<ValueVectorOf<DOMElement*> >* fIC_NodeListNS; + RefHashTableOf<ValueVectorOf<unsigned int> >* fIC_NamespaceDepthNS; RefHash2KeysTableOf<XMLCh>* fNotationRegistry; RefHash2KeysTableOf<XMLCh>* fRedefineComponents; RefHash2KeysTableOf<IdentityConstraint>* fIdentityConstraintNames; RefHash2KeysTableOf<ElemVector>* fValidSubstitutionGroups; - RefHashTableOf<ValueVectorOf<DOMElement*> >* fIC_NodeListNS; - RefHashTableOf<ElemVector>* fIC_ElementsNS; - RefHashTableOf<ValueVectorOf<unsigned int> >* fIC_NamespaceDepthNS; + RefHash2KeysTableOf<SchemaInfo>* fSchemaInfoList; + GeneralAttributeCheck fAttributeCheck; XSDDOMParser* fParser; - RefHashTableOf<SchemaInfo>* fPreprocessedNodes; XSDErrorReporter fXSDErrorReporter; XSDLocator* fLocator;
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]