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]