peiyongz 2003/07/31 10:14:27 Modified: c/src/xercesc/validators/schema SchemaValidator.cpp SubstitutionGroupComparator.cpp TraverseSchema.cpp XMLSchemaDescriptionImpl.cpp XMLSchemaDescriptionImpl.hpp Log: Grammar embed grammar description Revision Changes Path 1.35 +7 -8 xml-xerces/c/src/xercesc/validators/schema/SchemaValidator.cpp Index: SchemaValidator.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/schema/SchemaValidator.cpp,v retrieving revision 1.34 retrieving revision 1.35 diff -u -r1.34 -r1.35 --- SchemaValidator.cpp 25 Jun 2003 22:38:18 -0000 1.34 +++ SchemaValidator.cpp 31 Jul 2003 17:14:27 -0000 1.35 @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.35 2003/07/31 17:14:27 peiyongz + * Grammar embed grammar description + * * Revision 1.34 2003/06/25 22:38:18 peiyongz * to use new GrammarResolver::getGrammar() * @@ -793,9 +796,7 @@ // retrieve Grammar for the uri const XMLCh* uriStr = getScanner()->getURIText(uri); - XMLSchemaDescription* gramDesc = fGrammarResolver->getGrammarPool()->createSchemaDescription(uriStr); - Janitor<XMLSchemaDescription> janName(gramDesc); - SchemaGrammar* sGrammar = (SchemaGrammar*) fGrammarResolver->getGrammar(gramDesc); + SchemaGrammar* sGrammar = (SchemaGrammar*) fGrammarResolver->getGrammar(uriStr); if (!sGrammar) { // Check built-in simple types @@ -993,10 +994,10 @@ // And enumerate all the complextype info in the grammar // and do Unique Particle Attribution Checking - RefHashTableOfEnumerator<GrammarEntry> grammarEnum = fGrammarResolver->getGrammarEnumerator(); + RefHashTableOfEnumerator<Grammar> grammarEnum = fGrammarResolver->getGrammarEnumerator(); while (grammarEnum.hasMoreElements()) { - SchemaGrammar& sGrammar = (SchemaGrammar&) *(grammarEnum.nextElement().getGrammar()); + SchemaGrammar& sGrammar = (SchemaGrammar&) grammarEnum.nextElement(); if (sGrammar.getGrammarType() != Grammar::SchemaGrammarType || sGrammar.getValidated()) continue; @@ -1697,9 +1698,7 @@ const XMLCh* schemaURI = getScanner()->getURIStringPool()->getValueForId(derivedURI); if (derivedURI != getScanner()->getEmptyNamespaceId()) { - XMLSchemaDescription* gramDesc = fGrammarResolver->getGrammarPool()->createSchemaDescription(schemaURI); - Janitor<XMLSchemaDescription> janName(gramDesc); - aGrammar= (SchemaGrammar*) fGrammarResolver->getGrammar(gramDesc); + aGrammar= (SchemaGrammar*) fGrammarResolver->getGrammar(schemaURI); } if (!aGrammar) { //something is wrong 1.8 +4 -3 xml-xerces/c/src/xercesc/validators/schema/SubstitutionGroupComparator.cpp Index: SubstitutionGroupComparator.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/schema/SubstitutionGroupComparator.cpp,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- SubstitutionGroupComparator.cpp 25 Jun 2003 22:38:18 -0000 1.7 +++ SubstitutionGroupComparator.cpp 31 Jul 2003 17:14:27 -0000 1.8 @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.8 2003/07/31 17:14:27 peiyongz + * Grammar embed grammar description + * * Revision 1.7 2003/06/25 22:38:18 peiyongz * to use new GrammarResolver::getGrammar() * @@ -164,9 +167,7 @@ if (!uri) return false; - XMLSchemaDescription* gramDesc = fGrammarResolver->getGrammarPool()->createSchemaDescription(uri); - Janitor<XMLSchemaDescription> janName(gramDesc); - SchemaGrammar *sGrammar = (SchemaGrammar*) fGrammarResolver->getGrammar(gramDesc); + SchemaGrammar *sGrammar = (SchemaGrammar*) fGrammarResolver->getGrammar(uri); if (!sGrammar || sGrammar->getGrammarType() == Grammar::DTDGrammarType) return false; 1.84 +29 -52 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.83 retrieving revision 1.84 diff -u -r1.83 -r1.84 --- TraverseSchema.cpp 10 Jul 2003 19:58:57 -0000 1.83 +++ TraverseSchema.cpp 31 Jul 2003 17:14:27 -0000 1.84 @@ -380,12 +380,14 @@ fTargetNSURIString = fSchemaGrammar->getTargetNamespace(); fTargetNSURI = fURIStringPool->addOrFind(fTargetNSURIString); - XMLSchemaDescription* gramDesc = fGrammarResolver->getGrammarPool()->createSchemaDescription(fTargetNSURIString); - fGrammarResolver->putGrammar(gramDesc, fSchemaGrammar); + XMLSchemaDescription* gramDesc = (XMLSchemaDescription*) fSchemaGrammar->getGrammarDescription(); + gramDesc->setTargetNamespace(fTargetNSURIString); + + fGrammarResolver->putGrammar(fSchemaGrammar); fAttributeCheck.setIDRefList(fSchemaGrammar->getIDRefList()); // Save current schema info - SchemaInfo* currInfo = new (fGrammarPoolMemoryManager) SchemaInfo(0, 0, 0, fTargetNSURI, fScopeCount, + SchemaInfo* currInfo = new (fMemoryManager) SchemaInfo(0, 0, 0, fTargetNSURI, fScopeCount, fNamespaceScope->increaseDepth(), XMLString::replicate(schemaURL, fGrammarPoolMemoryManager), fTargetNSURIString, schemaRoot, @@ -576,7 +578,7 @@ // -------------------------------------------------------- SchemaInfo* saveInfo = fSchemaInfo; - fSchemaInfo = new (fGrammarPoolMemoryManager) SchemaInfo(0, 0, 0, fTargetNSURI, fScopeCount, + fSchemaInfo = new (fMemoryManager) SchemaInfo(0, 0, 0, fTargetNSURI, fScopeCount, fNamespaceScope->increaseDepth(), XMLString::replicate(includeURL, fGrammarPoolMemoryManager), fTargetNSURIString, root, @@ -660,6 +662,8 @@ { XMLSchemaDescription* gramDesc = fGrammarResolver->getGrammarPool()->createSchemaDescription(nameSpace); Janitor<XMLSchemaDescription> janName(gramDesc); + gramDesc->setContextType(XMLSchemaDescription::CONTEXT_IMPORT); + gramDesc->setLocationHints(getElementAttValue(elem, SchemaSymbols::fgATT_SCHEMALOCATION)); aGrammar = fGrammarResolver->getGrammar(gramDesc); } @@ -756,6 +760,10 @@ // -------------------------------------------------------- SchemaInfo* saveInfo = fSchemaInfo; fSchemaGrammar = new (fGrammarPoolMemoryManager) SchemaGrammar(fGrammarPoolMemoryManager); + XMLSchemaDescription* gramDesc = (XMLSchemaDescription*) fSchemaGrammar->getGrammarDescription(); + gramDesc->setContextType(XMLSchemaDescription::CONTEXT_IMPORT); + gramDesc->setLocationHints(importURL); + preprocessSchema(root, importURL); fPreprocessedNodes->put((void*) elem, fSchemaInfo); @@ -1633,9 +1641,7 @@ // ------------------------------------------------------------------ // Get grammar information // ------------------------------------------------------------------ - XMLSchemaDescription* gramDesc = fGrammarResolver->getGrammarPool()->createSchemaDescription(uriStr); - Janitor<XMLSchemaDescription> janName(gramDesc); - Grammar* aGrammar = fGrammarResolver->getGrammar(gramDesc); + Grammar* aGrammar = fGrammarResolver->getGrammar(uriStr); if (!aGrammar || aGrammar->getGrammarType() != Grammar::SchemaGrammarType) { @@ -2545,9 +2551,7 @@ if (!subsElements && fTargetNSURI != subsElemURI) { - XMLSchemaDescription* gramDesc = fGrammarResolver->getGrammarPool()->createSchemaDescription(fURIStringPool->getValueForId(subsElemURI)); - Janitor<XMLSchemaDescription> janName(gramDesc); - SchemaGrammar* aGrammar = (SchemaGrammar*) fGrammarResolver->getGrammar(gramDesc); + SchemaGrammar* aGrammar = (SchemaGrammar*) fGrammarResolver->getGrammar(fURIStringPool->getValueForId(subsElemURI)); if (aGrammar) { subsElements = aGrammar->getValidSubstitutionGroups()->get(subsElemBaseName, subsElemURI); @@ -2578,9 +2582,7 @@ while (importingEnum.hasMoreElements()) { const SchemaInfo& curRef = importingEnum.nextElement(); - XMLSchemaDescription* gramDesc = fGrammarResolver->getGrammarPool()->createSchemaDescription(curRef.getTargetNSURIString()); - Janitor<XMLSchemaDescription> janName(gramDesc); - SchemaGrammar* aGrammar = (SchemaGrammar*) fGrammarResolver->getGrammar(gramDesc); + SchemaGrammar* aGrammar = (SchemaGrammar*) fGrammarResolver->getGrammar(curRef.getTargetNSURIString()); ValueVectorOf<SchemaElementDecl*>* subsElemList = aGrammar->getValidSubstitutionGroups()->get(subsElemBaseName, subsElemURI); @@ -2809,9 +2811,7 @@ return 0; } - XMLSchemaDescription* gramDesc = fGrammarResolver->getGrammarPool()->createSchemaDescription(uriStr); - Janitor<XMLSchemaDescription> janName(gramDesc); - Grammar* grammar = fGrammarResolver->getGrammar(gramDesc); + Grammar* grammar = fGrammarResolver->getGrammar(uriStr); if (grammar == 0 || grammar->getGrammarType() != Grammar::SchemaGrammarType) { @@ -4483,9 +4483,7 @@ if ((uriStr && *uriStr) && !XMLString::equals(uriStr, fTargetNSURIString)) { - XMLSchemaDescription* gramDesc = fGrammarResolver->getGrammarPool()->createSchemaDescription(uriStr); - Janitor<XMLSchemaDescription> janName(gramDesc); - Grammar* grammar = fGrammarResolver->getGrammar(gramDesc); + Grammar* grammar = fGrammarResolver->getGrammar(uriStr); if (grammar && grammar->getGrammarType() == Grammar::SchemaGrammarType) { dv = ((SchemaGrammar*) grammar)->getDatatypeRegistry()->getDatatypeValidator(fBuffer.getRawBuffer()); @@ -5006,9 +5004,7 @@ if (!fSchemaInfo->isImportingNS(uriId)) return 0; - XMLSchemaDescription* gramDesc = fGrammarResolver->getGrammarPool()->createSchemaDescription(typeURI); - Janitor<XMLSchemaDescription> janName(gramDesc); - Grammar* aGrammar = fGrammarResolver->getGrammar(gramDesc); + Grammar* aGrammar = fGrammarResolver->getGrammar(typeURI); if (!aGrammar || aGrammar->getGrammarType() != Grammar::SchemaGrammarType) { return 0; @@ -5083,9 +5079,7 @@ 0, Grammar::TOP_LEVEL_SCOPE, wasAdded); } - XMLSchemaDescription* gramDesc = fGrammarResolver->getGrammarPool()->createSchemaDescription(nameURI); - Janitor<XMLSchemaDescription> janName(gramDesc); - Grammar* grammar = fGrammarResolver->getGrammar(gramDesc); + Grammar* grammar = fGrammarResolver->getGrammar(nameURI); if (grammar && grammar->getGrammarType() == Grammar::SchemaGrammarType) { elemDecl = (SchemaElementDecl*) @@ -5385,9 +5379,7 @@ return; } - XMLSchemaDescription* gramDesc = fGrammarResolver->getGrammarPool()->createSchemaDescription(uriStr); - Janitor<XMLSchemaDescription> janName(gramDesc); - Grammar* grammar = fGrammarResolver->getGrammar(gramDesc); + Grammar* grammar = fGrammarResolver->getGrammar(uriStr); if (grammar == 0 || grammar->getGrammarType() != Grammar::SchemaGrammarType) { @@ -6088,9 +6080,7 @@ const XMLCh* const localPart) { - XMLSchemaDescription* gramDesc = fGrammarResolver->getGrammarPool()->createSchemaDescription(uriStr); - Janitor<XMLSchemaDescription> janName(gramDesc); - Grammar* grammar = fGrammarResolver->getGrammar(gramDesc); + Grammar* grammar = fGrammarResolver->getGrammar(uriStr); if (grammar != 0 && grammar->getGrammarType() == Grammar::SchemaGrammarType) { @@ -6398,9 +6388,7 @@ int targetNSURI = toRestore->getTargetNSURI(); - XMLSchemaDescription* gramDesc = fGrammarResolver->getGrammarPool()->createSchemaDescription(toRestore->getTargetNSURIString()); - Janitor<XMLSchemaDescription> janName(gramDesc); - fSchemaGrammar = (SchemaGrammar*) fGrammarResolver->getGrammar(gramDesc); + fSchemaGrammar = (SchemaGrammar*) fGrammarResolver->getGrammar(toRestore->getTargetNSURIString()); if (!fSchemaGrammar) { return; @@ -6496,9 +6484,7 @@ break; // an error must have occured } - XMLSchemaDescription* gramDesc = fGrammarResolver->getGrammarPool()->createSchemaDescription(fURIStringPool->getValueForId(chainElemURI)); - Janitor<XMLSchemaDescription> janName(gramDesc); - SchemaGrammar* aGrammar = (SchemaGrammar*) fGrammarResolver->getGrammar(gramDesc); + SchemaGrammar* aGrammar = (SchemaGrammar*) fGrammarResolver->getGrammar(fURIStringPool->getValueForId(chainElemURI)); if (!aGrammar) break; @@ -6527,9 +6513,7 @@ while (importingEnum.hasMoreElements()) { const SchemaInfo& curRef = importingEnum.nextElement(); - XMLSchemaDescription* gramDesc = fGrammarResolver->getGrammarPool()->createSchemaDescription(curRef.getTargetNSURIString()); - Janitor<XMLSchemaDescription> janName(gramDesc); - SchemaGrammar* aGrammar = (SchemaGrammar*) fGrammarResolver->getGrammar(gramDesc); + SchemaGrammar* aGrammar = (SchemaGrammar*) fGrammarResolver->getGrammar(curRef.getTargetNSURIString()); ValueVectorOf<SchemaElementDecl*>* subsElemList = aGrammar->getValidSubstitutionGroups()->get(chainElemName, chainElemURI); @@ -6563,9 +6547,7 @@ return; // an error must have occured } - XMLSchemaDescription* gramDesc = fGrammarResolver->getGrammarPool()->createSchemaDescription(fURIStringPool->getValueForId(subsElemURI)); - Janitor<XMLSchemaDescription> janName(gramDesc); - SchemaGrammar* aGrammar = (SchemaGrammar*) fGrammarResolver->getGrammar(gramDesc); + SchemaGrammar* aGrammar = (SchemaGrammar*) fGrammarResolver->getGrammar(fURIStringPool->getValueForId(subsElemURI)); if (!aGrammar) return; @@ -6651,9 +6633,7 @@ return 0; } - XMLSchemaDescription* gramDesc = fGrammarResolver->getGrammarPool()->createSchemaDescription(uriStr); - Janitor<XMLSchemaDescription> janName(gramDesc); - Grammar* aGrammar = fGrammarResolver->getGrammar(gramDesc); + Grammar* aGrammar = fGrammarResolver->getGrammar(uriStr); if (!aGrammar || aGrammar->getGrammarType() != Grammar::SchemaGrammarType) { @@ -6837,10 +6817,7 @@ if (elemScope != Grammar::TOP_LEVEL_SCOPE) { if (elemURI != fTargetNSURI && elemURI != schemaURI && elemURI != fEmptyNamespaceURI) { - - XMLSchemaDescription* gramDesc = fGrammarResolver->getGrammarPool()->createSchemaDescription(fURIStringPool->getValueForId(elemURI)); - Janitor<XMLSchemaDescription> janName(gramDesc); - Grammar* aGrammar = fGrammarResolver->getGrammar(gramDesc); + Grammar* aGrammar = fGrammarResolver->getGrammar(fURIStringPool->getValueForId(elemURI)); if (!aGrammar || aGrammar->getGrammarType() != Grammar::SchemaGrammarType) { continue; // REVISIT - error message @@ -7624,7 +7601,7 @@ // Update schema information with redefined schema // -------------------------------------------------------- redefSchemaInfo = fSchemaInfo; - fSchemaInfo = new (fGrammarPoolMemoryManager) SchemaInfo(0, 0, 0, fTargetNSURI, fScopeCount, + fSchemaInfo = new (fMemoryManager) SchemaInfo(0, 0, 0, fTargetNSURI, fScopeCount, fNamespaceScope->increaseDepth(), XMLString::replicate(includeURL, fGrammarPoolMemoryManager), fTargetNSURIString, root, 1.3 +15 -16 xml-xerces/c/src/xercesc/validators/schema/XMLSchemaDescriptionImpl.cpp Index: XMLSchemaDescriptionImpl.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/schema/XMLSchemaDescriptionImpl.cpp,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- XMLSchemaDescriptionImpl.cpp 20 Jun 2003 22:19:12 -0000 1.2 +++ XMLSchemaDescriptionImpl.cpp 31 Jul 2003 17:14:27 -0000 1.3 @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.3 2003/07/31 17:14:27 peiyongz + * Grammar embed grammar description + * * Revision 1.2 2003/06/20 22:19:12 peiyongz * Stateless Grammar Pool :: Part I * @@ -71,6 +74,7 @@ // Includes // --------------------------------------------------------------------------- #include <xercesc/validators/schema/XMLSchemaDescriptionImpl.hpp> +#include <xercesc/util/QName.hpp> XERCES_CPP_NAMESPACE_BEGIN @@ -90,8 +94,10 @@ if (targetNamespace) fNamespace = XMLString::replicate(targetNamespace, memMgr); + + fLocationHints = new (memMgr) RefArrayVectorOf<XMLCh>(4, true, memMgr); + /*** - fLocationHints fAttributes ***/ } @@ -110,9 +116,6 @@ if (fEnclosingElementName) delete fEnclosingElementName; - if (fAttributes) - delete fAttributes; - } const XMLCh* XMLSchemaDescriptionImpl::getGrammarKey() const @@ -163,12 +166,9 @@ fNamespace = XMLString::replicate(newNamespace, XMLGrammarDescription::getMemoryManager()); } -void XMLSchemaDescriptionImpl::setLocationHints(RefArrayVectorOf<XMLCh> *hints) -{ - if (fLocationHints) - delete fLocationHints; - - fLocationHints = hints; +void XMLSchemaDescriptionImpl::setLocationHints(const XMLCh* const hint) +{ + fLocationHints->addElement(XMLString::replicate(hint, XMLGrammarDescription::getMemoryManager())); } void XMLSchemaDescriptionImpl::setTriggeringComponent(QName* const trigComponent) @@ -176,7 +176,7 @@ if ( fTriggeringComponent) delete fTriggeringComponent; - fTriggeringComponent = trigComponent; + fTriggeringComponent = new QName(*trigComponent); } @@ -185,15 +185,14 @@ if (fEnclosingElementName) delete fEnclosingElementName; - fEnclosingElementName = encElement; + fEnclosingElementName = new QName(*encElement); } void XMLSchemaDescriptionImpl::setAttributes(XMLAttDef* const attDefs) { - if (fAttributes) - delete fAttributes; - + // XMLAttDef is part of the grammar that this description refers to + // so we reference to it instead of adopting/owning/cloning. fAttributes = attDefs; } 1.2 +11 -8 xml-xerces/c/src/xercesc/validators/schema/XMLSchemaDescriptionImpl.hpp Index: XMLSchemaDescriptionImpl.hpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/schema/XMLSchemaDescriptionImpl.hpp,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- XMLSchemaDescriptionImpl.hpp 20 Jun 2003 18:40:29 -0000 1.1 +++ XMLSchemaDescriptionImpl.hpp 31 Jul 2003 17:14:27 -0000 1.2 @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.2 2003/07/31 17:14:27 peiyongz + * Grammar embed grammar description + * * Revision 1.1 2003/06/20 18:40:29 peiyongz * Stateless Grammar Pool :: Part I * @@ -156,7 +159,7 @@ * setLocationHints * */ - virtual void setLocationHints(RefArrayVectorOf<XMLCh>* const); + virtual void setLocationHints(const XMLCh* const); /** * setTriggeringComponent @@ -195,15 +198,15 @@ // // fContextType // - // fNamespace + // fNamespace owned // - // fLocationHints + // fLocationHints owned // - // fTriggeringComponent + // fTriggeringComponent owned // - // fEnclosingElementName + // fEnclosingElementName owned // - // fAttributes + // fAttributes referenced // // -----------------------------------------------------------------------
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]