void DatatypeValidator::serialize(XSerializeEngine& serEng) { if (serEng.isStoring()) { serEng<<fAnonymous; serEng<<fFinite; serEng<<fBounded; serEng<<fNumeric; serEng<<fWhiteSpace; serEng<<fFinalSet; serEng<<fFacetsDefined; serEng<<fFixed; serEng<<(int)fType; serEng<<(int)fOrdered; storeDV(serEng, fBaseValidator); /*** * Serialize RefHashTableOf<KVStringPair> ***/ XTemplateSerializer::storeObject(fFacets, serEng); serEng.writeString(fPattern); if (fTypeUri==XMLUni::fgZeroLenString) { serEng<<TYPENAME_ZERO; } else if (fTypeUri == SchemaSymbols::fgURI_SCHEMAFORSCHEMA) { serEng<<TYPENAME_S4S; serEng.writeString(fTypeLocalName); } else { serEng<<TYPENAME_NORMAL; serEng.writeString(fTypeLocalName); serEng.writeString(fTypeUri); } /*** * don't serialize * fRegex ***/ } else { serEng>>fAnonymous; serEng>>fFinite; serEng>>fBounded; serEng>>fNumeric; serEng>>fWhiteSpace; serEng>>fFinalSet; serEng>>fFacetsDefined; serEng>>fFixed; int type; serEng>>type; fType=(ValidatorType)type; serEng>>type; fOrdered = (XSSimpleTypeDefinition::ORDERING)type; fBaseValidator = loadDV(serEng); /*** * * Deserialize RefHashTableOf<KVStringPair> * ***/ XTemplateSerializer::loadObject(&fFacets, 29, true, serEng); serEng.readString(fPattern); /*** * Recreate through setTypeName() * fTypeName ***/ int flag; serEng>>flag; if ( TYPENAME_ZERO == flag ) { setTypeName(0); } else if ( TYPENAME_S4S == flag ) { XMLCh* typeLocalName; serEng.readString(typeLocalName); ArrayJanitor<XMLCh> janName(typeLocalName, fMemoryManager); setTypeName(typeLocalName); } else // TYPENAME_NORMAL { XMLCh* typeLocalName; serEng.readString(typeLocalName); ArrayJanitor<XMLCh> janName(typeLocalName, fMemoryManager); XMLCh* typeUri; serEng.readString(typeUri); ArrayJanitor<XMLCh> janUri(typeUri, fMemoryManager); setTypeName(typeLocalName, typeUri); } /*** * don't serialize fRegex ***/ fRegex = new (fMemoryManager) RegularExpression(fPattern, SchemaSymbols::fgRegEx_XOption, fMemoryManager); } }
void DatatypeValidator::serialize(XSerializeEngine& serEng) { if (serEng.isStoring()) { serEng<<fAnonymous; serEng<<fWhiteSpace; serEng<<fFinalSet; serEng<<fFacetsDefined; serEng<<fFixed; serEng<<(int)fType; serEng<<(int)fOrdered; serEng<<fFinite; serEng<<fBounded; serEng<<fNumeric; /*** * don't serialize the fBaseValidator if it is a built-in ***/ if (isBuiltInDV(fBaseValidator)) { serEng<<true; serEng.writeString(fBaseValidator->getTypeName()); } else { serEng<<false; storeDV(serEng, fBaseValidator); } /*** * Serialize RefHashTableOf<KVStringPair> ***/ XTemplateSerializer::storeObject(fFacets, serEng); serEng.writeString(fPattern); /*** * don't serialize * fRegex * fTypeLocalName * fTypeUri ***/ serEng.writeString(fTypeName); } else { serEng>>fAnonymous; serEng>>fWhiteSpace; serEng>>fFinalSet; serEng>>fFacetsDefined; serEng>>fFixed; int type; serEng>>type; fType=(ValidatorType)type; serEng>>type; fOrdered = (XSSimpleTypeDefinition::ORDERING)type; serEng>>fFinite; serEng>>fBounded; serEng>>fNumeric; /*** * * get the basevalidator's type * ***/ bool isBuiltInDV = false; serEng>>isBuiltInDV; if (isBuiltInDV) { XMLCh* baseTypeName; serEng.readString(baseTypeName); ArrayJanitor<XMLCh> janName(baseTypeName, fMemoryManager); /*** * Link to the fBuiltInRegistry * * Since DatatypeValidatorFactory is always the first one * to be deserialized in SchemaGrammar, we are sure that * the BuiltInRegistry shall be available now. ***/ fBaseValidator = DatatypeValidatorFactory::getBuiltInRegistry()->get(baseTypeName); } else { fBaseValidator = loadDV(serEng); } /*** * * Deserialize RefHashTableOf<KVStringPair> * ***/ XTemplateSerializer::loadObject(&fFacets, 29, true, serEng); serEng.readString(fPattern); /*** * don't serialize fRegex ***/ fRegex = 0; /*** * Recreate through setTypeName() * fTypeName * fTypeLocalName * fTypeUri ***/ XMLCh* typeName; serEng.readString(typeName); ArrayJanitor<XMLCh> janName(typeName, fMemoryManager); setTypeName(typeName); } }