knoaman 2004/07/22 08:00:54
Modified: c/src/xercesc/validators/schema ComplexTypeInfo.hpp
ComplexTypeInfo.cpp
Log:
Eliminate the need to create a temporary content model when performing UPA checking
Revision Changes Path
1.20 +2 -2 xml-xerces/c/src/xercesc/validators/schema/ComplexTypeInfo.hpp
Index: ComplexTypeInfo.hpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/schema/ComplexTypeInfo.hpp,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -r1.19 -r1.20
--- ComplexTypeInfo.hpp 24 Dec 2003 17:42:03 -0000 1.19
+++ ComplexTypeInfo.hpp 22 Jul 2004 15:00:54 -0000 1.20
@@ -403,7 +403,7 @@
inline XMLContentModel* ComplexTypeInfo::getContentModel(const bool checkUPA)
{
- if (!fContentModel)
+ if (!fContentModel && fContentSpec)
fContentModel = makeContentModel(checkUPA);
return fContentModel;
1.27 +19 -29 xml-xerces/c/src/xercesc/validators/schema/ComplexTypeInfo.cpp
Index: ComplexTypeInfo.cpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/schema/ComplexTypeInfo.cpp,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -r1.26 -r1.27
--- ComplexTypeInfo.cpp 29 Jan 2004 11:52:31 -0000 1.26
+++ ComplexTypeInfo.cpp 22 Jul 2004 15:00:54 -0000 1.27
@@ -56,6 +56,9 @@
/*
* $Log$
+ * Revision 1.27 2004/07/22 15:00:54 knoaman
+ * Eliminate the need to create a temporary content model when performing UPA
checking
+ *
* Revision 1.26 2004/01/29 11:52:31 cargilld
* Code cleanup changes to get rid of various compiler diagnostic messages.
*
@@ -396,7 +399,7 @@
delete fAttDefs;
delete fAttList;
delete fElements;
- delete fSpecNodesToDelete;
+ //delete fSpecNodesToDelete;
delete fLocator;
delete fContentModel;
@@ -554,16 +557,12 @@
XMLStringPool* const
pStringPool,
XMLValidator* const
pValidator)
{
- if (fContentSpec) {
- ContentSpecNode* specNode = new (fMemoryManager)
ContentSpecNode(*fContentSpec);
- XMLContentModel* cm = makeContentModel(true, specNode);
-
- if (cm) {
- cm->checkUniqueParticleAttribution(pGrammar, pGrammarResolver,
pStringPool, pValidator, fContentSpecOrgURI);
- delete cm;
+ if (fContentSpec && !fContentModel)
+ {
+ fContentModel = makeContentModel(true);
+ if (fContentModel) {
+ fContentModel->checkUniqueParticleAttribution(pGrammar,
pGrammarResolver, pStringPool, pValidator, fContentSpecOrgURI);
}
-
- fSpecNodesToDelete->removeAllElements();
}
}
@@ -613,31 +612,20 @@
XMLContentModel* ComplexTypeInfo::makeContentModel(const bool checkUPA,
ContentSpecNode* const specNode)
{
- if ((specNode || fContentSpec) && !fSpecNodesToDelete) {
- fSpecNodesToDelete = new (fMemoryManager) RefVectorOf<ContentSpecNode>(8,
true, fMemoryManager);
- }
-
- // expand the content spec first
- ContentSpecNode* aSpecNode = specNode;
+ ContentSpecNode* aSpecNode = new (fMemoryManager)
ContentSpecNode(*fContentSpec);
XMLContentModel* retModel = 0;
- if (aSpecNode) {
+ if (checkUPA) {
fContentSpecOrgURI = (unsigned int*) fMemoryManager->allocate
(
fContentSpecOrgURISize * sizeof(unsigned int)
); //new unsigned int[fContentSpecOrgURISize];
- aSpecNode = convertContentSpecTree(aSpecNode, checkUPA);
- retModel = buildContentModel(aSpecNode);
- fSpecNodesToDelete->addElement(aSpecNode);
- }
- else {
- // building content model for the complex type
- aSpecNode = new (fMemoryManager) ContentSpecNode(*fContentSpec);
- aSpecNode = convertContentSpecTree(aSpecNode, checkUPA);
- retModel = buildContentModel(aSpecNode);
- delete aSpecNode;
}
+ aSpecNode = convertContentSpecTree(aSpecNode, checkUPA);
+ retModel = buildContentModel(aSpecNode);
+
+ delete aSpecNode;
return retModel;
}
@@ -803,12 +791,14 @@
// When checking Unique Particle Attribution, rename leaf elements
if (checkUPA) {
if (curNode->getElement()) {
+ if (fUniqueURI == fContentSpecOrgURISize) {
+ resizeContentSpecOrgURI();
+ }
+
fContentSpecOrgURI[fUniqueURI] = curNode->getElement()->getURI();
curNode->getElement()->setURI(fUniqueURI);
fUniqueURI++;
}
- if (fUniqueURI == fContentSpecOrgURISize)
- resizeContentSpecOrgURI();
}
// Get the spec type of the passed node
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]