cargilld 2004/05/04 12:02:41 Modified: c/src/xercesc/framework/psvi XSAttributeDeclaration.cpp XSAttributeDeclaration.hpp XSElementDeclaration.cpp XSElementDeclaration.hpp XSModel.cpp XSModel.hpp XSObject.cpp XSObject.hpp Log: Enable IDs to work on all kinds of schema components Revision Changes Path 1.13 +4 -7 xml-xerces/c/src/xercesc/framework/psvi/XSAttributeDeclaration.cpp Index: XSAttributeDeclaration.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/framework/psvi/XSAttributeDeclaration.cpp,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- XSAttributeDeclaration.cpp 29 Jan 2004 11:46:30 -0000 1.12 +++ XSAttributeDeclaration.cpp 4 May 2004 19:02:40 -0000 1.13 @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.13 2004/05/04 19:02:40 cargilld + * Enable IDs to work on all kinds of schema components + * * Revision 1.12 2004/01/29 11:46:30 cargilld * Code cleanup changes to get rid of various compiler diagnostic messages. * @@ -121,8 +124,7 @@ : XSObject(XSConstants::ATTRIBUTE_DECLARATION, xsModel, manager) , fAttDef(attDef) , fTypeDefinition(typeDef) - , fAnnotation(annot) - , fId(0) + , fAnnotation(annot) , fScope(scope) , fEnclosingCTDefinition(enclosingCTDefinition) { @@ -149,11 +151,6 @@ XSNamespaceItem *XSAttributeDeclaration::getNamespaceItem() { return fXSModel->getNamespaceItem(getNamespace()); -} - -unsigned int XSAttributeDeclaration::getId() const -{ - return fId; } // --------------------------------------------------------------------------- 1.9 +3 -17 xml-xerces/c/src/xercesc/framework/psvi/XSAttributeDeclaration.hpp Index: XSAttributeDeclaration.hpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/framework/psvi/XSAttributeDeclaration.hpp,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- XSAttributeDeclaration.hpp 24 Dec 2003 17:42:02 -0000 1.8 +++ XSAttributeDeclaration.hpp 4 May 2004 19:02:40 -0000 1.9 @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.9 2004/05/04 19:02:40 cargilld + * Enable IDs to work on all kinds of schema components + * * Revision 1.8 2003/12/24 17:42:02 knoaman * Misc. PSVI updates * @@ -169,13 +172,6 @@ */ XSNamespaceItem* getNamespaceItem(); - /** - * Return a unique identifier for a component within this XSModel, to - * optimize querying. - * @return id unique for this type of component within this XSModel. - */ - unsigned int getId() const; - //@} /** @name XSAttributeDeclaration methods **/ @@ -222,10 +218,6 @@ /** methods needed by implementation */ //@{ - /** - * Set the id to be returned on getId(). - */ - void setId(unsigned int id); bool getRequired() const; //@} @@ -249,7 +241,6 @@ SchemaAttDef* fAttDef; XSSimpleTypeDefinition* fTypeDefinition; XSAnnotation* fAnnotation; - unsigned int fId; XSConstants::SCOPE fScope; XSComplexTypeDefinition* fEnclosingCTDefinition; }; @@ -260,11 +251,6 @@ inline XSSimpleTypeDefinition* XSAttributeDeclaration::getTypeDefinition() const { return fTypeDefinition; -} - -inline void XSAttributeDeclaration::setId(unsigned int id) -{ - fId = id; } inline XSAnnotation *XSAttributeDeclaration::getAnnotation() const 1.11 +3 -6 xml-xerces/c/src/xercesc/framework/psvi/XSElementDeclaration.cpp Index: XSElementDeclaration.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/framework/psvi/XSElementDeclaration.cpp,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- XSElementDeclaration.cpp 15 Dec 2003 17:23:48 -0000 1.10 +++ XSElementDeclaration.cpp 4 May 2004 19:02:40 -0000 1.11 @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.11 2004/05/04 19:02:40 cargilld + * Enable IDs to work on all kinds of schema components + * * Revision 1.10 2003/12/15 17:23:48 cargilld * psvi updates; cleanup revisits and bug fixes * @@ -119,7 +122,6 @@ : XSObject(XSConstants::ELEMENT_DECLARATION, xsModel, manager) , fDisallowedSubstitutions(0) , fSubstitutionGroupExclusions(0) - , fId(0) , fScope(elemScope) , fSchemaElementDecl(schemaElementDecl) , fTypeDefinition(typeDefinition) @@ -177,11 +179,6 @@ XSNamespaceItem *XSElementDeclaration::getNamespaceItem() { return fXSModel->getNamespaceItem(getNamespace()); -} - -unsigned int XSElementDeclaration::getId() const -{ - return fId; } 1.10 +4 -18 xml-xerces/c/src/xercesc/framework/psvi/XSElementDeclaration.hpp Index: XSElementDeclaration.hpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/framework/psvi/XSElementDeclaration.hpp,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- XSElementDeclaration.hpp 24 Dec 2003 17:42:02 -0000 1.9 +++ XSElementDeclaration.hpp 4 May 2004 19:02:40 -0000 1.10 @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.10 2004/05/04 19:02:40 cargilld + * Enable IDs to work on all kinds of schema components + * * Revision 1.9 2003/12/24 17:42:02 knoaman * Misc. PSVI updates * @@ -176,13 +179,6 @@ */ XSNamespaceItem *getNamespaceItem(); - /** - * Return a unique identifier for a component within this XSModel, to - * optimize querying. - * @return id unique for this type of component within this XSModel. - */ - unsigned int getId() const; - //@} //--------------------- @@ -297,10 +293,6 @@ /** methods needed by implementation */ //@{ - /** - * Set the id to be returned on getId(). - */ - void setId(unsigned int id); void setTypeDefinition(XSTypeDefinition* typeDefinition); @@ -322,8 +314,7 @@ // data members // ----------------------------------------------------------------------- short fDisallowedSubstitutions; - short fSubstitutionGroupExclusions; - unsigned int fId; + short fSubstitutionGroupExclusions; XSConstants::SCOPE fScope; SchemaElementDecl* fSchemaElementDecl; XSTypeDefinition* fTypeDefinition; @@ -361,11 +352,6 @@ inline XSAnnotation *XSElementDeclaration::getAnnotation() const { return fAnnotation; -} - -inline void XSElementDeclaration::setId(unsigned int id) -{ - fId = id; } inline XSConstants::SCOPE XSElementDeclaration::getScope() const 1.21 +23 -34 xml-xerces/c/src/xercesc/framework/psvi/XSModel.cpp Index: XSModel.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/framework/psvi/XSModel.cpp,v retrieving revision 1.20 retrieving revision 1.21 diff -u -r1.20 -r1.21 --- XSModel.cpp 5 Feb 2004 18:09:53 -0000 1.20 +++ XSModel.cpp 4 May 2004 19:02:40 -0000 1.21 @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.21 2004/05/04 19:02:40 cargilld + * Enable IDs to work on all kinds of schema components + * * Revision 1.20 2004/02/05 18:09:53 cargilld * Fix a seg fault with PSVI and set basetype of anysimpletype to be anytype. * @@ -149,8 +152,6 @@ : fMemoryManager(manager) , fNamespaceStringList(0) , fXSNamespaceItemList(0) - , fElementDeclarationVector(0) - , fAttributeDeclarationVector(0) , fURIStringPool(0) , fXSAnnotationList(0) , fHashNamespace(0) @@ -195,13 +196,12 @@ fComponentMap[i] = 0; break; } + fIdVector[i] = new (fMemoryManager) RefVectorOf<XSObject>(30, false, fMemoryManager); } fNamespaceStringList = new (manager) RefArrayVectorOf <XMLCh>(10, true, manager); fXSNamespaceItemList = new (manager) RefVectorOf <XSNamespaceItem>(10, true, manager); fXSAnnotationList = new (manager) RefVectorOf <XSAnnotation> (10, false, manager); - fElementDeclarationVector = new (manager) RefVectorOf<XSElementDeclaration> (30, false, manager); - fAttributeDeclarationVector = new (manager) RefVectorOf<XSAttributeDeclaration> (20, false, manager); fHashNamespace = new (manager) RefHashTableOf<XSNamespaceItem> (11, false, manager); // Loop through all grammars in the grammar pool to create the XSNamespaceItem's @@ -262,8 +262,6 @@ : fMemoryManager(manager) , fNamespaceStringList(0) , fXSNamespaceItemList(0) - , fElementDeclarationVector(0) - , fAttributeDeclarationVector(0) , fURIStringPool(0) , fXSAnnotationList(0) , fHashNamespace(0) @@ -309,14 +307,13 @@ fComponentMap[i] = 0; break; } + fIdVector[i] = new (fMemoryManager) RefVectorOf<XSObject>(30, false, fMemoryManager); } fNamespaceStringList = new (manager) RefArrayVectorOf <XMLCh>(10, true, manager); fXSNamespaceItemList = new (manager) RefVectorOf <XSNamespaceItem>(10, false, manager); fDeleteNamespace = new (manager) RefVectorOf <XSNamespaceItem>(10, true, manager); - fXSAnnotationList = new (manager) RefVectorOf <XSAnnotation> (10, false, manager); - fElementDeclarationVector = new (manager) RefVectorOf<XSElementDeclaration> (30, false, manager); - fAttributeDeclarationVector = new (manager) RefVectorOf<XSAttributeDeclaration> (20, false, manager); + fXSAnnotationList = new (manager) RefVectorOf <XSAnnotation> (10, false, manager); fHashNamespace = new (manager) RefHashTableOf<XSNamespaceItem> (11, false, manager); if (fParent) @@ -357,16 +354,12 @@ } break; } + for (unsigned int j=0; j<fParent->fIdVector[i]->size(); j++) + { + fIdVector[i]->addElement(fParent->fIdVector[i]->elementAt(j)); + } } - for (i=0; i<fParent->fElementDeclarationVector->size(); i++) - { - fElementDeclarationVector->addElement(fParent->fElementDeclarationVector->elementAt(i)); - } - for (i=0; i<fParent->fAttributeDeclarationVector->size(); i++) - { - fAttributeDeclarationVector->addElement(fParent->fAttributeDeclarationVector->elementAt(i)); - } for (i=0; i<fParent->fXSAnnotationList->size(); i++) { fXSAnnotationList->addElement(fParent->fXSAnnotationList->elementAt(i)); @@ -446,6 +439,7 @@ delete fComponentMap[i]; break; } + delete fIdVector[i]; } delete fNamespaceStringList; @@ -453,8 +447,6 @@ delete fXSAnnotationList; delete fHashNamespace; delete fObjFactory; - delete fElementDeclarationVector; - delete fAttributeDeclarationVector; if (fDeleteNamespace) delete fDeleteNamespace; @@ -466,6 +458,14 @@ // --------------------------------------------------------------------------- // XSModel: Helper methods // --------------------------------------------------------------------------- +void XSModel::addComponentToIdVector(XSObject* const component, + int componentIndex) +{ + component->setId(fIdVector[componentIndex]->size()); + fIdVector[componentIndex]->addElement(component); +} + + void XSModel::addComponentToNamespace(XSNamespaceItem* const namespaceItem, XSObject* const component, int componentIndex, @@ -550,8 +550,6 @@ (SchemaAttDef*) &(attrEnum.nextElement()), this ); - xsAttrDecl->setId(fAttributeDeclarationVector->size()); - fAttributeDeclarationVector->addElement(xsAttrDecl); addComponentToNamespace ( namespaceItem, xsAttrDecl, XSConstants::ATTRIBUTE_DECLARATION - 1 @@ -570,8 +568,6 @@ &curElem, this ); - xsElemDecl->setId(fElementDeclarationVector->size()); - fElementDeclarationVector->addElement(xsElemDecl); addComponentToNamespace ( namespaceItem, xsElemDecl, XSConstants::ELEMENT_DECLARATION -1 @@ -665,6 +661,7 @@ { fXSAnnotationList->addElement(annot); namespaceItem->fXSAnnotationList->addElement(annot); + addComponentToIdVector(annot, XSConstants::ANNOTATION); annot = annot->getNext(); } // end of annotation loop } @@ -870,17 +867,9 @@ XSObject *XSModel::getXSObjectById(unsigned int compId , XSConstants::COMPONENT_TYPE compType) { - // only elements & attributes have id's - switch(compType) { - case XSConstants::ELEMENT_DECLARATION: - if (compId < fElementDeclarationVector->size()) - return fElementDeclarationVector->elementAt(compId); - break; - case XSConstants::ATTRIBUTE_DECLARATION: - if (compId < fAttributeDeclarationVector->size()) - return fAttributeDeclarationVector->elementAt(compId); - break; - } + if (compId < fIdVector[compType -1]->size()) + return fIdVector[compType -1]->elementAt(compId); + return 0; } 1.11 +11 -2 xml-xerces/c/src/xercesc/framework/psvi/XSModel.hpp Index: XSModel.hpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/framework/psvi/XSModel.hpp,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- XSModel.hpp 24 Dec 2003 17:42:02 -0000 1.10 +++ XSModel.hpp 4 May 2004 19:02:40 -0000 1.11 @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.11 2004/05/04 19:02:40 cargilld + * Enable IDs to work on all kinds of schema components + * * Revision 1.10 2003/12/24 17:42:02 knoaman * Misc. PSVI updates * @@ -337,6 +340,12 @@ , bool addToXSModel = true ); + void addComponentToIdVector + ( + XSObject* const component + , int componentIndex + ); + // ----------------------------------------------------------------------- // Unimplemented constructors and operators // ----------------------------------------------------------------------- @@ -345,6 +354,7 @@ protected: friend class XSObjectFactory; + friend class XSObject; // ----------------------------------------------------------------------- // data members @@ -356,8 +366,7 @@ StringList* fNamespaceStringList; XSNamespaceItemList* fXSNamespaceItemList; - RefVectorOf<XSElementDeclaration>* fElementDeclarationVector; - RefVectorOf<XSAttributeDeclaration>* fAttributeDeclarationVector; + RefVectorOf<XSObject>* fIdVector[XSConstants::MULTIVALUE_FACET]; /* Need a XSNamedMap for each component top-level? ATTRIBUTE_DECLARATION = 1, 1.9 +14 -1 xml-xerces/c/src/xercesc/framework/psvi/XSObject.cpp Index: XSObject.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/framework/psvi/XSObject.cpp,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- XSObject.cpp 21 Nov 2003 17:34:04 -0000 1.8 +++ XSObject.cpp 4 May 2004 19:02:40 -0000 1.9 @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.9 2004/05/04 19:02:40 cargilld + * Enable IDs to work on all kinds of schema components + * * Revision 1.8 2003/11/21 17:34:04 knoaman * PSVI update * @@ -86,6 +89,7 @@ */ #include <xercesc/framework/psvi/XSObject.hpp> +#include <xercesc/framework/psvi/XSModel.hpp> XERCES_CPP_NAMESPACE_BEGIN @@ -98,7 +102,12 @@ : fComponentType(compType) , fXSModel(xsModel) , fMemoryManager(manager) + , fId(0) { + if (xsModel) + { + xsModel->addComponentToIdVector(this, compType-1); + } } XSObject::~XSObject() @@ -125,9 +134,13 @@ unsigned int XSObject::getId() const { - return 0; + return fId; } +inline void XSObject::setId(unsigned int id) +{ + fId = id; +} XERCES_CPP_NAMESPACE_END 1.11 +10 -2 xml-xerces/c/src/xercesc/framework/psvi/XSObject.hpp Index: XSObject.hpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/framework/psvi/XSObject.hpp,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- XSObject.hpp 1 Dec 2003 23:23:26 -0000 1.10 +++ XSObject.hpp 4 May 2004 19:02:40 -0000 1.11 @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.11 2004/05/04 19:02:40 cargilld + * Enable IDs to work on all kinds of schema components + * * Revision 1.10 2003/12/01 23:23:26 neilg * fix for bug 25118; thanks to Jeroen Witmond * @@ -186,8 +189,12 @@ /** methods needed by implementation */ //@{ - + /** + * Set the id to be returned on getId(). + */ + void setId(unsigned int id); //@} + private: // ----------------------------------------------------------------------- @@ -208,6 +215,7 @@ XSConstants::COMPONENT_TYPE fComponentType; XSModel* fXSModel; MemoryManager* fMemoryManager; + unsigned int fId; }; inline XSConstants::COMPONENT_TYPE XSObject::getType() const
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]