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 2004/03/19 02:18:08 UTC
cvs commit: xml-xerces/c/src/xercesc/validators/datatype AbstractNumericFacetValidator.cpp AbstractNumericFacetValidator.hpp
peiyongz 2004/03/18 17:18:08
Modified: c/src/xercesc/validators/datatype
AbstractNumericFacetValidator.cpp
AbstractNumericFacetValidator.hpp
Log:
Let base dv to store/load (Max,Min)(Inc,Exc)sives
Revision Changes Path
1.19 +76 -21 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.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- AbstractNumericFacetValidator.cpp 29 Jan 2004 11:51:22 -0000 1.18
+++ AbstractNumericFacetValidator.cpp 19 Mar 2004 01:18:08 -0000 1.19
@@ -57,6 +57,9 @@
/*
* $Id$
* $Log$
+ * Revision 1.19 2004/03/19 01:18:08 peiyongz
+ * Let base dv to store/load (Max,Min)(Inc,Exc)sives
+ *
* Revision 1.18 2004/01/29 11:51:22 cargilld
* Code cleanup changes to get rid of various compiler diagnostic messages.
*
@@ -974,18 +977,14 @@
***/
DatatypeValidator::serialize(serEng);
- serEng<<fMaxInclusiveInherited;
- serEng<<fMaxExclusiveInherited;
- serEng<<fMinInclusiveInherited;
- serEng<<fMinExclusiveInherited;
- serEng<<fEnumerationInherited;
-
// need not write type info for the XMLNumber since
- // the derivative class has done that
- serEng<<fMaxInclusive;
- serEng<<fMaxExclusive;
- serEng<<fMinInclusive;
- serEng<<fMinExclusive;
+ // the derivative class has done that
+ storeClusive(serEng, fMaxInclusiveInherited, fMaxInclusive);
+ storeClusive(serEng, fMaxExclusiveInherited, fMaxExclusive);
+ storeClusive(serEng, fMinInclusiveInherited, fMinInclusive);
+ storeClusive(serEng, fMinExclusiveInherited, fMinExclusive);
+
+ serEng<<fEnumerationInherited;
/***
* Serialize RefArrayVectorOf<XMLCh>
@@ -1005,16 +1004,12 @@
DatatypeValidator::serialize(serEng);
- serEng>>fMaxInclusiveInherited;
- serEng>>fMaxExclusiveInherited;
- serEng>>fMinInclusiveInherited;
- serEng>>fMinExclusiveInherited;
- serEng>>fEnumerationInherited;
+ loadClusive(serEng, fMaxInclusiveInherited, fMaxInclusive, numType, 1);
+ loadClusive(serEng, fMaxExclusiveInherited, fMaxExclusive, numType, 2);
+ loadClusive(serEng, fMinInclusiveInherited, fMinInclusive, numType, 3);
+ loadClusive(serEng, fMinExclusiveInherited, fMinExclusive, numType, 4);
- fMaxInclusive=XMLNumber::loadNumber(numType, serEng);
- fMaxExclusive=XMLNumber::loadNumber(numType, serEng);
- fMinInclusive=XMLNumber::loadNumber(numType, serEng);
- fMinExclusive=XMLNumber::loadNumber(numType, serEng);
+ serEng>>fEnumerationInherited;
/***
* Deserialize RefArrayVectorOf<XMLCh>
@@ -1022,6 +1017,66 @@
***/
XTemplateSerializer::loadObject(&fStrEnumeration, 8, true, serEng);
XTemplateSerializer::loadObject(&fEnumeration, 8, true, numType, serEng);
+
+ }
+
+}
+
+//
+// A user defined dv may inherit any of the Max/Min/Inc/Exc from a
+// built dv, which will create its own Max/Min/Inc/Exc during the
+// loading. Therefore if the user defined store and load this
+// facet, and does not own it, that will cause leakage.
+//
+// To avoid checking if the facet belongs to a builtIn dv or not, we
+// do this way, for any inherited *clusive, we will not store it, and later
+// on during loading, we get it from the base dv.
+//
+void AbstractNumericFacetValidator::storeClusive(XSerializeEngine& serEng
+ , bool inherited
+ , XMLNumber* data)
+{
+ serEng<<inherited;
+
+ //store only if own it
+ if (!inherited)
+ serEng<<data;
+
+}
+
+// it is guranteed that the base dv is loaded before this dv
+//
+void AbstractNumericFacetValidator::loadClusive(XSerializeEngine& serEng
+ , bool& inherited
+ , XMLNumber*& data
+ , XMLNumber::NumberType numType
+ , int flag)
+{
+ serEng>>inherited;
+
+ if (!inherited)
+ data = XMLNumber::loadNumber(numType, serEng);
+ else
+ {
+ AbstractNumericFacetValidator* basedv = (AbstractNumericFacetValidator*) getBaseValidator();
+
+ switch(flag)
+ {
+ case 1:
+ data = basedv->getMaxInclusive();
+ break;
+ case 2:
+ data = basedv->getMaxExclusive();
+ break;
+ case 3:
+ data = basedv->getMinInclusive();
+ break;
+ case 4:
+ data = basedv->getMinExclusive();
+ break;
+ default:
+ break;
+ }
}
1.12 +14 -1 xml-xerces/c/src/xercesc/validators/datatype/AbstractNumericFacetValidator.hpp
Index: AbstractNumericFacetValidator.hpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/datatype/AbstractNumericFacetValidator.hpp,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- AbstractNumericFacetValidator.hpp 29 Jan 2004 11:51:22 -0000 1.11
+++ AbstractNumericFacetValidator.hpp 19 Mar 2004 01:18:08 -0000 1.12
@@ -57,6 +57,9 @@
/*
* $Id$
* $Log$
+ * Revision 1.12 2004/03/19 01:18:08 peiyongz
+ * Let base dv to store/load (Max,Min)(Inc,Exc)sives
+ *
* Revision 1.11 2004/01/29 11:51:22 cargilld
* Code cleanup changes to get rid of various compiler diagnostic messages.
*
@@ -228,6 +231,16 @@
void inspectFacetBase(MemoryManager* const manager);
void inheritFacet();
+
+ void storeClusive(XSerializeEngine&
+ , bool
+ , XMLNumber*);
+
+ void loadClusive(XSerializeEngine&
+ , bool&
+ , XMLNumber*&
+ , XMLNumber::NumberType
+ , int );
// -----------------------------------------------------------------------
// Unimplemented constructors and operators
---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-cvs-help@xml.apache.org