gareth      2004/06/09 10:01:48

  Modified:    c/src/xercesc/framework/psvi XSModel.cpp
  Log:
  Fixed null pointer bug. Patch by John Snelson.
  
  Revision  Changes    Path
  1.23      +64 -49    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.22
  retrieving revision 1.23
  diff -u -r1.22 -r1.23
  --- XSModel.cpp       4 May 2004 19:12:42 -0000       1.22
  +++ XSModel.cpp       9 Jun 2004 17:01:48 -0000       1.23
  @@ -56,6 +56,9 @@
   
   /*
    * $Log$
  + * Revision 1.23  2004/06/09 17:01:48  gareth
  + * Fixed null pointer bug. Patch by John Snelson.
  + *
    * Revision 1.22  2004/05/04 19:12:42  cargilld
    * Enable IDs to work on all kinds of schema components
    *
  @@ -545,19 +548,22 @@
   void XSModel::addGrammarToXSModel(XSNamespaceItem* namespaceItem)
   {
       // Loop through top-level attribute declarations in the grammar...
  -    RefHashTableOfEnumerator<XMLAttDef> attrEnum = 
RefHashTableOfEnumerator<XMLAttDef> 
(namespaceItem->fGrammar->getAttributeDeclRegistry(), false, fMemoryManager);
  -    while (attrEnum.hasMoreElements())
  -    {
  -        XSAttributeDeclaration* xsAttrDecl = fObjFactory->addOrFind
  -        (
  -            (SchemaAttDef*) &(attrEnum.nextElement()), this
  -        );
  +    RefHashTableOf<XMLAttDef>* attDeclRegistry = 
namespaceItem->fGrammar->getAttributeDeclRegistry();
  +    if(attDeclRegistry) {
  +        RefHashTableOfEnumerator<XMLAttDef> attrEnum = 
RefHashTableOfEnumerator<XMLAttDef> (attDeclRegistry, false, fMemoryManager);
  +        while (attrEnum.hasMoreElements())
  +        {
  +            XSAttributeDeclaration* xsAttrDecl = fObjFactory->addOrFind
  +            (
  +                (SchemaAttDef*) &(attrEnum.nextElement()), this
  +            );
   
  -        addComponentToNamespace
  -        (
  -            namespaceItem, xsAttrDecl, XSConstants::ATTRIBUTE_DECLARATION - 1
  -        );
  -    } // end of attribute loop
  +            addComponentToNamespace
  +            (
  +                namespaceItem, xsAttrDecl, XSConstants::ATTRIBUTE_DECLARATION - 1
  +            );
  +        } // end of attribute loop
  +    }
   
       // Loop through top-level elements in the grammar...
       RefHash3KeysIdPoolEnumerator<SchemaElementDecl> elemEnum = 
namespaceItem->fGrammar->getElemEnumerator();    
  @@ -599,50 +605,59 @@
       }
   
       // Loop through top-level COMPLEX type definitions in the grammar...
  -    RefHashTableOfEnumerator<ComplexTypeInfo> complexEnum = 
RefHashTableOfEnumerator<ComplexTypeInfo> 
(namespaceItem->fGrammar->getComplexTypeRegistry(), false, fMemoryManager);
  -    while (complexEnum.hasMoreElements())
  -    {
  -        ComplexTypeInfo&  curComplex = complexEnum.nextElement();
  -        if (!curComplex.getAnonymous())
  +    RefHashTableOf<ComplexTypeInfo>* complexTypeRegistry = 
namespaceItem->fGrammar->getComplexTypeRegistry();
  +    if(complexTypeRegistry) {
  +        RefHashTableOfEnumerator<ComplexTypeInfo> complexEnum = 
RefHashTableOfEnumerator<ComplexTypeInfo> (complexTypeRegistry, false, fMemoryManager);
  +        while (complexEnum.hasMoreElements())
  +        {
  +            ComplexTypeInfo&  curComplex = complexEnum.nextElement();
  +            if (!curComplex.getAnonymous())
  +            {
  +                addComponentToNamespace
  +                (
  +                    namespaceItem
  +                    , fObjFactory->addOrFind(&curComplex, this)
  +                    , XSConstants::TYPE_DEFINITION - 1
  +                );
  +            }
  +        }  // end of type definition loop
  +    }
  +
  +    // Loop through top-level attribute group definitions in the grammar...
  +    RefHashTableOf<XercesAttGroupInfo>* attGroupInfoRegistry = 
namespaceItem->fGrammar->getAttGroupInfoRegistry();
  +    if(attGroupInfoRegistry) {
  +        RefHashTableOfEnumerator<XercesAttGroupInfo> attrGroupEnum = 
RefHashTableOfEnumerator<XercesAttGroupInfo> (attGroupInfoRegistry, false, 
fMemoryManager);
  +        while (attrGroupEnum.hasMoreElements())
           {
               addComponentToNamespace
               (
                   namespaceItem
  -                , fObjFactory->addOrFind(&curComplex, this)
  -                , XSConstants::TYPE_DEFINITION - 1
  +                , fObjFactory->createXSAttGroupDefinition
  +                  (
  +                      &(attrGroupEnum.nextElement()), this
  +                  )
  +                , XSConstants::ATTRIBUTE_GROUP_DEFINITION - 1
               );
  -        }
  -    }  // end of type definition loop
  -
  -    // Loop through top-level attribute group definitions in the grammar...
  -    RefHashTableOfEnumerator<XercesAttGroupInfo> attrGroupEnum = 
RefHashTableOfEnumerator<XercesAttGroupInfo> 
(namespaceItem->fGrammar->getAttGroupInfoRegistry(), false, fMemoryManager);
  -    while (attrGroupEnum.hasMoreElements())
  -    {
  -        addComponentToNamespace
  -        (
  -            namespaceItem
  -            , fObjFactory->createXSAttGroupDefinition
  -              (
  -                  &(attrGroupEnum.nextElement()), this
  -              )
  -            , XSConstants::ATTRIBUTE_GROUP_DEFINITION - 1
  -        );
  -    } // end of attribute group loop
  +        } // end of attribute group loop
  +    }
   
       // Loop through top-level model group definitions in the grammar...
  -    RefHashTableOfEnumerator<XercesGroupInfo> modelGroupEnum = 
RefHashTableOfEnumerator<XercesGroupInfo> 
(namespaceItem->fGrammar->getGroupInfoRegistry(), false, fMemoryManager);
  -    while (modelGroupEnum.hasMoreElements())
  -    {
  -        addComponentToNamespace
  -        (
  -            namespaceItem
  -            , fObjFactory->createXSModelGroupDefinition
  -              (
  -                  &(modelGroupEnum.nextElement()), this
  -              )
  -            , XSConstants::MODEL_GROUP_DEFINITION - 1
  -        );
  -    } // end of model group loop
  +    RefHashTableOf<XercesGroupInfo>* groupInfoRegistry = 
namespaceItem->fGrammar->getGroupInfoRegistry();
  +    if(groupInfoRegistry) {
  +        RefHashTableOfEnumerator<XercesGroupInfo> modelGroupEnum = 
RefHashTableOfEnumerator<XercesGroupInfo> (groupInfoRegistry, false, fMemoryManager);
  +        while (modelGroupEnum.hasMoreElements())
  +        {
  +            addComponentToNamespace
  +            (
  +                namespaceItem
  +                , fObjFactory->createXSModelGroupDefinition
  +                  (
  +                      &(modelGroupEnum.nextElement()), this
  +                  )
  +                , XSConstants::MODEL_GROUP_DEFINITION - 1
  +            );
  +        } // end of model group loop
  +    }
   
       // Loop through notations in the grammar...    
       NameIdPoolEnumerator<XMLNotationDecl> notationEnum = 
namespaceItem->fGrammar->getNotationEnumerator();
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to