You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by kn...@apache.org on 2003/12/16 19:41:15 UTC
cvs commit: xml-xerces/c/src/xercesc/validators/schema/identity FieldActivator.cpp FieldActivator.hpp IC_Field.cpp IC_Field.hpp ValueStore.cpp ValueStore.hpp
knoaman 2003/12/16 10:41:15
Modified: c/src/xercesc/validators/schema/identity FieldActivator.cpp
FieldActivator.hpp IC_Field.cpp IC_Field.hpp
ValueStore.cpp ValueStore.hpp
Log:
Make IC_Field stateless
Revision Changes Path
1.6 +18 -2 xml-xerces/c/src/xercesc/validators/schema/identity/FieldActivator.cpp
Index: FieldActivator.cpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/schema/identity/FieldActivator.cpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- FieldActivator.cpp 22 May 2003 02:10:52 -0000 1.5
+++ FieldActivator.cpp 16 Dec 2003 18:41:15 -0000 1.6
@@ -56,6 +56,9 @@
/*
* $Log$
+ * Revision 1.6 2003/12/16 18:41:15 knoaman
+ * Make IC_Field stateless
+ *
* Revision 1.5 2003/05/22 02:10:52 knoaman
* Default the memory manager.
*
@@ -83,6 +86,7 @@
#include <xercesc/validators/schema/identity/ValueStore.hpp>
#include <xercesc/validators/schema/identity/ValueStoreCache.hpp>
#include <xercesc/validators/schema/identity/XPathMatcherStack.hpp>
+#include <xercesc/util/HashPtr.hpp>
XERCES_CPP_NAMESPACE_BEGIN
@@ -94,15 +98,27 @@
MemoryManager* const manager)
: fValueStoreCache(valueStoreCache)
, fMatcherStack(matcherStack)
+ , fMayMatch(0)
, fMemoryManager(manager)
{
+ fMayMatch = new (manager) ValueHashTableOf<bool>(29, new (manager) HashPtr(), manager);
}
FieldActivator::FieldActivator(const FieldActivator& other)
: fValueStoreCache(other.fValueStoreCache)
, fMatcherStack(other.fMatcherStack)
+ , fMayMatch(0)
, fMemoryManager(other.fMemoryManager)
{
+ fMayMatch = new (fMemoryManager) ValueHashTableOf<bool>(29, new (fMemoryManager) HashPtr(), fMemoryManager);
+ ValueHashTableOfEnumerator<bool> mayMatchEnum(other.fMayMatch);
+
+ // Build key set
+ while (mayMatchEnum.hasMoreElements())
+ {
+ IC_Field* field = (IC_Field*) mayMatchEnum.nextElementKey();
+ fMayMatch->put(field, other.fMayMatch->get(field));
+ }
}
@@ -130,9 +146,9 @@
XPathMatcher* FieldActivator::activateField(IC_Field* const field, const int initialDepth) {
ValueStore* valueStore = fValueStoreCache->getValueStoreFor(field, initialDepth);
- XPathMatcher* matcher = field->createMatcher(valueStore, fMemoryManager);
+ XPathMatcher* matcher = field->createMatcher(this, valueStore, fMemoryManager);
- field->setMayMatch(true);
+ setMayMatch(field, true);
fMatcherStack->addMatcher(matcher);
matcher->startDocumentFragment();
1.6 +25 -5 xml-xerces/c/src/xercesc/validators/schema/identity/FieldActivator.hpp
Index: FieldActivator.hpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/schema/identity/FieldActivator.hpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- FieldActivator.hpp 16 May 2003 21:43:22 -0000 1.5
+++ FieldActivator.hpp 16 Dec 2003 18:41:15 -0000 1.6
@@ -69,7 +69,7 @@
// ---------------------------------------------------------------------------
// Includes
// ---------------------------------------------------------------------------
-#include <xercesc/util/PlatformUtils.hpp>
+#include <xercesc/util/ValueHashTableOf.hpp>
XERCES_CPP_NAMESPACE_BEGIN
@@ -101,10 +101,16 @@
FieldActivator& operator =(const FieldActivator& other);
// -----------------------------------------------------------------------
+ // Getter methods
+ // -----------------------------------------------------------------------
+ bool getMayMatch(IC_Field* const field);
+
+ // -----------------------------------------------------------------------
// Setter methods
// -----------------------------------------------------------------------
void setValueStoreCache(ValueStoreCache* const other);
void setMatcherStack(XPathMatcherStack* const matcherStack);
+ void setMayMatch(IC_Field* const field, bool value);
// -----------------------------------------------------------------------
// Activation methods
@@ -131,13 +137,22 @@
// -----------------------------------------------------------------------
// Data
// -----------------------------------------------------------------------
- ValueStoreCache* fValueStoreCache;
- XPathMatcherStack* fMatcherStack;
- MemoryManager* fMemoryManager;
+ ValueStoreCache* fValueStoreCache;
+ XPathMatcherStack* fMatcherStack;
+ ValueHashTableOf<bool>* fMayMatch;
+ MemoryManager* fMemoryManager;
};
// ---------------------------------------------------------------------------
+// FieldActivator: Getter methods
+// ---------------------------------------------------------------------------
+inline bool FieldActivator::getMayMatch(IC_Field* const field) {
+
+ return fMayMatch->get(field);
+}
+
+// ---------------------------------------------------------------------------
// FieldActivator: Setter methods
// ---------------------------------------------------------------------------
inline void FieldActivator::setValueStoreCache(ValueStoreCache* const other) {
@@ -149,6 +164,11 @@
FieldActivator::setMatcherStack(XPathMatcherStack* const matcherStack) {
fMatcherStack = matcherStack;
+}
+
+inline void FieldActivator::setMayMatch(IC_Field* const field, bool value) {
+
+ fMayMatch->put(field, value);
}
XERCES_CPP_NAMESPACE_END
1.6 +16 -6 xml-xerces/c/src/xercesc/validators/schema/identity/IC_Field.cpp
Index: IC_Field.cpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/schema/identity/IC_Field.cpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- IC_Field.cpp 14 Oct 2003 15:24:23 -0000 1.5
+++ IC_Field.cpp 16 Dec 2003 18:41:15 -0000 1.6
@@ -56,6 +56,9 @@
/*
* $Log$
+ * Revision 1.6 2003/12/16 18:41:15 knoaman
+ * Make IC_Field stateless
+ *
* Revision 1.5 2003/10/14 15:24:23 peiyongz
* Implementation of Serialization/Deserialization
*
@@ -82,10 +85,10 @@
// ---------------------------------------------------------------------------
// Includes
// ---------------------------------------------------------------------------
+#include <xercesc/validators/schema/identity/FieldActivator.hpp>
#include <xercesc/validators/schema/identity/IC_Field.hpp>
#include <xercesc/validators/schema/identity/ValueStore.hpp>
#include <xercesc/validators/schema/identity/XercesXPath.hpp>
-
#include <xercesc/validators/schema/identity/IdentityConstraint.hpp>
XERCES_CPP_NAMESPACE_BEGIN
@@ -96,10 +99,12 @@
FieldMatcher::FieldMatcher(XercesXPath* const xpath,
IC_Field* const aField,
ValueStore* const valueStore,
+ FieldActivator* const fieldActivator,
MemoryManager* const manager)
: XPathMatcher(xpath, (IdentityConstraint*) 0, manager)
, fField(aField)
, fValueStore(valueStore)
+ , fFieldActivator(fieldActivator)
{
}
@@ -114,12 +119,12 @@
fValueStore->reportNilError(fField->getIdentityConstraint());
}
- fValueStore->addValue(fField, dv, content);
+ fValueStore->addValue(fFieldActivator, fField, dv, content);
// once we've stored the value for this field, we set the mayMatch
// member to false so that, in the same scope, we don't match any more
// values (and throw an error instead).
- fField->setMayMatch(false);
+ fFieldActivator->setMayMatch(fField, false);
}
// ---------------------------------------------------------------------------
@@ -157,7 +162,14 @@
XPathMatcher* IC_Field::createMatcher(ValueStore* const valueStore,
MemoryManager* const manager) {
- return new (manager) FieldMatcher(fXPath, this, valueStore, manager);
+ return 0;
+}
+
+XPathMatcher* IC_Field::createMatcher(FieldActivator* const fieldActivator,
+ ValueStore* const valueStore,
+ MemoryManager* const manager)
+{
+ return new (manager) FieldMatcher(fXPath, this, valueStore, fieldActivator, manager);
}
/***
@@ -171,14 +183,12 @@
if (serEng.isStoring())
{
- serEng<<fMayMatch;
serEng<<fXPath;
IdentityConstraint::storeIC(serEng, fIdentityConstraint);
}
else
{
- serEng>>fMayMatch;
serEng>>fXPath;
fIdentityConstraint = IdentityConstraint::loadIC(serEng);
1.6 +28 -9 xml-xerces/c/src/xercesc/validators/schema/identity/IC_Field.hpp
Index: IC_Field.hpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/schema/identity/IC_Field.hpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- IC_Field.hpp 14 Oct 2003 15:24:23 -0000 1.5
+++ IC_Field.hpp 16 Dec 2003 18:41:15 -0000 1.6
@@ -75,6 +75,7 @@
// Forward Declaration
// ---------------------------------------------------------------------------
class ValueStore;
+class FieldActivator;
class VALIDATORS_EXPORT IC_Field : public XSerializable, public XMemory
@@ -93,21 +94,38 @@
bool operator== (const IC_Field& other) const;
bool operator!= (const IC_Field& other) const;
- // -----------------------------------------------------------------------
+ // -----------------------------------------------------------------------
// Getter methods
// -----------------------------------------------------------------------
- bool getMayMatch() const { return fMayMatch; }
XercesXPath* getXPath() const { return fXPath; }
IdentityConstraint* getIdentityConstraint() const { return fIdentityConstraint; }
- // -----------------------------------------------------------------------
+ /**
+ * @deprecated
+ */
+ bool getMayMatch() const { return false; }
+
+ // -----------------------------------------------------------------------
// Setter methods
// -----------------------------------------------------------------------
- void setMayMatch(const bool other) { fMayMatch = other; }
+ /**
+ * @deprecated
+ */
+ void setMayMatch(const bool) {}
- // -----------------------------------------------------------------------
+ // -----------------------------------------------------------------------
// Factory methods
// -----------------------------------------------------------------------
+ XPathMatcher* createMatcher
+ (
+ FieldActivator* const fieldActivator
+ , ValueStore* const valueStore
+ , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
+ );
+
+ /**
+ * @deprecated
+ */
XPathMatcher* createMatcher(ValueStore* const valueStore,
MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager);
@@ -128,7 +146,6 @@
// -----------------------------------------------------------------------
// Data members
// -----------------------------------------------------------------------
- bool fMayMatch;
XercesXPath* fXPath;
IdentityConstraint* fIdentityConstraint;
};
@@ -161,6 +178,7 @@
FieldMatcher(XercesXPath* const anXPath,
IC_Field* const aField,
ValueStore* const valueStore,
+ FieldActivator* const fieldActivator,
MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager);
// -----------------------------------------------------------------------
@@ -177,8 +195,9 @@
// -----------------------------------------------------------------------
// Data members
// -----------------------------------------------------------------------
- ValueStore* fValueStore;
- IC_Field* fField;
+ ValueStore* fValueStore;
+ IC_Field* fField;
+ FieldActivator* fFieldActivator;
};
XERCES_CPP_NAMESPACE_END
1.8 +12 -1 xml-xerces/c/src/xercesc/validators/schema/identity/ValueStore.cpp
Index: ValueStore.cpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/schema/identity/ValueStore.cpp,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- ValueStore.cpp 18 May 2003 14:02:09 -0000 1.7
+++ ValueStore.cpp 16 Dec 2003 18:41:15 -0000 1.8
@@ -56,6 +56,9 @@
/*
* $Log$
+ * Revision 1.8 2003/12/16 18:41:15 knoaman
+ * Make IC_Field stateless
+ *
* Revision 1.7 2003/05/18 14:02:09 knoaman
* Memory manager implementation: pass per instance manager.
*
@@ -94,6 +97,7 @@
#include <xercesc/internal/XMLScanner.hpp>
#include <xercesc/framework/XMLValidator.hpp>
#include <xercesc/validators/datatype/DatatypeValidator.hpp>
+#include <xercesc/validators/schema/identity/FieldActivator.hpp>
#include <xercesc/validators/schema/identity/ValueStore.hpp>
#include <xercesc/validators/schema/identity/IC_Field.hpp>
#include <xercesc/validators/schema/identity/IC_KeyRef.hpp>
@@ -132,7 +136,14 @@
DatatypeValidator* const dv,
const XMLCh* const value) {
- if (!field->getMayMatch() && fDoReportError) {
+}
+
+void ValueStore::addValue(FieldActivator* const fieldActivator,
+ IC_Field* const field,
+ DatatypeValidator* const dv,
+ const XMLCh* const value) {
+
+ if (!fieldActivator->getMayMatch(field) && fDoReportError) {
fScanner->getValidator()->emitError(XMLValid::IC_FieldMultipleMatch);
}
1.6 +15 -6 xml-xerces/c/src/xercesc/validators/schema/identity/ValueStore.hpp
Index: ValueStore.hpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/schema/identity/ValueStore.hpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- ValueStore.hpp 16 May 2003 21:43:22 -0000 1.5
+++ ValueStore.hpp 16 Dec 2003 18:41:15 -0000 1.6
@@ -94,27 +94,36 @@
MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager);
~ValueStore();
- // -----------------------------------------------------------------------
+ // -----------------------------------------------------------------------
// Getter methods
// -----------------------------------------------------------------------
IdentityConstraint* getIdentityConstraint() const;
- // -----------------------------------------------------------------------
+ // -----------------------------------------------------------------------
// Helper methods
// -----------------------------------------------------------------------
void append(const ValueStore* const other);
void startValueScope();
void endValueScope();
- void addValue(IC_Field* const field, DatatypeValidator* const dv,
+ void addValue(FieldActivator* const fieldActivator,
+ IC_Field* const field,
+ DatatypeValidator* const dv,
const XMLCh* const value);
bool contains(const FieldValueMap* const other);
- // -----------------------------------------------------------------------
+ /**
+ * @deprecated
+ */
+ void addValue(IC_Field* const field, DatatypeValidator* const dv,
+ const XMLCh* const value);
+
+
+ // -----------------------------------------------------------------------
// Document handling methods
// -----------------------------------------------------------------------
void endDcocumentFragment(ValueStoreCache* const valueStoreCache);
- // -----------------------------------------------------------------------
+ // -----------------------------------------------------------------------
// Error reporting methods
// -----------------------------------------------------------------------
void duplicateValue();
---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-cvs-help@xml.apache.org