peiyongz 2004/03/03 15:08:28
Modified: c/src/xercesc/validators/datatype DatatypeValidator.cpp
Log:
Move the logic to check for BuiltIn Dv to storeDV/loadDV therefore dv which
refers to BuiltIn DV will NOT be actually saved/loaded, as opposed to previously
it is only done for dv appears in fBaseValidator.
Revision Changes Path
1.24 +36 -47
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.23
retrieving revision 1.24
diff -u -r1.23 -r1.24
--- DatatypeValidator.cpp 2 Mar 2004 23:34:58 -0000 1.23
+++ DatatypeValidator.cpp 3 Mar 2004 23:08:28 -0000 1.24
@@ -56,6 +56,11 @@
/*
* $Log$
+ * Revision 1.24 2004/03/03 23:08:28 peiyongz
+ * Move the logic to check for BuiltIn Dv to storeDV/loadDV therefore dv which
+ * refers to BuiltIn DV will NOT be actually saved/loaded, as opposed to previously
+ * it is only done for dv appears in fBaseValidator.
+ *
* Revision 1.23 2004/03/02 23:34:58 peiyongz
* fix typo
*
@@ -192,7 +197,9 @@
XERCES_CPP_NAMESPACE_BEGIN
-
+static const int DV_BUILTIN = 0;
+static const int DV_NORMAL = 1;
+static const int DV_ZERO = 2;
// ---------------------------------------------------------------------------
// DatatypeValidator: Constructors and Destructor
@@ -352,19 +359,7 @@
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);
- }
+ storeDV(serEng, fBaseValidator);
/***
* Serialize RefHashTableOf<KVStringPair>
@@ -412,33 +407,7 @@
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);
- }
+ fBaseValidator = loadDV(serEng);
/***
*
@@ -446,7 +415,6 @@
*
***/
XTemplateSerializer::loadObject(&fFacets, 29, true, serEng);
-
serEng.readString(fPattern);
/***
@@ -480,7 +448,6 @@
ArrayJanitor<XMLCh> janUri(typeUri, fMemoryManager);
setTypeName(typeLocalName, typeUri);
-
}
/***
@@ -512,18 +479,42 @@
{
if (dv)
{
- serEng<<(int) dv->getType();
- serEng<<dv;
+ if
(DatatypeValidatorFactory::getBuiltInRegistry()->containsKey(dv->getTypeLocalName()))
+ {
+ serEng<<DV_BUILTIN;
+ serEng.writeString(dv->getTypeLocalName());
+ }
+ else
+ {
+ serEng<<DV_NORMAL;
+ serEng<<(int) dv->getType();
+ serEng<<dv;
+ }
}
else
{
- serEng<<(int) UnKnown;
+ serEng<<DV_ZERO;
}
}
DatatypeValidator* DatatypeValidator::loadDV(XSerializeEngine& serEng)
{
+ int flag;
+ serEng>>flag;
+
+ if (DV_BUILTIN == flag)
+ {
+ XMLCh* dvName;
+ serEng.readString(dvName);
+ ArrayJanitor<XMLCh> janName(dvName, serEng.getMemoryManager());
+
+ return DatatypeValidatorFactory::getBuiltInRegistry()->get(dvName);
+ }
+ else if (DV_ZERO == flag)
+ {
+ return 0;
+ }
int type;
serEng>>type;
@@ -649,7 +640,7 @@
inline bool
DatatypeValidator::isBuiltInDV(DatatypeValidator* const dv)
{
- return dv?
DatatypeValidatorFactory::getBuiltInRegistry()->containsKey(dv->getTypeName())
+ return dv?
DatatypeValidatorFactory::getBuiltInRegistry()->containsKey(dv->getTypeLocalName())
: false;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]