peiyongz 2003/09/29 14:47:35 Modified: c/src/xercesc/validators/datatype AbstractStringValidator.cpp AbstractStringValidator.hpp DatatypeValidator.cpp DatatypeValidator.hpp StringDatatypeValidator.cpp StringDatatypeValidator.hpp Log: Implementation of Serialization/Deserialization Revision Changes Path 1.13 +75 -0 xml-xerces/c/src/xercesc/validators/datatype/AbstractStringValidator.cpp Index: AbstractStringValidator.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/datatype/AbstractStringValidator.cpp,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- AbstractStringValidator.cpp 16 May 2003 06:01:57 -0000 1.12 +++ AbstractStringValidator.cpp 29 Sep 2003 21:47:35 -0000 1.13 @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.13 2003/09/29 21:47:35 peiyongz + * Implementation of Serialization/Deserialization + * * Revision 1.12 2003/05/16 06:01:57 knoaman * Partial implementation of the configurable memory manager. * @@ -739,6 +742,78 @@ { // default implementation: do nothing return; +} + +/*** + * Support for Serialization/De-serialization + ***/ + +IMPL_XSERIALIZABLE_NOCREATE(AbstractStringValidator) + +void AbstractStringValidator::serialize(XSerializeEngine& serEng) +{ + + DatatypeValidator::serialize(serEng); + + if (serEng.isStoring()) + { + serEng<<fLength; + serEng<<fMaxLength; + serEng<<fMinLength; + serEng<<fEnumerationInherited; + + /*** + * + * Serialize RefArrayVectorOf<XMLCh> + * + ***/ + if (getEnumeration()) + { + int enumLength = getEnumeration()->size(); + serEng<<enumLength; + for ( int i = 0 ; i < enumLength; i++) + { + serEng.writeString(getEnumeration()->elementAt(i)); + } + } + else + { + serEng<<0; + } + + } + else + { + serEng>>fLength; + serEng>>fMaxLength; + serEng>>fMinLength; + serEng>>fEnumerationInherited; + + /*** + * + * Deserialize RefArrayVectorOf<XMLCh> + * + ***/ + int enumLength = 0;; + serEng>>enumLength; + + if (enumLength) + { + if (!fEnumeration) + { + fEnumeration = new (fMemoryManager) RefArrayVectorOf<XMLCh>(8, true, fMemoryManager); + } + + for ( int i = 0; i < enumLength; i++) + { + XMLCh* enumVal; + serEng.readString(enumVal); + fEnumeration->addElement(enumVal); + } + } + + } + } XERCES_CPP_NAMESPACE_END 1.9 +9 -1 xml-xerces/c/src/xercesc/validators/datatype/AbstractStringValidator.hpp Index: AbstractStringValidator.hpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/datatype/AbstractStringValidator.hpp,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- AbstractStringValidator.hpp 15 May 2003 18:53:26 -0000 1.8 +++ AbstractStringValidator.hpp 29 Sep 2003 21:47:35 -0000 1.9 @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.9 2003/09/29 21:47:35 peiyongz + * Implementation of Serialization/Deserialization + * * Revision 1.8 2003/05/15 18:53:26 knoaman * Partial implementation of the configurable memory manager. * @@ -170,6 +173,11 @@ virtual int compare(const XMLCh* const, const XMLCh* const); //@} + + /*** + * Support for Serialization/De-serialization + ***/ + DECL_XSERIALIZABLE(AbstractStringValidator) protected: 1.7 +344 -0 xml-xerces/c/src/xercesc/validators/datatype/DatatypeValidator.cpp Index: DatatypeValidator.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/datatype/DatatypeValidator.cpp,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- DatatypeValidator.cpp 15 May 2003 18:53:26 -0000 1.6 +++ DatatypeValidator.cpp 29 Sep 2003 21:47:35 -0000 1.7 @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.7 2003/09/29 21:47:35 peiyongz + * Implementation of Serialization/Deserialization + * * Revision 1.6 2003/05/15 18:53:26 knoaman * Partial implementation of the configurable memory manager. * @@ -104,8 +107,42 @@ #include <xercesc/validators/datatype/DatatypeValidator.hpp> #include <xercesc/framework/MemoryManager.hpp> +//since we need to dynamically created each and every derivatives +//during deserialization by XSerializeEngine>>Derivative, we got +//to include all hpp + +#include <xercesc/validators/datatype/StringDatatypeValidator.hpp> +#include <xercesc/validators/datatype/AnyURIDatatypeValidator.hpp> +#include <xercesc/validators/datatype/QNameDatatypeValidator.hpp> +#include <xercesc/validators/datatype/NameDatatypeValidator.hpp> +#include <xercesc/validators/datatype/NCNameDatatypeValidator.hpp> +#include <xercesc/validators/datatype/BooleanDatatypeValidator.hpp> +#include <xercesc/validators/datatype/FloatDatatypeValidator.hpp> +#include <xercesc/validators/datatype/DoubleDatatypeValidator.hpp> +#include <xercesc/validators/datatype/DecimalDatatypeValidator.hpp> +#include <xercesc/validators/datatype/HexBinaryDatatypeValidator.hpp> +#include <xercesc/validators/datatype/Base64BinaryDatatypeValidator.hpp> +#include <xercesc/validators/datatype/DurationDatatypeValidator.hpp> +#include <xercesc/validators/datatype/DateTimeDatatypeValidator.hpp> +#include <xercesc/validators/datatype/DateDatatypeValidator.hpp> +#include <xercesc/validators/datatype/TimeDatatypeValidator.hpp> +#include <xercesc/validators/datatype/MonthDayDatatypeValidator.hpp> +#include <xercesc/validators/datatype/YearMonthDatatypeValidator.hpp> +#include <xercesc/validators/datatype/YearDatatypeValidator.hpp> +#include <xercesc/validators/datatype/MonthDatatypeValidator.hpp> +#include <xercesc/validators/datatype/DayDatatypeValidator.hpp> +#include <xercesc/validators/datatype/IDDatatypeValidator.hpp> +#include <xercesc/validators/datatype/IDREFDatatypeValidator.hpp> +#include <xercesc/validators/datatype/ENTITYDatatypeValidator.hpp> +#include <xercesc/validators/datatype/NOTATIONDatatypeValidator.hpp> +#include <xercesc/validators/datatype/ListDatatypeValidator.hpp> +#include <xercesc/validators/datatype/UnionDatatypeValidator.hpp> +#include <xercesc/validators/datatype/AnySimpleTypeDatatypeValidator.hpp> + XERCES_CPP_NAMESPACE_BEGIN + + // --------------------------------------------------------------------------- // DatatypeValidator: Constructors and Destructor // --------------------------------------------------------------------------- @@ -235,6 +272,313 @@ fMemoryManager->deallocate(fTypeName); } +/*** + * Support for Serialization/De-serialization + ***/ + +IMPL_XSERIALIZABLE_NOCREATE(DatatypeValidator) + +void DatatypeValidator::serialize(XSerializeEngine& serEng) +{ + + if (serEng.isStoring()) + { + serEng<<fAnonymous; + serEng<<fFinalSet; + serEng<<fFacetsDefined; + serEng<<fFixed; + serEng<<(int)fType; + + /*** + * + * When deserialized, we need to know, exactly what + * validator was serialized here. + * + ***/ + if (fBaseValidator) + { + serEng<<(int) (fBaseValidator->getType()); + serEng<<fBaseValidator; + } + else + { + serEng<<(int) UnKnown; + } + + /*** + * Serialize RefHashTableOf<KVStringPair> + * + * Since the RefHashTableOf does not privide a size() method + * We have to traverse extra time to gather this information + * first, and then the second time for actual serialization. + * + * We only need to serialize KVStringPair, when deserialize, + * the KVStringPair.key() can be used as the key to the hash table. + * + ***/ + if (fFacets) + { + int itemNumber = 0; + + RefHashTableOfEnumerator<KVStringPair> e(fFacets); + while (e.hasMoreElements()) + { + e.nextElement(); + itemNumber++; + } + + serEng<<itemNumber; + + e.Reset(); + while (e.hasMoreElements()) + { + KVStringPair& curPair = e.nextElement(); + curPair.serialize(serEng); + } + } + else + { + serEng<<0; + } + + serEng.writeString(fPattern); + + /*** + * don't serialize fRegex + ***/ + + serEng.writeString(fTypeName); + serEng.writeString(fTypeLocalName); + serEng.writeString(fTypeUri); + } + else + { + int dataLen = 0; + + serEng>>fAnonymous; + serEng>>fFinalSet; + serEng>>fFacetsDefined; + serEng>>fFixed; + + int type; + serEng>>type; + fType=(ValidatorType)type; + + /*** + * + * get the basevalidator's type + * + ***/ + + serEng>>type; + + switch((ValidatorType)type) + { + case String: + StringDatatypeValidator* stringdv; + serEng>>stringdv; + fBaseValidator = stringdv; + break; + case AnyURI: + AnyURIDatatypeValidator* anyuridv; + //TODO + //serEng>>anyuridv; + fBaseValidator = anyuridv; + break; + case QName: + QNameDatatypeValidator* qnamedv; + //TODO + //serEng>>qnamedv; + fBaseValidator = qnamedv; + break; + case Name: + NameDatatypeValidator* namedv; + //TODO + //serEng>>namedv; + fBaseValidator = namedv; + break; + case NCName: + NCNameDatatypeValidator* ncnamedv; + //TODO + //serEng>>ncnamedv; + fBaseValidator = ncnamedv; + break; + case Boolean: + BooleanDatatypeValidator* booleandv; + //TODO + //serEng>>booleandv; + fBaseValidator = booleandv; + break; + case Float: + FloatDatatypeValidator* floatdv; + //TODO + //serEng>>floatdv; + fBaseValidator = floatdv; + break; + case Double: + DoubleDatatypeValidator* doubledv; + //TODO + //serEng>>doubledv; + fBaseValidator = doubledv; + break; + case Decimal: + DecimalDatatypeValidator* decimaldv; + //TODO + //serEng>>decimaldv; + fBaseValidator = decimaldv; + break; + case HexBinary: + HexBinaryDatatypeValidator* hexbinarydv; + //TODO + //serEng>>hexbinarydv; + fBaseValidator = hexbinarydv; + break; + case Base64Binary: + Base64BinaryDatatypeValidator* base64binarydv; + //TODO + //serEng>>base64binarydv; + fBaseValidator = base64binarydv; + break; + case Duration: + DurationDatatypeValidator* durationdv; + //TODO + //serEng>>durationdv; + fBaseValidator = durationdv; + break; + case DateTime: + DateTimeDatatypeValidator* datetimedv; + //TODO + //serEng>>datetimedv; + fBaseValidator = datetimedv; + break; + case Date: + DateDatatypeValidator* datedv; + //TODO + //serEng>>datedv; + fBaseValidator = datedv; + break; + case Time: + TimeDatatypeValidator* timedv; + //TODO + //serEng>>timedv; + fBaseValidator = timedv; + break; + case MonthDay: + MonthDayDatatypeValidator* monthdaydv; + //TODO + //serEng>>monthdaydv; + fBaseValidator = monthdaydv; + break; + case YearMonth: + YearMonthDatatypeValidator* yearmonthdv; + //TODO + //serEng>>yearmonthdv; + fBaseValidator = yearmonthdv; + break; + case Year: + YearDatatypeValidator* yeardv; + //TODO + //serEng>>yeardv; + fBaseValidator = yeardv; + break; + case Month: + MonthDatatypeValidator* monthdv; + //TODO + //serEng>>monthdv; + fBaseValidator = monthdv; + break; + case Day: + DayDatatypeValidator* daydv; + //TODO + //serEng>>daydv; + fBaseValidator = daydv; + break; + case ID: + IDDatatypeValidator* iddv; + //TODO + //serEng>>iddv; + fBaseValidator = iddv; + break; + case IDREF: + IDREFDatatypeValidator* idrefdv; + //TODO + //serEng>>idrefdv; + fBaseValidator = idrefdv; + break; + case ENTITY: + ENTITYDatatypeValidator* entitydv; + //TODO + //serEng>>entitydv; + fBaseValidator = entitydv; + break; + case NOTATION: + NOTATIONDatatypeValidator* notationdv; + //TODO + //serEng>>notationdv; + fBaseValidator = notationdv; + break; + case List: + ListDatatypeValidator* listdv; + //TODO + //serEng>>listdv; + fBaseValidator = listdv; + break; + case Union: + UnionDatatypeValidator* uniondv; + //TODO + //serEng>>uniondv; + fBaseValidator = uniondv; + break; + case AnySimpleType: + AnySimpleTypeDatatypeValidator* anysimpletypedv; + //TODO + //serEng>>anysimpletypedv; + fBaseValidator = anysimpletypedv; + break; + case UnKnown: + fBaseValidator = 0; + break; + default: //we treat this same as UnKnown + fBaseValidator = 0; + break; + } + + /*** + * Deserialize RefHashTableOf<KVStringPair> + * + ***/ + int itemNumber = 0; + serEng>>itemNumber; + + if (itemNumber) + { + if (!fFacets) + { + fFacets = new (fMemoryManager) RefHashTableOf<KVStringPair>(3, fMemoryManager); + } + + for (int itemIndex = 0; itemIndex < itemNumber; itemIndex++) + { + KVStringPair* data = new (fMemoryManager) KVStringPair(fMemoryManager); + data->serialize(serEng); + fFacets->put((void*) data->getKey(), data); + } + } + + serEng.readString(fPattern); + + /*** + * don't serialize fRegex + ***/ + fRegex = 0; + + serEng.readString(fTypeName); + serEng.readString((XMLCh*&)fTypeLocalName); + serEng.readString((XMLCh*&)fTypeUri); + + } + +} XERCES_CPP_NAMESPACE_END 1.13 +10 -3 xml-xerces/c/src/xercesc/validators/datatype/DatatypeValidator.hpp Index: DatatypeValidator.hpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/datatype/DatatypeValidator.hpp,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- DatatypeValidator.hpp 15 May 2003 18:53:26 -0000 1.12 +++ DatatypeValidator.hpp 29 Sep 2003 21:47:35 -0000 1.13 @@ -68,6 +68,7 @@ #include <xercesc/util/regx/RegularExpression.hpp> #include <xercesc/validators/schema/SchemaSymbols.hpp> +#include <xercesc/internal/XSerializable.hpp> XERCES_CPP_NAMESPACE_BEGIN @@ -89,7 +90,7 @@ */ -class VALIDATORS_EXPORT DatatypeValidator : public XMemory +class VALIDATORS_EXPORT DatatypeValidator : public XSerializable, public XMemory { public: // ----------------------------------------------------------------------- @@ -148,7 +149,8 @@ NOTATION, List, Union, - AnySimpleType + AnySimpleType, + UnKnown }; // ----------------------------------------------------------------------- @@ -312,6 +314,11 @@ * Returns the plugged-in memory manager */ MemoryManager* getMemoryManager() const; + + /*** + * Support for Serialization/De-serialization + ***/ + DECL_XSERIALIZABLE(DatatypeValidator) protected: // ----------------------------------------------------------------------- 1.6 +14 -0 xml-xerces/c/src/xercesc/validators/datatype/StringDatatypeValidator.cpp Index: StringDatatypeValidator.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/datatype/StringDatatypeValidator.cpp,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- StringDatatypeValidator.cpp 15 May 2003 18:53:27 -0000 1.5 +++ StringDatatypeValidator.cpp 29 Sep 2003 21:47:35 -0000 1.6 @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.6 2003/09/29 21:47:35 peiyongz + * Implementation of Serialization/Deserialization + * * Revision 1.5 2003/05/15 18:53:27 knoaman * Partial implementation of the configurable memory manager. * @@ -295,6 +298,17 @@ int StringDatatypeValidator::getLength(const XMLCh* const content) const { return XMLString::stringLen(content); +} + +/*** + * Support for Serialization/De-serialization + ***/ + +IMPL_XSERIALIZABLE_TOCREATE(StringDatatypeValidator) + +void StringDatatypeValidator::serialize(XSerializeEngine& serEng) +{ + AbstractStringValidator::serialize(serEng); } XERCES_CPP_NAMESPACE_END 1.5 +9 -1 xml-xerces/c/src/xercesc/validators/datatype/StringDatatypeValidator.hpp Index: StringDatatypeValidator.hpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/datatype/StringDatatypeValidator.hpp,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- StringDatatypeValidator.hpp 15 May 2003 18:53:27 -0000 1.4 +++ StringDatatypeValidator.hpp 29 Sep 2003 21:47:35 -0000 1.5 @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.5 2003/09/29 21:47:35 peiyongz + * Implementation of Serialization/Deserialization + * * Revision 1.4 2003/05/15 18:53:27 knoaman * Partial implementation of the configurable memory manager. * @@ -140,6 +143,11 @@ , const int finalSet , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager ); + + /*** + * Support for Serialization/De-serialization + ***/ + DECL_XSERIALIZABLE(StringDatatypeValidator) protected:
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]