diff --git a/src/xercesc/framework/psvi/XSSimpleTypeDefinition.cpp b/src/xercesc/framework/psvi/XSSimpleTypeDefinition.cpp index f54b7d89acc03cdc3fc60cc35eceb7ffbebc1422..7d971ab18182dd5bc7be8144dc6404ce94a23323 100644 --- a/src/xercesc/framework/psvi/XSSimpleTypeDefinition.cpp +++ b/src/xercesc/framework/psvi/XSSimpleTypeDefinition.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.6 2003/11/24 15:45:36 knoaman + * PSVI: finish construction of XSSimpleTypeDefinition + * * Revision 1.5 2003/11/21 17:34:04 knoaman * PSVI update * @@ -102,20 +105,27 @@ static bool XSSimpleTypeDefinitionTestFlag(int flag) // --------------------------------------------------------------------------- // XSSimpleTypeDefinition: Constructors and Destructors // --------------------------------------------------------------------------- -XSSimpleTypeDefinition::XSSimpleTypeDefinition(DatatypeValidator* const datatypeValidator, - XSAnnotation* const headAnnot, - XSModel* const xsModel, - MemoryManager* const manager) - : XSTypeDefinition(SIMPLE_TYPE, 0, xsModel, manager) +XSSimpleTypeDefinition::XSSimpleTypeDefinition +( + DatatypeValidator* const datatypeValidator + , VARIETY stVariety + , XSTypeDefinition* const xsBaseType + , XSSimpleTypeDefinition* const primitiveOrItemType + , XSSimpleTypeDefinitionList* const memberTypes + , XSAnnotation* headAnnot + , XSModel* const xsModel + , MemoryManager* const manager +) + : XSTypeDefinition(SIMPLE_TYPE, xsBaseType, xsModel, manager) , fDefinedFacets(0) , fFixedFacets(0) - , fVariety(VARIETY_ABSENT) + , fVariety(stVariety) , fDatatypeValidator(datatypeValidator) , fXSFacetList(0) , fXSMultiValueFacetList(0) , fPatternList(0) - , fPrimitiveOrItemType(0) - , fMemberTypes(0) + , fPrimitiveOrItemType(primitiveOrItemType) + , fMemberTypes(memberTypes) , fXSAnnotationList(0) { if (int finalset = fDatatypeValidator->getFinalSet()) @@ -271,197 +281,23 @@ bool XSSimpleTypeDefinition::derivedFromType(const XSTypeDefinition * const ance } // --------------------------------------------------------------------------- -// XSSimpleTypeDefinition: initialization methods +// XSSimpleTypeDefinition: helper methods // --------------------------------------------------------------------------- -void XSSimpleTypeDefinition::construct() +void XSSimpleTypeDefinition::setFacetInfo +( + int definedFacets + , int fixedFacets + , XSFacetList* const xsFacetList + , XSMultiValueFacetList* const xsMultiValueFacetList + , StringList* const patternList +) { - //REVISIT -/* // compute fBaseType - if (fDatatypeValidator->getBaseValidator()) - fBaseType = PSVIUtil::addOrFind(fDatatypeValidator->getBaseValidator(), fXSModel, fMemoryManager); - - //REVISIT: the getFixed method is protected so added friend XSSimpleTypeDefinition - // to DatatypeValidator class... - if (fDatatypeValidator->getType() == DatatypeValidator::Union) - { - fVariety = VARIETY_UNION; - RefVectorOf<DatatypeValidator>* memberTypeValidators = ((UnionDatatypeValidator*)fDatatypeValidator)->getMemberTypeValidators(); - unsigned int size = memberTypeValidators->size(); - if (size) - { - fMemberTypes = new (fMemoryManager) RefVectorOf<XSSimpleTypeDefinition>(size, false, fMemoryManager); - for (unsigned int i=0; i<size; i++) - { - fMemberTypes->addElement( - PSVIUtil::addOrFind(memberTypeValidators->elementAt(i), fXSModel, fMemoryManager) - ); - } - } - } - else if (fDatatypeValidator->getType() == DatatypeValidator::List) - { - fVariety = VARIETY_LIST; - - DatatypeValidator* dv = fDatatypeValidator->getBaseValidator(); - while (dv->getType() == DatatypeValidator::List) - { - PSVIUtil::addOrFind(dv, fXSModel, fMemoryManager); - dv = dv->getBaseValidator(); - } - fPrimitiveOrItemType = PSVIUtil::addOrFind(dv, fXSModel, fMemoryManager); - } - else - { - // REVISIT: assume ATOMIC but what about VARIETY_ABSENT? - fVariety = VARIETY_ATOMIC; - - DatatypeValidator* dv = fDatatypeValidator->getBaseValidator(); - while (dv) - { - fPrimitiveOrItemType = PSVIUtil::addOrFind(dv, fXSModel, fMemoryManager); - dv = dv->getBaseValidator(); - } - } - - if (fDatatypeValidator->getFacetsDefined()) - processFacets();*/ -} - -void XSSimpleTypeDefinition::processFacets() -{ - // REVISIT -/* bool isFixed = false; - int facetsDefined = fDatatypeValidator->getFacetsDefined(); - - fFixedFacets = fDatatypeValidator->getFixed(); - - // NOTE: XSMultiValueFacetList is not owned by XSModel! - if ((facetsDefined & DatatypeValidator::FACET_PATTERN) - || (facetsDefined & DatatypeValidator::FACET_ENUMERATION)) - fXSMultiValueFacetList = new (fMemoryManager) RefVectorOf<XSMultiValueFacet>(2, true, fMemoryManager); - - if (facetsDefined & DatatypeValidator::FACET_ENUMERATION) - { - RefArrayVectorOf<XMLCh>* enumList = (RefArrayVectorOf<XMLCh>*) - fDatatypeValidator->getEnumString(); - isFixed = XSSimpleTypeDefinitionTestFlag(fFixedFacets & DatatypeValidator::FACET_ENUMERATION); - - // NOTE: Don't need to add multivaluefacet to "ObjectMap -> getObjectFromMap/putObjectInMap); - fXSMultiValueFacetList->addElement( - new (fMemoryManager) XSMultiValueFacet( - FACET_ENUMERATION , enumList , isFixed - , PSVIUtil::getAnnotationFromModel(fXSModel, enumList) - , fXSModel, fMemoryManager) - ); - fDefinedFacets |= FACET_ENUMERATION; - if (isFixed) - fFixedFacets |= FACET_ENUMERATION; - } - - RefHashTableOf<KVStringPair>* facets = fDatatypeValidator->getFacets(); - if (!facets) - return; - - // NOTE: XSFacetList is not owned by XSModel! - fXSFacetList = new (fMemoryManager) RefVectorOf<XSFacet>(10, true, fMemoryManager); - - // NOTE: Don't need to add facet to "ObjectMap -> getObjectFromMap/putObjectInMap); - RefHashTableOfEnumerator<KVStringPair> e(facets); - while (e.hasMoreElements()) - { - KVStringPair& pair = e.nextElement(); - XMLCh* key = pair.getKey(); - FACET facetType = FACET_NONE; - XSAnnotation* annot = PSVIUtil::getAnnotationFromModel(fXSModel, &pair); - - if (XMLString::equals(key, SchemaSymbols::fgELT_MAXINCLUSIVE)) - { - facetType = FACET_MAXINCLUSIVE; - isFixed = XSSimpleTypeDefinitionTestFlag(fFixedFacets & DatatypeValidator::FACET_MAXINCLUSIVE); - } - else if (XMLString::equals(key, SchemaSymbols::fgELT_MAXEXCLUSIVE)) - { - facetType = FACET_MAXEXCLUSIVE; - isFixed = XSSimpleTypeDefinitionTestFlag(fFixedFacets & DatatypeValidator::FACET_MAXEXCLUSIVE); - } - else if (XMLString::equals(key, SchemaSymbols::fgELT_MININCLUSIVE)) - { - facetType = FACET_MININCLUSIVE; - isFixed = XSSimpleTypeDefinitionTestFlag(fFixedFacets & DatatypeValidator::FACET_MININCLUSIVE); - } - else if (XMLString::equals(key, SchemaSymbols::fgELT_MINEXCLUSIVE)) - { - facetType = FACET_MINEXCLUSIVE; - isFixed = XSSimpleTypeDefinitionTestFlag(fFixedFacets & DatatypeValidator::FACET_MINEXCLUSIVE); - } - else if (XMLString::equals(key, SchemaSymbols::fgELT_LENGTH)) - { - facetType = FACET_LENGTH; - isFixed = XSSimpleTypeDefinitionTestFlag(fFixedFacets & DatatypeValidator::FACET_LENGTH); - } - else if (XMLString::equals(key, SchemaSymbols::fgELT_MINLENGTH)) - { - facetType = FACET_MINLENGTH; - isFixed = XSSimpleTypeDefinitionTestFlag(fFixedFacets & DatatypeValidator::FACET_MINLENGTH); - } - else if (XMLString::equals(key, SchemaSymbols::fgELT_MAXLENGTH)) - { - facetType = FACET_MAXLENGTH; - isFixed = XSSimpleTypeDefinitionTestFlag(fFixedFacets & DatatypeValidator::FACET_MAXLENGTH); - } - else if (XMLString::equals(key, SchemaSymbols::fgELT_TOTALDIGITS)) - { - facetType = FACET_TOTALDIGITS; - isFixed = XSSimpleTypeDefinitionTestFlag(fFixedFacets & DatatypeValidator::FACET_TOTALDIGITS); - } - else if (XMLString::equals(key, SchemaSymbols::fgELT_FRACTIONDIGITS)) - { - facetType = FACET_FRACTIONDIGITS; - isFixed = XSSimpleTypeDefinitionTestFlag(fFixedFacets & DatatypeValidator::FACET_FRACTIONDIGITS); - } - else if (XMLString::equals(key, SchemaSymbols::fgELT_WHITESPACE)) - { - facetType = FACET_WHITESPACE; - isFixed = XSSimpleTypeDefinitionTestFlag(fFixedFacets & DatatypeValidator::FACET_WHITESPACE); - } - else if (XMLString::equals(key, SchemaSymbols::fgELT_PATTERN)) - { - XMLStringTokenizer tokenizer(fDatatypeValidator->getPattern(), &chPipe, fMemoryManager); - fPatternList = new (fMemoryManager) RefArrayVectorOf<XMLCh>(tokenizer.countTokens(), true, fMemoryManager); - - while (tokenizer.hasMoreTokens()) - fPatternList->addElement(XMLString::replicate(tokenizer.nextToken(), fMemoryManager)); - - isFixed = XSSimpleTypeDefinitionTestFlag(fFixedFacets & DatatypeValidator::FACET_PATTERN); - // NOTE: Don't need to add multivaluefacet to "ObjectMap -> getObjectFromMap/putObjectInMap); - fXSMultiValueFacetList->addElement( - new (fMemoryManager) XSMultiValueFacet( - FACET_PATTERN, fPatternList, isFixed, annot, fXSModel, fMemoryManager) - ); - fDefinedFacets |= FACET_PATTERN; - if (isFixed) - fFixedFacets |= FACET_PATTERN; - continue; - } - else - { - // REVISIT: hmm... what about XSSimpleTypeDefinition::FACET_NONE - // don't think I need to create an empty Facet? - continue; - } - - fXSFacetList->addElement( - new (fMemoryManager) XSFacet( - facetType, pair.getValue(), isFixed, annot, fXSModel, fMemoryManager) - ); - - fDefinedFacets |= facetType; - if (isFixed) - fFixedFacets |= facetType; - }*/ + fDefinedFacets = definedFacets; + fFixedFacets = fixedFacets; + fXSFacetList = xsFacetList; + fXSMultiValueFacetList = xsMultiValueFacetList; + fPatternList = patternList; } XERCES_CPP_NAMESPACE_END - - diff --git a/src/xercesc/framework/psvi/XSSimpleTypeDefinition.hpp b/src/xercesc/framework/psvi/XSSimpleTypeDefinition.hpp index 582a0ee09fed12ebef253f9cbe48915161f67e00..325340a65fb1ea6cc7a16073c3de6af4d0ebe1b0 100644 --- a/src/xercesc/framework/psvi/XSSimpleTypeDefinition.hpp +++ b/src/xercesc/framework/psvi/XSSimpleTypeDefinition.hpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.7 2003/11/24 15:45:36 knoaman + * PSVI: finish construction of XSSimpleTypeDefinition + * * Revision 1.6 2003/11/21 17:34:04 knoaman * PSVI update * @@ -209,10 +212,14 @@ public: */ XSSimpleTypeDefinition ( - DatatypeValidator* const datatypeValidator - , XSAnnotation* headAnnot - , XSModel* const xsModel - , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + DatatypeValidator* const datatypeValidator + , VARIETY stVariety + , XSTypeDefinition* const xsBaseType + , XSSimpleTypeDefinition* const primitiveOrItemType + , XSSimpleTypeDefinitionList* const memberTypes + , XSAnnotation* headAnnot + , XSModel* const xsModel + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager ); //@}; @@ -257,7 +264,7 @@ public: * [facets]: get all facets defined on this type. The value is a bit * combination of FACET_XXX constants of all defined facets. */ - short getDefinedFacets() const; + int getDefinedFacets() const; /** * Convenience method. [Facets]: check whether a facet is defined on this @@ -270,7 +277,7 @@ public: /** * [facets]: get all facets defined and fixed on this type. */ - short getFixedFacets() const; + int getFixedFacets() const; /** * Convenience method. [Facets]: check whether a facet is defined and @@ -391,10 +398,6 @@ public: //@{ - /** - * Complete the construction of the <code>XSComplexTypeDeclaration</code>. - */ - void construct(); //@} @@ -409,15 +412,24 @@ private: /** * Helper method for construct */ - void processFacets(); + void setFacetInfo + ( + int definedFacets + , int fixedFacets + , XSFacetList* const xsFacetList + , XSMultiValueFacetList* const xsMultiValueFacetList + , StringList* const patternList + ); + + friend class XSObjectFactory; protected: // ----------------------------------------------------------------------- // data members // ----------------------------------------------------------------------- - short fDefinedFacets; - short fFixedFacets; + int fDefinedFacets; + int fFixedFacets; VARIETY fVariety; DatatypeValidator* fDatatypeValidator; XSFacetList* fXSFacetList; @@ -454,12 +466,12 @@ inline XSSimpleTypeDefinitionList* XSSimpleTypeDefinition::getMemberTypes() cons return fMemberTypes; } -inline short XSSimpleTypeDefinition::getDefinedFacets() const +inline int XSSimpleTypeDefinition::getDefinedFacets() const { return fDefinedFacets; } -inline short XSSimpleTypeDefinition::getFixedFacets() const +inline int XSSimpleTypeDefinition::getFixedFacets() const { return fFixedFacets; } diff --git a/src/xercesc/internal/XSObjectFactory.cpp b/src/xercesc/internal/XSObjectFactory.cpp index 996547ca6cdf2679756419a08e12b34914702efb..18c2e2d0457fec2debaefc232319ae51b4f7e217 100644 --- a/src/xercesc/internal/XSObjectFactory.cpp +++ b/src/xercesc/internal/XSObjectFactory.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.5 2003/11/24 15:45:36 knoaman + * PSVI: finish construction of XSSimpleTypeDefinition + * * Revision 1.4 2003/11/23 16:49:26 knoaman * PSVI: create local elements of groups * @@ -91,6 +94,8 @@ #include <xercesc/framework/psvi/XSAttributeUse.hpp> #include <xercesc/framework/psvi/XSAttributeDeclaration.hpp> #include <xercesc/framework/psvi/XSNotationDeclaration.hpp> +#include <xercesc/framework/psvi/XSFacet.hpp> +#include <xercesc/framework/psvi/XSMultiValueFacet.hpp> #include <xercesc/validators/common/ContentSpecNode.hpp> #include <xercesc/validators/datatype/DatatypeValidator.hpp> #include <xercesc/validators/schema/SchemaAttDefList.hpp> @@ -101,6 +106,7 @@ #include <xercesc/validators/schema/identity/IC_KeyRef.hpp> #include <xercesc/validators/schema/identity/XercesXPath.hpp> #include <xercesc/util/HashPtr.hpp> +#include <xercesc/util/XMLStringTokenizer.hpp> XERCES_CPP_NAMESPACE_BEGIN @@ -340,7 +346,68 @@ XSObjectFactory::addOrFind(DatatypeValidator* const validator, if (!xsObj) { - //REVISIT + XSSimpleTypeDefinition* baseType = 0; + XSSimpleTypeDefinitionList* memberTypes = 0; + XSSimpleTypeDefinition* primitiveOrItemType = 0; + XSSimpleTypeDefinition::VARIETY typeVariety = XSSimpleTypeDefinition::VARIETY_ATOMIC; + + // compute fBaseType + DatatypeValidator* baseDV = validator->getBaseValidator(); + if (baseDV) + baseType = addOrFind(baseDV, xsModel); + + //REVISIT: the getFixed method is protected so added friend XSObjectFactory + // to DatatypeValidator class... + DatatypeValidator::ValidatorType dvType = validator->getType(); + if (dvType == DatatypeValidator::Union) + { + typeVariety = XSSimpleTypeDefinition::VARIETY_UNION; + RefVectorOf<DatatypeValidator>* membersDV = ((UnionDatatypeValidator*)validator)->getMemberTypeValidators(); + unsigned int size = membersDV->size(); + if (size) + { + memberTypes = new (fMemoryManager) RefVectorOf<XSSimpleTypeDefinition>(size, false, fMemoryManager); + for (unsigned int i=0; i<size; i++) + memberTypes->addElement(addOrFind(membersDV->elementAt(i), xsModel)); + } + } + else if (dvType == DatatypeValidator::List) + { + typeVariety = XSSimpleTypeDefinition::VARIETY_LIST; + + while (baseDV->getType() == DatatypeValidator::List) + { + addOrFind(baseDV, xsModel); + baseDV = baseDV->getBaseValidator(); + } + primitiveOrItemType = addOrFind(baseDV, xsModel); + } + else + { + // REVISIT: assume ATOMIC but what about VARIETY_ABSENT? + while (baseDV) + { + primitiveOrItemType = addOrFind(baseDV, xsModel); + baseDV = baseDV->getBaseValidator(); + } + } + + xsObj = new (fMemoryManager) XSSimpleTypeDefinition + ( + validator + , typeVariety + , baseType + , primitiveOrItemType + , memberTypes + , getAnnotationFromModel(xsModel, validator) + , xsModel + , fMemoryManager + ); + putObjectInMap(validator, xsObj, xsModel); + + // process facets + if (validator->getFacetsDefined()) + processFacets(validator, xsModel, xsObj); } return xsObj; @@ -708,4 +775,145 @@ void XSObjectFactory::putObjectInMap(void* key, XSObject* const object, XSModel* } +void XSObjectFactory::processFacets(DatatypeValidator* const dv, + XSModel* const xsModel, + XSSimpleTypeDefinition* const xsST) +{ + // NOTE: XSMultiValueFacetList is not owned by XSModel! + // NOTE: XSFacetList is not owned by XSModel! + int definedFacets = 0; + int fixedFacets = 0; + XSFacetList* xsFacetList = 0; + XSMultiValueFacetList* xsMultiFacetList = 0; + StringList* patternList = 0; + bool isFixed = false; + int dvFacetsDefined = dv->getFacetsDefined(); + int dvFixedFacets = dv->getFixed(); + + if ((dvFacetsDefined & DatatypeValidator::FACET_PATTERN) + || (dvFacetsDefined & DatatypeValidator::FACET_ENUMERATION)) + xsMultiFacetList = new (fMemoryManager) RefVectorOf<XSMultiValueFacet>(2, true, fMemoryManager); + + if (dvFacetsDefined & DatatypeValidator::FACET_ENUMERATION) + { + RefArrayVectorOf<XMLCh>* enumList = (RefArrayVectorOf<XMLCh>*) dv->getEnumString(); + isFixed = ((dvFixedFacets & DatatypeValidator::FACET_ENUMERATION) != 0); + + // NOTE: Don't need to add multivaluefacet to "ObjectMap -> getObjectFromMap/putObjectInMap); + xsMultiFacetList->addElement( + new (fMemoryManager) XSMultiValueFacet( + XSSimpleTypeDefinition::FACET_ENUMERATION , enumList, isFixed + , getAnnotationFromModel(xsModel, enumList) + , xsModel, fMemoryManager) + ); + definedFacets |= XSSimpleTypeDefinition::FACET_ENUMERATION; + if (isFixed) + fixedFacets |= XSSimpleTypeDefinition::FACET_ENUMERATION; + } + + RefHashTableOf<KVStringPair>* facets = dv->getFacets(); + if (facets) + { + xsFacetList = new (fMemoryManager) RefVectorOf<XSFacet>(10, true, fMemoryManager); + + // NOTE: Don't need to add facet to "ObjectMap -> getObjectFromMap/putObjectInMap); + RefHashTableOfEnumerator<KVStringPair> e(facets); + while (e.hasMoreElements()) + { + KVStringPair& pair = e.nextElement(); + XMLCh* key = pair.getKey(); + XSSimpleTypeDefinition::FACET facetType = XSSimpleTypeDefinition::FACET_NONE; + XSAnnotation* annot = getAnnotationFromModel(xsModel, &pair); + + if (XMLString::equals(key, SchemaSymbols::fgELT_MAXINCLUSIVE)) + { + facetType = XSSimpleTypeDefinition::FACET_MAXINCLUSIVE; + isFixed = ((dvFixedFacets & DatatypeValidator::FACET_MAXINCLUSIVE) != 0); + } + else if (XMLString::equals(key, SchemaSymbols::fgELT_MAXEXCLUSIVE)) + { + facetType = XSSimpleTypeDefinition::FACET_MAXEXCLUSIVE; + isFixed = ((dvFixedFacets & DatatypeValidator::FACET_MAXEXCLUSIVE) !=0); + } + else if (XMLString::equals(key, SchemaSymbols::fgELT_MININCLUSIVE)) + { + facetType = XSSimpleTypeDefinition::FACET_MININCLUSIVE; + isFixed = ((dvFixedFacets & DatatypeValidator::FACET_MININCLUSIVE) !=0); + } + else if (XMLString::equals(key, SchemaSymbols::fgELT_MINEXCLUSIVE)) + { + facetType = XSSimpleTypeDefinition::FACET_MINEXCLUSIVE; + isFixed = ((dvFixedFacets & DatatypeValidator::FACET_MINEXCLUSIVE) != 0); + } + else if (XMLString::equals(key, SchemaSymbols::fgELT_LENGTH)) + { + facetType = XSSimpleTypeDefinition::FACET_LENGTH; + isFixed = ((dvFixedFacets & DatatypeValidator::FACET_LENGTH) != 0); + } + else if (XMLString::equals(key, SchemaSymbols::fgELT_MINLENGTH)) + { + facetType = XSSimpleTypeDefinition::FACET_MINLENGTH; + isFixed = ((dvFixedFacets & DatatypeValidator::FACET_MINLENGTH) != 0); + } + else if (XMLString::equals(key, SchemaSymbols::fgELT_MAXLENGTH)) + { + facetType = XSSimpleTypeDefinition::FACET_MAXLENGTH; + isFixed = ((dvFixedFacets & DatatypeValidator::FACET_MAXLENGTH) != 0); + } + else if (XMLString::equals(key, SchemaSymbols::fgELT_TOTALDIGITS)) + { + facetType = XSSimpleTypeDefinition::FACET_TOTALDIGITS; + isFixed = ((dvFixedFacets & DatatypeValidator::FACET_TOTALDIGITS) != 0); + } + else if (XMLString::equals(key, SchemaSymbols::fgELT_FRACTIONDIGITS)) + { + facetType = XSSimpleTypeDefinition::FACET_FRACTIONDIGITS; + isFixed = ((dvFixedFacets & DatatypeValidator::FACET_FRACTIONDIGITS) != 0); + } + else if (XMLString::equals(key, SchemaSymbols::fgELT_WHITESPACE)) + { + facetType = XSSimpleTypeDefinition::FACET_WHITESPACE; + isFixed = ((dvFixedFacets & DatatypeValidator::FACET_WHITESPACE) != 0); + } + else if (XMLString::equals(key, SchemaSymbols::fgELT_PATTERN)) + { + XMLStringTokenizer tokenizer(dv->getPattern(), &chPipe, fMemoryManager); + patternList = new (fMemoryManager) RefArrayVectorOf<XMLCh>(tokenizer.countTokens(), true, fMemoryManager); + + while (tokenizer.hasMoreTokens()) + patternList->addElement(XMLString::replicate(tokenizer.nextToken(), fMemoryManager)); + + isFixed = ((dvFixedFacets & DatatypeValidator::FACET_PATTERN) != 0); + // NOTE: Don't need to add multivaluefacet to "ObjectMap -> getObjectFromMap/putObjectInMap); + xsMultiFacetList->addElement( + new (fMemoryManager) XSMultiValueFacet( + XSSimpleTypeDefinition::FACET_PATTERN, patternList + , isFixed, annot, xsModel, fMemoryManager) + ); + definedFacets |= XSSimpleTypeDefinition::FACET_PATTERN; + if (isFixed) + fixedFacets |= XSSimpleTypeDefinition::FACET_PATTERN; + continue; + } + else + { + // REVISIT: hmm... what about XSSimpleTypeDefinition::FACET_NONE + // don't think I need to create an empty Facet? + continue; + } + + xsFacetList->addElement( + new (fMemoryManager) XSFacet( + facetType, pair.getValue(), isFixed, annot, xsModel, fMemoryManager) + ); + + definedFacets |= facetType; + if (isFixed) + fixedFacets |= facetType; + } + } + + xsST->setFacetInfo(definedFacets, fixedFacets, xsFacetList, xsMultiFacetList, patternList); +} + XERCES_CPP_NAMESPACE_END diff --git a/src/xercesc/internal/XSObjectFactory.hpp b/src/xercesc/internal/XSObjectFactory.hpp index fd305dbe80bc3af5f532ad31eaee4a72c959d29c..51bf2312d9d177574695473ff992019795bf28ce 100644 --- a/src/xercesc/internal/XSObjectFactory.hpp +++ b/src/xercesc/internal/XSObjectFactory.hpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.3 2003/11/24 15:45:36 knoaman + * PSVI: finish construction of XSSimpleTypeDefinition + * * Revision 1.2 2003/11/23 16:21:40 knoaman * PSVI: create local elements of complex types * @@ -242,6 +245,13 @@ private: , XSModel* const xsModel ); + void processFacets + ( + DatatypeValidator* const dv + , XSModel* const xsModel + , XSSimpleTypeDefinition* const xsST + ); + // make XSModel our friend friend class XSModel; diff --git a/src/xercesc/validators/datatype/DatatypeValidator.hpp b/src/xercesc/validators/datatype/DatatypeValidator.hpp index 4134adc699354f13d5ed0dba345ce40a8eecde54..33a21aab8eff7e4bc193ecc19e0f9cc2b5ae1a0f 100644 --- a/src/xercesc/validators/datatype/DatatypeValidator.hpp +++ b/src/xercesc/validators/datatype/DatatypeValidator.hpp @@ -400,7 +400,7 @@ protected: friend class DatatypeValidatorFactory; - friend class XSSimpleTypeDefinition; + friend class XSObjectFactory; /** * facetDefined