You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by tn...@apache.org on 2002/02/25 22:28:26 UTC

cvs commit: xml-xerces/c/src/xercesc/validators/datatype DatatypeValidatorFactory.cpp DatatypeValidatorFactory.hpp

tng         02/02/25 13:28:26

  Modified:    c/src/xercesc/validators/datatype
                        DatatypeValidatorFactory.cpp
                        DatatypeValidatorFactory.hpp
  Log:
  Schema Fix: Thread-safe the built-in datatype validator factory.
  
  Revision  Changes    Path
  1.2       +252 -297  xml-xerces/c/src/xercesc/validators/datatype/DatatypeValidatorFactory.cpp
  
  Index: DatatypeValidatorFactory.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/datatype/DatatypeValidatorFactory.cpp,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- DatatypeValidatorFactory.cpp	1 Feb 2002 22:22:40 -0000	1.1
  +++ DatatypeValidatorFactory.cpp	25 Feb 2002 21:28:26 -0000	1.2
  @@ -56,8 +56,11 @@
   
   /*
    * $Log: DatatypeValidatorFactory.cpp,v $
  - * Revision 1.1  2002/02/01 22:22:40  peiyongz
  - * Initial revision
  + * Revision 1.2  2002/02/25 21:28:26  tng
  + * Schema Fix: Thread-safe the built-in datatype validator factory.
  + *
  + * Revision 1.1.1.1  2002/02/01 22:22:40  peiyongz
  + * sane_include
    *
    * Revision 1.26  2001/11/07 19:18:52  peiyongz
    * DateTime Port
  @@ -333,7 +336,6 @@
   //  DatatypeValidatorFactory: Static member data
   // ---------------------------------------------------------------------------
   RefHashTableOf<DatatypeValidator>* DatatypeValidatorFactory::fBuiltInRegistry = 0;
  -int DatatypeValidatorFactory::fRegistryExpanded = 0;
   
   // ---------------------------------------------------------------------------
   //  DatatypeValidatorFactory: Constructors and Destructor
  @@ -367,19 +369,16 @@
   void DatatypeValidatorFactory::reinitRegistry() {
   	delete fBuiltInRegistry;
   	fBuiltInRegistry = 0;
  -	fRegistryExpanded = 0;
   }
   
   // ---------------------------------------------------------------------------
   //  DatatypeValidatorFactory: Registry initialization methods
   // ---------------------------------------------------------------------------
  -void DatatypeValidatorFactory::initializeDTDRegistry()
  +void DatatypeValidatorFactory::expandRegistryToFullSchemaSet()
   {
  -    if (fRegistryExpanded)
  -        return;
  -
       static XMLRegisterCleanup builtInRegistryCleanup;
   
  +    // Initialize common Schema/DTD Datatype validator set if not initialized
       if (fBuiltInRegistry == 0) {
           RefHashTableOf<DatatypeValidator>* t = new RefHashTableOf<DatatypeValidator>(109);
           if (XMLPlatformUtils::compareAndSwap((void **)&fBuiltInRegistry, t, 0) != 0)
  @@ -389,311 +388,267 @@
           else
           {
               builtInRegistryCleanup.registerCleanup(reinitRegistry);
  +
  +            fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_STRING,
  +                       new StringDatatypeValidator());
  +            fBuiltInRegistry->put((void*) XMLUni::fgNotationString,
  +                       new NOTATIONDatatypeValidator());
  +
  +
  +            fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_ANYSIMPLETYPE,
  +                           new AnySimpleTypeDatatypeValidator());
  +            fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_BOOLEAN,
  +                           new BooleanDatatypeValidator());
  +            fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_DECIMAL,
  +                           new DecimalDatatypeValidator());
  +            fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_HEXBINARY,
  +                           new HexBinaryDatatypeValidator());
  +            fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_BASE64BINARY,
  +                           new Base64BinaryDatatypeValidator());
  +            fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_DOUBLE,
  +                           new DoubleDatatypeValidator());
  +            fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_FLOAT,
  +                           new FloatDatatypeValidator());
  +            fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_ANYURI,
  +                           new AnyURIDatatypeValidator());
  +            fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_QNAME,
  +                           new QNameDatatypeValidator());
  +            fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_NAME,
  +                           new NameDatatypeValidator());
  +            fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_NCNAME,
  +                           new NCNameDatatypeValidator());
  +
  +            fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_DATETIME,
  +                           new DateTimeDatatypeValidator());
  +            fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_DATE,
  +                           new DateDatatypeValidator());
  +            fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_TIME,
  +                           new TimeDatatypeValidator());
  +            fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_DAY,
  +                           new DayDatatypeValidator());
  +            fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_MONTH,
  +                           new MonthDatatypeValidator());
  +            fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_MONTHDAY,
  +                           new MonthDayDatatypeValidator());
  +            fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_YEAR,
  +                           new YearDatatypeValidator());
  +            fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_YEARMONTH,
  +                           new YearMonthDatatypeValidator());
  +            fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_DURATION,
  +                           new DurationDatatypeValidator());
  +
  +            // REVISIT
  +            // We are creating a lot of Hashtables for the facets of the different
  +            // validators. It's better to have some kind of a memory pool and ask
  +            // the pool to give us a new instance of the hashtable.
  +
  +            RefHashTableOf<KVStringPair>* facets = new RefHashTableOf<KVStringPair>(3);
  +
  +            // Create 'NMTOKEN' datatype validator
  +            facets->put((void*) SchemaSymbols::fgELT_PATTERN ,
  +                            new KVStringPair(SchemaSymbols::fgELT_PATTERN,fgTokPattern));
  +            facets->put((void*) SchemaSymbols::fgELT_WHITESPACE,
  +                            new KVStringPair(SchemaSymbols::fgELT_WHITESPACE, SchemaSymbols::fgWS_COLLAPSE));
  +
  +            createDatatypeValidator(XMLUni::fgNmTokenString,
  +                            getDatatypeValidator(SchemaSymbols::fgDT_STRING),facets, 0, false, 0, false);
  +
  +            // Create 'NMTOKENS' datatype validator
  +            createDatatypeValidator(XMLUni::fgNmTokensString,
  +        	                 getDatatypeValidator(XMLUni::fgNmTokenString), 0, 0, true, 0, false);
  +
  +            // Create 'normalizedString' datatype validator
  +            facets = new RefHashTableOf<KVStringPair>(3);
  +            facets->put((void*) SchemaSymbols::fgELT_WHITESPACE,
  +                        new KVStringPair(SchemaSymbols::fgELT_WHITESPACE, SchemaSymbols::fgWS_REPLACE));
  +
  +            createDatatypeValidator(SchemaSymbols::fgDT_NORMALIZEDSTRING,
  +                        getDatatypeValidator(SchemaSymbols::fgDT_STRING),
  +    				    facets, 0, false, 0, false);
  +
  +            // Create 'token' datatype validator
  +            facets = new RefHashTableOf<KVStringPair>(3);
  +
  +            facets->put((void*) SchemaSymbols::fgELT_WHITESPACE,
  +                        new KVStringPair(SchemaSymbols::fgELT_WHITESPACE, SchemaSymbols::fgWS_COLLAPSE));
  +
  +            createDatatypeValidator(SchemaSymbols::fgDT_TOKEN,
  +                          getDatatypeValidator(SchemaSymbols::fgDT_NORMALIZEDSTRING),
  +                          facets, 0, false, 0, false);
  +
  +            // Create 'language' datatype validator
  +            facets = new RefHashTableOf<KVStringPair>(3);
  +
  +            facets->put((void*) SchemaSymbols::fgELT_PATTERN,
  +                        new KVStringPair(SchemaSymbols::fgELT_PATTERN, fgLangPattern));
  +
  +            createDatatypeValidator(SchemaSymbols::fgDT_LANGUAGE,
  +                          getDatatypeValidator(SchemaSymbols::fgDT_TOKEN),
  +                          facets, 0, false, 0, false);
  +
  +            // Create 'integer' datatype validator
  +            facets = new RefHashTableOf<KVStringPair>(3);
  +
  +            facets->put((void*) SchemaSymbols::fgELT_FRACTIONDIGITS,
  +                        new KVStringPair(SchemaSymbols::fgELT_FRACTIONDIGITS, fgValueZero));
  +
  +            createDatatypeValidator(SchemaSymbols::fgDT_INTEGER,
  +                          getDatatypeValidator(SchemaSymbols::fgDT_DECIMAL),
  +                          facets, 0, false, 0, false);
  +
  +            // Create 'nonPositiveInteger' datatype validator
  +            facets = new RefHashTableOf<KVStringPair>(2);
  +
  +            facets->put((void*) SchemaSymbols::fgELT_MAXINCLUSIVE,
  +                        new KVStringPair(SchemaSymbols::fgELT_MAXINCLUSIVE, fgValueZero));
  +
  +            createDatatypeValidator(SchemaSymbols::fgDT_NONPOSITIVEINTEGER,
  +                          getDatatypeValidator(SchemaSymbols::fgDT_INTEGER),
  +                          facets, 0, false, 0, false);
  +
  +            // Create 'negativeInteger' datatype validator
  +            facets = new RefHashTableOf<KVStringPair>(2);
  +
  +            facets->put((void*) SchemaSymbols::fgELT_MAXINCLUSIVE,
  +    			        new KVStringPair(SchemaSymbols::fgELT_MAXINCLUSIVE,fgNegOne));
  +
  +            createDatatypeValidator(SchemaSymbols::fgDT_NEGATIVEINTEGER,
  +                          getDatatypeValidator(SchemaSymbols::fgDT_NONPOSITIVEINTEGER),
  +                          facets, 0, false, 0, false);
  +
  +            // Create 'long' datatype validator
  +            facets = new RefHashTableOf<KVStringPair>(2);
  +
  +            facets->put((void*) SchemaSymbols::fgELT_MAXINCLUSIVE,
  +                        new KVStringPair(SchemaSymbols::fgELT_MAXINCLUSIVE,fgLongMaxInc));
  +            facets->put((void*) SchemaSymbols::fgELT_MININCLUSIVE,
  +                        new KVStringPair(SchemaSymbols::fgELT_MININCLUSIVE,fgLongMinInc));
  +
  +            createDatatypeValidator(SchemaSymbols::fgDT_LONG,
  +                          getDatatypeValidator(SchemaSymbols::fgDT_INTEGER),
  +                          facets, 0, false, 0, false);
  +
  +            // Create 'int' datatype validator
  +            facets = new RefHashTableOf<KVStringPair>(2);
  +
  +            facets->put((void*) SchemaSymbols::fgELT_MAXINCLUSIVE,
  +                        new KVStringPair(SchemaSymbols::fgELT_MAXINCLUSIVE, fgIntMaxInc));
  +            facets->put((void*) SchemaSymbols::fgELT_MININCLUSIVE,
  +                        new KVStringPair(SchemaSymbols::fgELT_MININCLUSIVE, fgIntMinInc));
  +
  +            createDatatypeValidator(SchemaSymbols::fgDT_INT,
  +                          getDatatypeValidator(SchemaSymbols::fgDT_LONG),
  +                          facets, 0, false, 0, false);
  +
  +            // Create 'short' datatype validator
  +            facets = new RefHashTableOf<KVStringPair>(2);
  +
  +            facets->put((void*) SchemaSymbols::fgELT_MAXINCLUSIVE,
  +                        new KVStringPair(SchemaSymbols::fgELT_MAXINCLUSIVE, fgShortMaxInc));
  +            facets->put((void*) SchemaSymbols::fgELT_MININCLUSIVE,
  +                        new KVStringPair(SchemaSymbols::fgELT_MININCLUSIVE, fgShortMinInc));
  +
  +            createDatatypeValidator(SchemaSymbols::fgDT_SHORT,
  +                          getDatatypeValidator(SchemaSymbols::fgDT_INT),
  +                          facets, 0, false, 0 ,false);
  +
  +            // Create 'byte' datatype validator
  +            facets = new RefHashTableOf<KVStringPair>(2);
  +
  +            facets->put((void*) SchemaSymbols::fgELT_MAXINCLUSIVE,
  +                        new KVStringPair(SchemaSymbols::fgELT_MAXINCLUSIVE, fgByteMaxInc));
  +            facets->put((void*) SchemaSymbols::fgELT_MININCLUSIVE,
  +                        new KVStringPair(SchemaSymbols::fgELT_MININCLUSIVE, fgByteMinInc));
  +
  +            createDatatypeValidator(SchemaSymbols::fgDT_BYTE,
  +                          getDatatypeValidator(SchemaSymbols::fgDT_SHORT),
  +                          facets, 0, false, 0, false);
  +
  +            // Create 'nonNegativeInteger' datatype validator
  +            facets = new RefHashTableOf<KVStringPair>(2);
  +
  +            facets->put((void*) SchemaSymbols::fgELT_MININCLUSIVE,
  +                        new KVStringPair(SchemaSymbols::fgELT_MININCLUSIVE, fgValueZero));
  +
  +            createDatatypeValidator(SchemaSymbols::fgDT_NONNEGATIVEINTEGER,
  +                          getDatatypeValidator(SchemaSymbols::fgDT_INTEGER),
  +                          facets, 0, false, 0, false);
  +
  +            // Create 'unsignedLong' datatype validator
  +            facets = new RefHashTableOf<KVStringPair>(2);
  +
  +            facets->put((void*) SchemaSymbols::fgELT_MAXINCLUSIVE,
  +                        new KVStringPair(SchemaSymbols::fgELT_MAXINCLUSIVE, fgULongMaxInc));
  +
  +            createDatatypeValidator(SchemaSymbols::fgDT_ULONG,
  +                          getDatatypeValidator(SchemaSymbols::fgDT_NONNEGATIVEINTEGER),
  +                          facets, 0, false, 0, false);
  +
  +            // Create 'unsignedInt' datatype validator
  +            facets = new RefHashTableOf<KVStringPair>(2);
  +
  +            facets->put((void*) SchemaSymbols::fgELT_MAXINCLUSIVE,
  +                        new KVStringPair(SchemaSymbols::fgELT_MAXINCLUSIVE, fgUIntMaxInc));
  +
  +            createDatatypeValidator(SchemaSymbols::fgDT_UINT,
  +                          getDatatypeValidator(SchemaSymbols::fgDT_ULONG),
  +                          facets, 0, false, 0, false);
  +
  +            // Create 'unsignedShort' datatypeValidator
  +            facets = new RefHashTableOf<KVStringPair>(2);
  +
  +            facets->put((void*) SchemaSymbols::fgELT_MAXINCLUSIVE,
  +                        new KVStringPair(SchemaSymbols::fgELT_MAXINCLUSIVE, fgUShortMaxInc));
  +
  +            createDatatypeValidator(SchemaSymbols::fgDT_USHORT,
  +                          getDatatypeValidator(SchemaSymbols::fgDT_UINT),
  +                          facets, 0, false, 0, false);
  +
  +            // Create 'unsignedByte' datatype validator
  +            facets = new RefHashTableOf<KVStringPair>(2);
  +
  +            facets->put((void*) SchemaSymbols::fgELT_MAXINCLUSIVE,
  +                        new KVStringPair(SchemaSymbols::fgELT_MAXINCLUSIVE, fgUByteMaxInc));
  +
  +            createDatatypeValidator(SchemaSymbols::fgDT_UBYTE,
  +                          getDatatypeValidator(SchemaSymbols::fgDT_USHORT),
  +                          facets, 0, false, 0, false);
  +
  +            // Create 'positiveInteger' datatype validator
  +            facets = new RefHashTableOf<KVStringPair>(2);
  +
  +            facets->put((void*) SchemaSymbols::fgELT_MININCLUSIVE,
  +                        new KVStringPair(SchemaSymbols::fgELT_MININCLUSIVE, fgValueOne));
  +
  +            createDatatypeValidator(SchemaSymbols::fgDT_POSITIVEINTEGER,
  +                          getDatatypeValidator(SchemaSymbols::fgDT_NONNEGATIVEINTEGER),
  +                          facets, 0, false, 0, false);
           }
  +    }
   
  +    // ID, IDREF IDREFS, ENTITY, ENTITIES  DTV have specific data member
  +    //   and cannot be shared across threads
  +    // So instead of storing them in the static fBuiltInRegistry,
  +    //   store them in local data fUserDefinedRegistry
  +    if (fUserDefinedRegistry == 0) {
  +        fUserDefinedRegistry = new RefHashTableOf<DatatypeValidator>(29);
       }
   
  -    fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_STRING,
  -                       new StringDatatypeValidator());
  -    fBuiltInRegistry->put((void*) XMLUni::fgIDString,
  +    fUserDefinedRegistry->put((void*) XMLUni::fgIDString,
                          new IDDatatypeValidator());
  -    fBuiltInRegistry->put((void*) XMLUni::fgIDRefString,
  +    fUserDefinedRegistry->put((void*) XMLUni::fgIDRefString,
                          new IDREFDatatypeValidator());
  -    fBuiltInRegistry->put((void*) XMLUni::fgEntityString,
  +    fUserDefinedRegistry->put((void*) XMLUni::fgEntityString,
                          new ENTITYDatatypeValidator());
  -    fBuiltInRegistry->put((void*) XMLUni::fgNotationString,
  -                       new NOTATIONDatatypeValidator());
  -
   
       // Create 'IDREFS' datatype validator
   	 createDatatypeValidator(XMLUni::fgIDRefsString,
  -                    getDatatypeValidator(XMLUni::fgIDRefString), 0, 0, true, 0, false);
  +                    getDatatypeValidator(XMLUni::fgIDRefString), 0, 0, true, 0, true);
   
       // Create 'ENTITIES' datatype validator
       createDatatypeValidator(XMLUni::fgEntitiesString,
  -		            getDatatypeValidator(XMLUni::fgEntityString), 0, 0, true, 0, false);
  -
  -    RefHashTableOf<KVStringPair>* facets = new RefHashTableOf<KVStringPair>(2);
  -
  -    facets->put((void*) SchemaSymbols::fgELT_PATTERN ,
  -                    new KVStringPair(SchemaSymbols::fgELT_PATTERN,fgTokPattern));
  -    facets->put((void*) SchemaSymbols::fgELT_WHITESPACE,
  -                    new KVStringPair(SchemaSymbols::fgELT_WHITESPACE, SchemaSymbols::fgWS_COLLAPSE));
  -
  -    // Create 'NMTOKEN' datatype validator
  -    createDatatypeValidator(XMLUni::fgNmTokenString,
  -                    getDatatypeValidator(SchemaSymbols::fgDT_STRING),facets, 0, false, 0, false);
  -
  -    // Create 'NMTOKENS' datatype validator
  -    createDatatypeValidator(XMLUni::fgNmTokensString,
  -	                 getDatatypeValidator(XMLUni::fgNmTokenString), 0, 0, true, 0, false);
  -
  -    fRegistryExpanded = 1;
  -}
  -
  -
  -void DatatypeValidatorFactory::expandRegistryToFullSchemaSet()
  -{
  -	if (fRegistryExpanded == 2)
  -		return;
  -
  -	// Initialize common Schema/DTD Datatype validator set if not initialized
  -    if (fBuiltInRegistry == 0
  -        || fBuiltInRegistry->get(SchemaSymbols::fgDT_STRING) == 0) {
  -        initializeDTDRegistry();
  -    }
  -
  -        fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_ANYSIMPLETYPE,
  -                       new AnySimpleTypeDatatypeValidator());
  -        fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_BOOLEAN,
  -                       new BooleanDatatypeValidator());
  -        fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_DECIMAL,
  -                       new DecimalDatatypeValidator());
  -        fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_HEXBINARY,
  -                       new HexBinaryDatatypeValidator());
  -        fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_BASE64BINARY,
  -                       new Base64BinaryDatatypeValidator());
  -        fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_DOUBLE,
  -                       new DoubleDatatypeValidator());
  -        fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_FLOAT,
  -                       new FloatDatatypeValidator());
  -        fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_ANYURI,
  -                       new AnyURIDatatypeValidator());
  -        fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_QNAME,
  -                       new QNameDatatypeValidator());
  -        fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_NAME,
  -                       new NameDatatypeValidator());
  -        fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_NCNAME,
  -                       new NCNameDatatypeValidator());
  -
  -        fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_DATETIME,
  -                       new DateTimeDatatypeValidator());
  -        fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_DATE,
  -                       new DateDatatypeValidator());
  -        fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_TIME,
  -                       new TimeDatatypeValidator());
  -        fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_DAY,
  -                       new DayDatatypeValidator());
  -        fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_MONTH,
  -                       new MonthDatatypeValidator());
  -        fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_MONTHDAY,
  -                       new MonthDayDatatypeValidator());
  -        fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_YEAR,
  -                       new YearDatatypeValidator());
  -        fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_YEARMONTH,
  -                       new YearMonthDatatypeValidator());
  -        fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_DURATION,
  -                       new DurationDatatypeValidator());
  -
  -        // REVISIT
  -        // We are creating a lot of Hashtables for the facets of the different
  -        // validators. It's better to have some kind of a memory pool and ask
  -        // the pool to give us a new instance of the hashtable.
  -
  -        // Create 'normalizedString' datatype validator
  -        RefHashTableOf<KVStringPair>* facets = new RefHashTableOf<KVStringPair>(3);
  -
  -        facets->put((void*) SchemaSymbols::fgELT_WHITESPACE,
  -                    new KVStringPair(SchemaSymbols::fgELT_WHITESPACE, SchemaSymbols::fgWS_REPLACE));
  -
  -        createDatatypeValidator(SchemaSymbols::fgDT_NORMALIZEDSTRING,
  -                    getDatatypeValidator(SchemaSymbols::fgDT_STRING),
  -				    facets, 0, false, 0, false);
  -
  -		// Create 'token' datatype validator
  -        facets = new RefHashTableOf<KVStringPair>(3);
  -
  -        facets->put((void*) SchemaSymbols::fgELT_WHITESPACE,
  -                    new KVStringPair(SchemaSymbols::fgELT_WHITESPACE, SchemaSymbols::fgWS_COLLAPSE));
  -
  -        createDatatypeValidator(SchemaSymbols::fgDT_TOKEN,
  -                      getDatatypeValidator(SchemaSymbols::fgDT_NORMALIZEDSTRING),
  -                      facets, 0, false, 0, false);
  -
  -        // Create 'language' datatype validator
  -        facets = new RefHashTableOf<KVStringPair>(3);
  -
  -        facets->put((void*) SchemaSymbols::fgELT_PATTERN,
  -                    new KVStringPair(SchemaSymbols::fgELT_PATTERN, fgLangPattern));
  -
  -        createDatatypeValidator(SchemaSymbols::fgDT_LANGUAGE,
  -                      getDatatypeValidator(SchemaSymbols::fgDT_TOKEN),
  -                      facets, 0, false, 0, false);
  -
  -        // Create 'Name' datatype validator
  -        /***
  -        facets = new RefHashTableOf<KVStringPair>(3);
  -
  -        facets->put((void*) SchemaSymbols::fgELT_PATTERN,
  -                    new KVStringPair(SchemaSymbols::fgELT_PATTERN, fgNamePattern));
  -
  -        createDatatypeValidator(SchemaSymbols::fgDT_NAME,
  -                      getDatatypeValidator(SchemaSymbols::fgDT_TOKEN),
  -                      facets, 0, false, 0, false);
  -
  -        // Create a 'NCName' datatype validator
  -        facets = new RefHashTableOf<KVStringPair>(3);
  -
  -        facets->put((void*) SchemaSymbols::fgELT_PATTERN,
  -                    new KVStringPair(SchemaSymbols::fgELT_PATTERN, fgNCNamePattern));
  -
  -        createDatatypeValidator(SchemaSymbols::fgDT_NCNAME,
  -                      getDatatypeValidator(SchemaSymbols::fgDT_TOKEN),
  -                      facets, 0, false, 0, false);
  -        ***/
  -
  -        // Create 'integer' datatype validator
  -        facets = new RefHashTableOf<KVStringPair>(3);
  -
  -        facets->put((void*) SchemaSymbols::fgELT_FRACTIONDIGITS,
  -                    new KVStringPair(SchemaSymbols::fgELT_FRACTIONDIGITS, fgValueZero));
  -
  -        createDatatypeValidator(SchemaSymbols::fgDT_INTEGER,
  -                      getDatatypeValidator(SchemaSymbols::fgDT_DECIMAL),
  -                      facets, 0, false, 0, false);
  -
  -        // Create 'nonPositiveInteger' datatype validator
  -        facets = new RefHashTableOf<KVStringPair>(2);
  -
  -        facets->put((void*) SchemaSymbols::fgELT_MAXINCLUSIVE,
  -                    new KVStringPair(SchemaSymbols::fgELT_MAXINCLUSIVE, fgValueZero));
  -
  -        createDatatypeValidator(SchemaSymbols::fgDT_NONPOSITIVEINTEGER,
  -                      getDatatypeValidator(SchemaSymbols::fgDT_INTEGER),
  -                      facets, 0, false, 0, false);
  -
  -        // Create 'negativeInteger' datatype validator
  -        facets = new RefHashTableOf<KVStringPair>(2);
  -
  -        facets->put((void*) SchemaSymbols::fgELT_MAXINCLUSIVE,
  -			        new KVStringPair(SchemaSymbols::fgELT_MAXINCLUSIVE,fgNegOne));
  -
  -        createDatatypeValidator(SchemaSymbols::fgDT_NEGATIVEINTEGER,
  -                      getDatatypeValidator(SchemaSymbols::fgDT_NONPOSITIVEINTEGER),
  -                      facets, 0, false, 0, false);
  -
  -        // Create 'long' datatype validator
  -        facets = new RefHashTableOf<KVStringPair>(2);
  -
  -        facets->put((void*) SchemaSymbols::fgELT_MAXINCLUSIVE,
  -                    new KVStringPair(SchemaSymbols::fgELT_MAXINCLUSIVE,fgLongMaxInc));
  -        facets->put((void*) SchemaSymbols::fgELT_MININCLUSIVE,
  -                    new KVStringPair(SchemaSymbols::fgELT_MININCLUSIVE,fgLongMinInc));
  -
  -        createDatatypeValidator(SchemaSymbols::fgDT_LONG,
  -                      getDatatypeValidator(SchemaSymbols::fgDT_INTEGER),
  -                      facets, 0, false, 0, false);
  -
  -        // Create 'int' datatype validator
  -        facets = new RefHashTableOf<KVStringPair>(2);
  -
  -        facets->put((void*) SchemaSymbols::fgELT_MAXINCLUSIVE,
  -                    new KVStringPair(SchemaSymbols::fgELT_MAXINCLUSIVE, fgIntMaxInc));
  -        facets->put((void*) SchemaSymbols::fgELT_MININCLUSIVE,
  -                    new KVStringPair(SchemaSymbols::fgELT_MININCLUSIVE, fgIntMinInc));
  -
  -        createDatatypeValidator(SchemaSymbols::fgDT_INT,
  -                      getDatatypeValidator(SchemaSymbols::fgDT_LONG),
  -                      facets, 0, false, 0, false);
  -
  -        // Create 'short' datatype validator
  -        facets = new RefHashTableOf<KVStringPair>(2);
  -
  -        facets->put((void*) SchemaSymbols::fgELT_MAXINCLUSIVE,
  -                    new KVStringPair(SchemaSymbols::fgELT_MAXINCLUSIVE, fgShortMaxInc));
  -        facets->put((void*) SchemaSymbols::fgELT_MININCLUSIVE,
  -                    new KVStringPair(SchemaSymbols::fgELT_MININCLUSIVE, fgShortMinInc));
  -
  -        createDatatypeValidator(SchemaSymbols::fgDT_SHORT,
  -                      getDatatypeValidator(SchemaSymbols::fgDT_INT),
  -                      facets, 0, false, 0 ,false);
  -
  -        // Create 'byte' datatype validator
  -        facets = new RefHashTableOf<KVStringPair>(2);
  -
  -        facets->put((void*) SchemaSymbols::fgELT_MAXINCLUSIVE,
  -                    new KVStringPair(SchemaSymbols::fgELT_MAXINCLUSIVE, fgByteMaxInc));
  -        facets->put((void*) SchemaSymbols::fgELT_MININCLUSIVE,
  -                    new KVStringPair(SchemaSymbols::fgELT_MININCLUSIVE, fgByteMinInc));
  -
  -        createDatatypeValidator(SchemaSymbols::fgDT_BYTE,
  -                      getDatatypeValidator(SchemaSymbols::fgDT_SHORT),
  -                      facets, 0, false, 0, false);
  -
  -        // Create 'nonNegativeInteger' datatype validator
  -        facets = new RefHashTableOf<KVStringPair>(2);
  -
  -        facets->put((void*) SchemaSymbols::fgELT_MININCLUSIVE,
  -                    new KVStringPair(SchemaSymbols::fgELT_MININCLUSIVE, fgValueZero));
  -
  -        createDatatypeValidator(SchemaSymbols::fgDT_NONNEGATIVEINTEGER,
  -                      getDatatypeValidator(SchemaSymbols::fgDT_INTEGER),
  -                      facets, 0, false, 0, false);
  -
  -        // Create 'unsignedLong' datatype validator
  -        facets = new RefHashTableOf<KVStringPair>(2);
  -
  -        facets->put((void*) SchemaSymbols::fgELT_MAXINCLUSIVE,
  -                    new KVStringPair(SchemaSymbols::fgELT_MAXINCLUSIVE, fgULongMaxInc));
  -
  -        createDatatypeValidator(SchemaSymbols::fgDT_ULONG,
  -                      getDatatypeValidator(SchemaSymbols::fgDT_NONNEGATIVEINTEGER),
  -                      facets, 0, false, 0, false);
  -
  -        // Create 'unsignedInt' datatype validator
  -        facets = new RefHashTableOf<KVStringPair>(2);
  -
  -        facets->put((void*) SchemaSymbols::fgELT_MAXINCLUSIVE,
  -                    new KVStringPair(SchemaSymbols::fgELT_MAXINCLUSIVE, fgUIntMaxInc));
  -
  -        createDatatypeValidator(SchemaSymbols::fgDT_UINT,
  -                      getDatatypeValidator(SchemaSymbols::fgDT_ULONG),
  -                      facets, 0, false, 0, false);
  -
  -        // Create 'unsignedShort' datatypeValidator
  -        facets = new RefHashTableOf<KVStringPair>(2);
  -
  -        facets->put((void*) SchemaSymbols::fgELT_MAXINCLUSIVE,
  -                    new KVStringPair(SchemaSymbols::fgELT_MAXINCLUSIVE, fgUShortMaxInc));
  -
  -        createDatatypeValidator(SchemaSymbols::fgDT_USHORT,
  -                      getDatatypeValidator(SchemaSymbols::fgDT_UINT),
  -                      facets, 0, false, 0, false);
  -
  -        // Create 'unsignedByte' datatype validator
  -        facets = new RefHashTableOf<KVStringPair>(2);
  -
  -        facets->put((void*) SchemaSymbols::fgELT_MAXINCLUSIVE,
  -                    new KVStringPair(SchemaSymbols::fgELT_MAXINCLUSIVE, fgUByteMaxInc));
  -
  -        createDatatypeValidator(SchemaSymbols::fgDT_UBYTE,
  -                      getDatatypeValidator(SchemaSymbols::fgDT_USHORT),
  -                      facets, 0, false, 0, false);
  -
  -        // Create 'positiveInteger' datatype validator
  -        facets = new RefHashTableOf<KVStringPair>(2);
  -
  -        facets->put((void*) SchemaSymbols::fgELT_MININCLUSIVE,
  -                    new KVStringPair(SchemaSymbols::fgELT_MININCLUSIVE, fgValueOne));
  -
  -        createDatatypeValidator(SchemaSymbols::fgDT_POSITIVEINTEGER,
  -                      getDatatypeValidator(SchemaSymbols::fgDT_NONNEGATIVEINTEGER),
  -                      facets, 0, false, 0, false);
  -
  -        // REVISIT - Add the remaining datatype validators
  -        // Create 'dateTime' datatype validator
  -
  -        // Create 'date' datatype validator
  -
  -        // Create 'gMonthDay' datatype validator
  -
  -        // Create 'gYearMonth' datatype validator
  -
  -        // Create 'gYear' datatype validator
  -
  -        // Create 'gMonth' datatype validator
  +		            getDatatypeValidator(XMLUni::fgEntityString), 0, 0, true, 0, true);
   
  -        fRegistryExpanded = 2;
   }
   
   // ---------------------------------------------------------------------------
  
  
  
  1.2       +51 -70    xml-xerces/c/src/xercesc/validators/datatype/DatatypeValidatorFactory.hpp
  
  Index: DatatypeValidatorFactory.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/datatype/DatatypeValidatorFactory.hpp,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- DatatypeValidatorFactory.hpp	1 Feb 2002 22:22:40 -0000	1.1
  +++ DatatypeValidatorFactory.hpp	25 Feb 2002 21:28:26 -0000	1.2
  @@ -55,7 +55,7 @@
    */
   
   /*
  - * $Id: DatatypeValidatorFactory.hpp,v 1.1 2002/02/01 22:22:40 peiyongz Exp $
  + * $Id: DatatypeValidatorFactory.hpp,v 1.2 2002/02/25 21:28:26 tng Exp $
    */
   
   #if !defined(DATATYPEVALIDATORFACTORY_HPP)
  @@ -74,7 +74,7 @@
    * facets and registering the Datatype into registry table.
    * This implementation uses a Hahtable as a registry. The datatype validators created
    * by the factory will be deleted by the registry.
  - * 
  + *
    * As the Parser parses an instance document it knows if validation needs
    * to be checked. If no validation is necesary we should not instantiate a
    * DatatypeValidatorFactory.
  @@ -99,7 +99,7 @@
   {
   public:
   
  -	// -----------------------------------------------------------------------
  +    // -----------------------------------------------------------------------
       //  Public Constructors and Destructor
       // -----------------------------------------------------------------------
       /** @name Constructors */
  @@ -107,14 +107,14 @@
   
       DatatypeValidatorFactory();
   
  -	//@}
  +    //@}
   
  -	/** @name Destructor. */
  +    /** @name Destructor. */
       //@{
   
       ~DatatypeValidatorFactory();
   
  -	//@}
  +    //@}
   
       // -----------------------------------------------------------------------
       // Getter methods
  @@ -123,11 +123,11 @@
       //@{
   
       /**
  -      * Returns the datatype validator
  -	  *
  -	  * @param  dvType   Datatype validator name/type
  -	  */
  -	DatatypeValidator* getDatatypeValidator(const XMLCh* const dvType) const;
  +     * Returns the datatype validator
  +     *
  +     * @param  dvType   Datatype validator name/type
  +     */
  +    DatatypeValidator* getDatatypeValidator(const XMLCh* const dvType) const;
   
       //@}
   
  @@ -138,67 +138,52 @@
       //@{
   
       /**
  -	  * Initializes registry with primitive and derived Simple types.
  -      * 
  -      * This method does not clear the registry to clear the registry you 
  -	  * have to call resetRegistry.
  -      * 
  -      * The net effect of this method is to start with a the smallest set of 
  -	  * datatypes needed by the validator.
  -	  *
  -	  * If we start with DTD's, then we initialize the table to only 
  -	  * the 9 validators needed by DTD Validation.
  -	  */
  -	void initializeDTDRegistry();
  -
  -	/**
  -	  * Initializes registry with primitive and derived Simple types.
  -      * 
  -      * This method does not clear the registry to clear the registry you 
  -	  * have to call resetRegistry.
  -      * 
  -      * The net effect of this method is to start with a the smallest set of 
  -	  * datatypes needed by the validator.
  -	  *
  -      * If we start with Schema's then we initialize to to full set of 
  -	  * validators.	  
  -	  */
  -	void expandRegistryToFullSchemaSet();
  -
  -	//@}
  +     * Initializes registry with primitive and derived Simple types.
  +     *
  +     * This method does not clear the registry to clear the registry you
  +     * have to call resetRegistry.
  +     *
  +     * The net effect of this method is to start with the smallest set of
  +     * datatypes needed by the validator.
  +     *
  +     * If we start with Schema's then we initialize to full set of
  +     * validators.	
  +     */
  +    void expandRegistryToFullSchemaSet();
   
  +    //@}
       // -----------------------------------------------------------------------
       // Validator Factory methods
       // -----------------------------------------------------------------------
       /** @name Validator Factory Functions */
       //@{
   
  -    /** 
  -      * Creates a new datatype validator of type baseValidator's class and
  -      * adds it to the registry
  -      *
  -      * @param  typeName       Datatype validator name
  -      *
  -      * @param  baseValidator  Base datatype validator
  -      *
  -      * @param  facets         datatype facets if any
  -      *
  -      * @param  enums          vector of values for enum facet
  -      *
  -      * @param  derivedByList  Indicates whether the datatype is derived by
  -	  *                        list or not
  -      *
  -      * @param  finalSet       'final' values of the simpleType
  -	  */
  -	DatatypeValidator* createDatatypeValidator(const XMLCh* const,
  -		                                       DatatypeValidator* const,
  +    /**
  +     * Creates a new datatype validator of type baseValidator's class and
  +     * adds it to the registry
  +     *
  +     * @param  typeName       Datatype validator name
  +     *
  +     * @param  baseValidator  Base datatype validator
  +     *
  +     * @param  facets         datatype facets if any
  +     *
  +     * @param  enums          vector of values for enum facet
  +     *
  +     * @param  derivedByList  Indicates whether the datatype is derived by
  +     *                        list or not
  +     *
  +     * @param  finalSet       'final' values of the simpleType
  +     */
  +     DatatypeValidator* createDatatypeValidator(const XMLCh* const,
  +                                               DatatypeValidator* const,
                                                  RefHashTableOf<KVStringPair>* const,
                                                  RefVectorOf<XMLCh>* const enums,
                                                  const bool,
                                                  const int = 0,
                                                  const bool = true);
   
  -    /** 
  +    /**
         * Creates a new datatype validator of type UnionDatatypeValidator and
         * adds it to the registry
         *
  @@ -212,30 +197,27 @@
                                                  const int finalSet,
                                                  const bool = true);
   
  -	//@}
  +    //@}
   
       /**
         * Reset datatype validator registry
         */
  -	void resetRegistry();
  +    void resetRegistry();
   
  -	// -----------------------------------------------------------------------
  +    // -----------------------------------------------------------------------
       //  Notification that lazy data has been deleted
       // -----------------------------------------------------------------------
  -	static void reinitRegistry();
  +    static void reinitRegistry();
   
   private:
       // -----------------------------------------------------------------------
       //  CleanUp methods
       // -----------------------------------------------------------------------
  -	void cleanUp();
  +    void cleanUp();
   
       // -----------------------------------------------------------------------
       //  Private data members
       //
  -    //  fRegistryExpanded
  -    //      Indicated whether we have expanded the registry or not.
  -	//		
       //  fUserDefinedRegistry
       //      This is a hashtable of user defined dataype validators.
       //
  @@ -243,15 +225,14 @@
       //      This is a hashtable of built-in primitive datatype validators.
       // -----------------------------------------------------------------------
       RefHashTableOf<DatatypeValidator>*        fUserDefinedRegistry;
  -	static int                                fRegistryExpanded;
  -	static RefHashTableOf<DatatypeValidator>* fBuiltInRegistry;
  +    static RefHashTableOf<DatatypeValidator>* fBuiltInRegistry;
   };
   
   
   // ---------------------------------------------------------------------------
   //  DatatypeValidatorFactory: Getters
   // ---------------------------------------------------------------------------
  -inline DatatypeValidator* 
  +inline DatatypeValidator*
   DatatypeValidatorFactory::getDatatypeValidator(const XMLCh* const dvType) const
   {
   	if (dvType) {
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-cvs-help@xml.apache.org