You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by pe...@apache.org on 2003/10/07 21:39:37 UTC
cvs commit: xml-xerces/c/src/xercesc/validators/datatype AbstractNumericFacetValidator.cpp AbstractStringValidator.cpp DatatypeValidator.cpp DatatypeValidator.hpp
peiyongz 2003/10/07 12:39:37
Modified: c/src/xercesc/validators/datatype
AbstractNumericFacetValidator.cpp
AbstractStringValidator.cpp DatatypeValidator.cpp
DatatypeValidator.hpp
Log:
Use of Template_Class Object Serialization/Deserialization API
Revision Changes Path
1.14 +16 -19 xml-xerces/c/src/xercesc/validators/datatype/AbstractNumericFacetValidator.cpp
Index: AbstractNumericFacetValidator.cpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/datatype/AbstractNumericFacetValidator.cpp,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- AbstractNumericFacetValidator.cpp 2 Oct 2003 19:21:06 -0000 1.13
+++ AbstractNumericFacetValidator.cpp 7 Oct 2003 19:39:37 -0000 1.14
@@ -57,6 +57,9 @@
/*
* $Id$
* $Log$
+ * Revision 1.14 2003/10/07 19:39:37 peiyongz
+ * Use of Template_Class Object Serialization/Deserialization API
+ *
* Revision 1.13 2003/10/02 19:21:06 peiyongz
* Implementation of Serialization/Deserialization
*
@@ -908,7 +911,7 @@
/***
* Serialize RefArrayVectorOf<XMLCh>
***/
- if (fStrEnumeration)
+ if (serEng.needToWriteTemplateObject(fStrEnumeration))
{
int enumLength = fStrEnumeration->size();
serEng<<enumLength;
@@ -918,15 +921,11 @@
serEng.writeString(fStrEnumeration->elementAt(i));
}
}
- else
- {
- serEng<<0;
- }
/***
* Serialize RefVectorOf<XMLNumber>
***/
- if (fEnumeration)
+ if (serEng.needToWriteTemplateObject(fEnumeration))
{
int enumLength = fEnumeration->size();
serEng<<enumLength;
@@ -936,10 +935,6 @@
serEng<<fEnumeration->elementAt(i);
}
}
- else
- {
- serEng<<0;
- }
}
else
@@ -966,16 +961,17 @@
/***
* Deserialize RefArrayVectorOf<XMLCh>
***/
- int enumLength = 0;;
- serEng>>enumLength;
-
- if (enumLength)
+ if (serEng.needToReadTemplateObject((void**)&fStrEnumeration))
{
if (!fStrEnumeration)
{
fStrEnumeration = new (fMemoryManager) RefArrayVectorOf<XMLCh>(8, true, fMemoryManager);
}
+ serEng.registerTemplateObject(fStrEnumeration);
+
+ int enumLength = 0;
+ serEng>>enumLength;
for ( int i = 0; i < enumLength; i++)
{
XMLCh* enumVal;
@@ -987,16 +983,17 @@
/***
* Deserialize RefVectorOf<XMLNumber>
***/
- enumLength = 0;;
- serEng>>enumLength;
-
- if (enumLength)
+ if (serEng.needToReadTemplateObject((void**)&fEnumeration))
{
if (!fEnumeration)
{
fEnumeration = new (fMemoryManager) RefVectorOf<XMLNumber>(8, true, fMemoryManager);
}
+ serEng.registerTemplateObject(fEnumeration);
+
+ int enumLength = 0;
+ serEng>>enumLength;
for ( int i = 0; i < enumLength; i++)
{
fEnumeration->addElement(readNumber(numType, serEng));
1.14 +12 -11 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.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- AbstractStringValidator.cpp 29 Sep 2003 21:47:35 -0000 1.13
+++ AbstractStringValidator.cpp 7 Oct 2003 19:39:37 -0000 1.14
@@ -56,6 +56,9 @@
/*
* $Log$
+ * Revision 1.14 2003/10/07 19:39:37 peiyongz
+ * Use of Template_Class Object Serialization/Deserialization API
+ *
* Revision 1.13 2003/09/29 21:47:35 peiyongz
* Implementation of Serialization/Deserialization
*
@@ -767,19 +770,16 @@
* Serialize RefArrayVectorOf<XMLCh>
*
***/
- if (getEnumeration())
+ if (serEng.needToWriteTemplateObject(fEnumeration))
{
- int enumLength = getEnumeration()->size();
+ int enumLength = fEnumeration->size();
serEng<<enumLength;
+
for ( int i = 0 ; i < enumLength; i++)
{
- serEng.writeString(getEnumeration()->elementAt(i));
+ serEng.writeString(fEnumeration->elementAt(i));
}
}
- else
- {
- serEng<<0;
- }
}
else
@@ -794,16 +794,17 @@
* Deserialize RefArrayVectorOf<XMLCh>
*
***/
- int enumLength = 0;;
- serEng>>enumLength;
-
- if (enumLength)
+ if (serEng.needToReadTemplateObject((void**)&fEnumeration))
{
if (!fEnumeration)
{
fEnumeration = new (fMemoryManager) RefArrayVectorOf<XMLCh>(8, true, fMemoryManager);
}
+ serEng.registerTemplateObject(fEnumeration);
+
+ int enumLength = 0;
+ serEng>>enumLength;
for ( int i = 0; i < enumLength; i++)
{
XMLCh* enumVal;
1.12 +197 -175 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.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- DatatypeValidator.cpp 2 Oct 2003 19:20:19 -0000 1.11
+++ DatatypeValidator.cpp 7 Oct 2003 19:39:37 -0000 1.12
@@ -56,6 +56,9 @@
/*
* $Log$
+ * Revision 1.12 2003/10/07 19:39:37 peiyongz
+ * Use of Template_Class Object Serialization/Deserialization API
+ *
* Revision 1.11 2003/10/02 19:20:19 peiyongz
* fWhiteSpace added; more dv serialization support added
*
@@ -303,21 +306,7 @@
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;
- }
+ storeDV(serEng, fBaseValidator);
/***
* Serialize RefHashTableOf<KVStringPair>
@@ -330,7 +319,7 @@
* the KVStringPair.key() can be used as the key to the hash table.
*
***/
- if (fFacets)
+ if (serEng.needToWriteTemplateObject(fFacets))
{
int itemNumber = 0;
@@ -350,10 +339,6 @@
curPair.serialize(serEng);
}
}
- else
- {
- serEng<<0;
- }
serEng.writeString(fPattern);
@@ -384,171 +369,25 @@
* get the basevalidator's type
*
***/
-
- serEng>>type;
-
- switch((ValidatorType)type)
- {
- case String:
- StringDatatypeValidator* stringdv;
- serEng>>stringdv;
- fBaseValidator = stringdv;
- break;
- case AnyURI:
- AnyURIDatatypeValidator* anyuridv;
- serEng>>anyuridv;
- fBaseValidator = anyuridv;
- break;
- case QName:
- QNameDatatypeValidator* qnamedv;
- serEng>>qnamedv;
- fBaseValidator = qnamedv;
- break;
- case Name:
- NameDatatypeValidator* namedv;
- serEng>>namedv;
- fBaseValidator = namedv;
- break;
- case NCName:
- NCNameDatatypeValidator* ncnamedv;
- serEng>>ncnamedv;
- fBaseValidator = ncnamedv;
- break;
- case Boolean:
- BooleanDatatypeValidator* booleandv;
- //TODO
- //serEng>>booleandv;
- fBaseValidator = booleandv;
- break;
- case Float:
- FloatDatatypeValidator* floatdv;
- serEng>>floatdv;
- fBaseValidator = floatdv;
- break;
- case Double:
- DoubleDatatypeValidator* doubledv;
- serEng>>doubledv;
- fBaseValidator = doubledv;
- break;
- case Decimal:
- DecimalDatatypeValidator* decimaldv;
- serEng>>decimaldv;
- fBaseValidator = decimaldv;
- break;
- case HexBinary:
- HexBinaryDatatypeValidator* hexbinarydv;
- serEng>>hexbinarydv;
- fBaseValidator = hexbinarydv;
- break;
- case Base64Binary:
- Base64BinaryDatatypeValidator* base64binarydv;
- serEng>>base64binarydv;
- fBaseValidator = base64binarydv;
- break;
- case Duration:
- DurationDatatypeValidator* durationdv;
- serEng>>durationdv;
- fBaseValidator = durationdv;
- break;
- case DateTime:
- DateTimeDatatypeValidator* datetimedv;
- serEng>>datetimedv;
- fBaseValidator = datetimedv;
- break;
- case Date:
- DateDatatypeValidator* datedv;
- serEng>>datedv;
- fBaseValidator = datedv;
- break;
- case Time:
- TimeDatatypeValidator* timedv;
- serEng>>timedv;
- fBaseValidator = timedv;
- break;
- case MonthDay:
- MonthDayDatatypeValidator* monthdaydv;
- serEng>>monthdaydv;
- fBaseValidator = monthdaydv;
- break;
- case YearMonth:
- YearMonthDatatypeValidator* yearmonthdv;
- serEng>>yearmonthdv;
- fBaseValidator = yearmonthdv;
- break;
- case Year:
- YearDatatypeValidator* yeardv;
- serEng>>yeardv;
- fBaseValidator = yeardv;
- break;
- case Month:
- MonthDatatypeValidator* monthdv;
- serEng>>monthdv;
- fBaseValidator = monthdv;
- break;
- case Day:
- DayDatatypeValidator* daydv;
- serEng>>daydv;
- fBaseValidator = daydv;
- break;
- case ID:
- IDDatatypeValidator* iddv;
- serEng>>iddv;
- fBaseValidator = iddv;
- break;
- case IDREF:
- IDREFDatatypeValidator* idrefdv;
- serEng>>idrefdv;
- fBaseValidator = idrefdv;
- break;
- case ENTITY:
- ENTITYDatatypeValidator* entitydv;
- serEng>>entitydv;
- fBaseValidator = entitydv;
- break;
- case NOTATION:
- NOTATIONDatatypeValidator* notationdv;
- serEng>>notationdv;
- fBaseValidator = notationdv;
- break;
- case List:
- ListDatatypeValidator* listdv;
- 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;
- }
+ fBaseValidator = loadDV(serEng);
/***
+ *
* Deserialize RefHashTableOf<KVStringPair>
*
- ***/
- int itemNumber = 0;
- serEng>>itemNumber;
-
- if (itemNumber)
+ ***/
+ if (serEng.needToReadTemplateObject((void**)&fFacets))
{
if (!fFacets)
{
fFacets = new (fMemoryManager) RefHashTableOf<KVStringPair>(3, fMemoryManager);
}
+ serEng.registerTemplateObject(fFacets);
+
+ int itemNumber = 0;
+ serEng>>itemNumber;
+
for (int itemIndex = 0; itemIndex < itemNumber; itemIndex++)
{
KVStringPair* data = new (fMemoryManager) KVStringPair(fMemoryManager);
@@ -568,6 +407,189 @@
serEng.readString((XMLCh*&)fTypeLocalName);
serEng.readString((XMLCh*&)fTypeUri);
+ }
+
+}
+
+/***
+ *
+ * When deserialized, we need to know, exactly what
+ * validator was serialized here.
+ *
+ * Design Issue:
+ *
+ * This extra type information is only necessary when
+ * we need to create and deserialize an DatatypeValidator
+ * derivative by operator >>, but not by object.serialize().
+ * Therefore it is appropriate to save this type info by
+ * hosting object rather than by derivative.serialize().
+ *
+ *
+ ***/
+void DatatypeValidator::storeDV(XSerializeEngine& serEng
+ , DatatypeValidator* const dv)
+{
+ if (dv)
+ {
+ serEng<<(int) dv->getType();
+ serEng<<dv;
+ }
+ else
+ {
+ serEng<<(int) UnKnown;
+ }
+
+}
+
+DatatypeValidator* DatatypeValidator::loadDV(XSerializeEngine& serEng)
+{
+
+ int type;
+ serEng>>type;
+
+ switch((ValidatorType)type)
+ {
+ case String:
+ StringDatatypeValidator* stringdv;
+ serEng>>stringdv;
+ return stringdv;
+ break;
+ case AnyURI:
+ AnyURIDatatypeValidator* anyuridv;
+ serEng>>anyuridv;
+ return anyuridv;
+ break;
+ case QName:
+ QNameDatatypeValidator* qnamedv;
+ serEng>>qnamedv;
+ return qnamedv;
+ break;
+ case Name:
+ NameDatatypeValidator* namedv;
+ serEng>>namedv;
+ return namedv;
+ break;
+ case NCName:
+ NCNameDatatypeValidator* ncnamedv;
+ serEng>>ncnamedv;
+ return ncnamedv;
+ break;
+ case Boolean:
+ BooleanDatatypeValidator* booleandv;
+ serEng>>booleandv;
+ return booleandv;
+ break;
+ case Float:
+ FloatDatatypeValidator* floatdv;
+ serEng>>floatdv;
+ return floatdv;
+ break;
+ case Double:
+ DoubleDatatypeValidator* doubledv;
+ serEng>>doubledv;
+ return doubledv;
+ break;
+ case Decimal:
+ DecimalDatatypeValidator* decimaldv;
+ serEng>>decimaldv;
+ return decimaldv;
+ break;
+ case HexBinary:
+ HexBinaryDatatypeValidator* hexbinarydv;
+ serEng>>hexbinarydv;
+ return hexbinarydv;
+ break;
+ case Base64Binary:
+ Base64BinaryDatatypeValidator* base64binarydv;
+ serEng>>base64binarydv;
+ return base64binarydv;
+ break;
+ case Duration:
+ DurationDatatypeValidator* durationdv;
+ serEng>>durationdv;
+ return durationdv;
+ break;
+ case DateTime:
+ DateTimeDatatypeValidator* datetimedv;
+ serEng>>datetimedv;
+ return datetimedv;
+ break;
+ case Date:
+ DateDatatypeValidator* datedv;
+ serEng>>datedv;
+ return datedv;
+ break;
+ case Time:
+ TimeDatatypeValidator* timedv;
+ serEng>>timedv;
+ return timedv;
+ break;
+ case MonthDay:
+ MonthDayDatatypeValidator* monthdaydv;
+ serEng>>monthdaydv;
+ return monthdaydv;
+ break;
+ case YearMonth:
+ YearMonthDatatypeValidator* yearmonthdv;
+ serEng>>yearmonthdv;
+ return yearmonthdv;
+ break;
+ case Year:
+ YearDatatypeValidator* yeardv;
+ serEng>>yeardv;
+ return yeardv;
+ break;
+ case Month:
+ MonthDatatypeValidator* monthdv;
+ serEng>>monthdv;
+ return monthdv;
+ break;
+ case Day:
+ DayDatatypeValidator* daydv;
+ serEng>>daydv;
+ return daydv;
+ break;
+ case ID:
+ IDDatatypeValidator* iddv;
+ serEng>>iddv;
+ return iddv;
+ break;
+ case IDREF:
+ IDREFDatatypeValidator* idrefdv;
+ serEng>>idrefdv;
+ return idrefdv;
+ break;
+ case ENTITY:
+ ENTITYDatatypeValidator* entitydv;
+ serEng>>entitydv;
+ return entitydv;
+ break;
+ case NOTATION:
+ NOTATIONDatatypeValidator* notationdv;
+ serEng>>notationdv;
+ return notationdv;
+ break;
+ case List:
+ ListDatatypeValidator* listdv;
+ serEng>>listdv;
+ return listdv;
+ break;
+ case Union:
+ UnionDatatypeValidator* uniondv;
+ serEng>>uniondv;
+ return uniondv;
+ break;
+ case AnySimpleType:
+ AnySimpleTypeDatatypeValidator* anysimpletypedv;
+ serEng>>anysimpletypedv;
+ return anysimpletypedv;
+ break;
+ case UnKnown:
+ return 0;
+ break;
+ default: //we treat this same as UnKnown
+ return 0;
+ break;
}
}
1.15 +29 -1 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.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- DatatypeValidator.hpp 1 Oct 2003 01:09:35 -0000 1.14
+++ DatatypeValidator.hpp 7 Oct 2003 19:39:37 -0000 1.15
@@ -319,6 +319,34 @@
***/
DECL_XSERIALIZABLE(DatatypeValidator)
+ /***
+ *
+ * Serialzie DatatypeValidator derivative
+ *
+ * Param
+ * serEng: serialize engine
+ * dv: DatatypeValidator derivative
+ *
+ * Return:
+ *
+ ***/
+ static void storeDV(XSerializeEngine& serEng
+ , DatatypeValidator* const dv);
+
+ /***
+ *
+ * Create a DatatypeValidator derivative from the binary
+ * stream.
+ *
+ * Param
+ * serEng: serialize engine
+ *
+ * Return:
+ * DatatypeValidator derivative
+ *
+ ***/
+ static DatatypeValidator* loadDV(XSerializeEngine& serEng);
+
protected:
// -----------------------------------------------------------------------
// Protected Constructors
---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-cvs-help@xml.apache.org