dbertoni 01/03/29 14:19:09
Modified: c/src/XPath XPathExecutionContextDefault.cpp
XPathExecutionContextDefault.hpp
Log:
Allow support classe instances to be changed.
Revision Changes Path
1.34 +89 -40 xml-xalan/c/src/XPath/XPathExecutionContextDefault.cpp
Index: XPathExecutionContextDefault.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XPath/XPathExecutionContextDefault.cpp,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -r1.33 -r1.34
--- XPathExecutionContextDefault.cpp 2001/03/09 16:23:29 1.33
+++ XPathExecutionContextDefault.cpp 2001/03/29 22:19:08 1.34
@@ -91,9 +91,9 @@
const NodeRefListBase* theContextNodeList,
const PrefixResolver* thePrefixResolver) :
XPathExecutionContext(),
- m_xpathEnvSupport(theXPathEnvSupport),
- m_domSupport(theDOMSupport),
- m_xobjectFactory(theXObjectFactory),
+ m_xpathEnvSupport(&theXPathEnvSupport),
+ m_domSupport(&theDOMSupport),
+ m_xobjectFactory(&theXObjectFactory),
m_currentNode(theCurrentNode),
m_contextNodeList(theContextNodeList == 0 ? &s_dummyList :
theContextNodeList),
m_prefixResolver(thePrefixResolver),
@@ -111,6 +111,32 @@
+XPathExecutionContextDefault::XPathExecutionContextDefault(
+ XalanNode* theCurrentNode,
+ const NodeRefListBase* theContextNodeList,
+ const PrefixResolver* thePrefixResolver) :
+ XPathExecutionContext(),
+ m_xpathEnvSupport(0),
+ m_domSupport(0),
+ m_xobjectFactory(0),
+ m_currentNode(theCurrentNode),
+ m_contextNodeList(theContextNodeList == 0 ? &s_dummyList :
theContextNodeList),
+ m_prefixResolver(thePrefixResolver),
+ m_throwFoundIndex(false),
+ m_availableCachedNodeLists(),
+ m_busyCachedNodeLists(),
+ m_availableCachedResultTreeFrags(),
+ m_busyCachedResultTreeFrags(),
+ m_stringCache()
+{
+ m_availableCachedNodeLists.reserve(eMutableNodeRefListCacheMax);
+
+ m_busyCachedNodeLists.reserve(eMutableNodeRefListCacheMax);
+}
+
+
+
+
XPathExecutionContextDefault::~XPathExecutionContextDefault()
{
#if !defined(XALAN_NO_NAMESPACES)
@@ -135,9 +161,20 @@
void
XPathExecutionContextDefault::reset()
{
- m_xpathEnvSupport.reset();
- m_domSupport.reset();
- m_xobjectFactory.reset();
+ if (m_xpathEnvSupport != 0)
+ {
+ m_xpathEnvSupport->reset();
+ }
+
+ if (m_domSupport != 0)
+ {
+ m_domSupport->reset();
+ }
+
+ if (m_xobjectFactory != 0)
+ {
+ m_xobjectFactory->reset();
+ }
m_currentNode = 0;
m_contextNodeList = &s_dummyList;
@@ -182,7 +219,9 @@
XObjectFactory&
XPathExecutionContextDefault::getXObjectFactory() const
{
- return m_xobjectFactory;
+ assert(m_xobjectFactory != 0);
+
+ return *m_xobjectFactory;
}
@@ -190,12 +229,14 @@
XObjectPtr
XPathExecutionContextDefault::createNodeSet(XalanNode& theNode)
{
+ assert(m_xobjectFactory != 0);
+
// This list will hold the node...
BorrowReturnMutableNodeRefList theNodeList(*this);
theNodeList->addNode(&theNode);
- return m_xobjectFactory.createNodeSet(theNodeList);
+ return m_xobjectFactory->createNodeSet(theNodeList);
}
@@ -205,7 +246,7 @@
const XalanNode& node1,
const XalanNode& node2) const
{
- return m_domSupport.isNodeAfter(node1, node2);
+ return m_domSupport->isNodeAfter(node1, node2);
}
@@ -261,7 +302,9 @@
const XalanDOMString& theNamespace,
const XalanDOMString& elementName) const
{
- return m_xpathEnvSupport.elementAvailable(theNamespace, elementName);
+ assert(m_xpathEnvSupport != 0);
+
+ return m_xpathEnvSupport->elementAvailable(theNamespace, elementName);
}
@@ -271,7 +314,9 @@
const XalanDOMString& theNamespace,
const XalanDOMString& functionName) const
{
- return m_xpathEnvSupport.functionAvailable(theNamespace, functionName);
+ assert(m_xpathEnvSupport != 0);
+
+ return m_xpathEnvSupport->functionAvailable(theNamespace, functionName);
}
@@ -283,35 +328,21 @@
XalanNode*
context,
const XObjectArgVectorType& argVec)
{
- return m_xpathEnvSupport.extFunction(*this, theNamespace, functionName,
context, argVec);
-}
-
+ assert(m_xpathEnvSupport != 0);
-
-XLocator*
-XPathExecutionContextDefault::getXLocatorFromNode(const XalanNode* node)
const
-{
- return m_xpathEnvSupport.getXLocatorFromNode(node);
+ return m_xpathEnvSupport->extFunction(*this, theNamespace,
functionName, context, argVec);
}
-void
-XPathExecutionContextDefault::associateXLocatorToNode(
- const XalanNode* node,
- XLocator* xlocator)
-{
- m_xpathEnvSupport.associateXLocatorToNode(node, xlocator);
-}
-
-
-
XalanDocument*
XPathExecutionContextDefault::parseXML(
const XalanDOMString& urlString,
const XalanDOMString& base) const
{
- return m_xpathEnvSupport.parseXML(urlString, base);
+ assert(m_xpathEnvSupport != 0);
+
+ return m_xpathEnvSupport->parseXML(urlString, base);
}
@@ -453,7 +484,9 @@
const XObjectPtr
XPathExecutionContextDefault::getVariable(const QName& name)
{
- return m_xobjectFactory.createUnknown(name.getLocalPart());
+ assert(m_xobjectFactory != 0);
+
+ return m_xobjectFactory->createUnknown(name.getLocalPart());
}
@@ -487,7 +520,9 @@
XalanDocument*
XPathExecutionContextDefault::getDOMFactory() const
{
- return m_xpathEnvSupport.getDOMFactory();
+ assert(m_xpathEnvSupport != 0);
+
+ return m_xpathEnvSupport->getDOMFactory();
}
@@ -495,7 +530,9 @@
XalanDOMString
XPathExecutionContextDefault::findURIFromDoc(const XalanDocument* owner)
const
{
- return m_xpathEnvSupport.findURIFromDoc(owner);
+ assert(m_xpathEnvSupport != 0);
+
+ return m_xpathEnvSupport->findURIFromDoc(owner);
}
@@ -505,7 +542,7 @@
const XalanDOMString& theName,
const XalanDocument& theDocument) const
{
- return m_domSupport.getUnparsedEntityURI(theName, theDocument);
+ return m_domSupport->getUnparsedEntityURI(theName, theDocument);
}
@@ -513,7 +550,9 @@
bool
XPathExecutionContextDefault::shouldStripSourceNode(const XalanNode& node)
{
- return m_xpathEnvSupport.shouldStripSourceNode(*this, node);
+ assert(m_xpathEnvSupport != 0);
+
+ return m_xpathEnvSupport->shouldStripSourceNode(*this, node);
}
@@ -524,7 +563,9 @@
const XalanNode* sourceNode,
const XalanNode* /* styleNode */) const
{
- if (m_xpathEnvSupport.problem(XPathEnvSupport::eXPATHProcessor,
+ assert(m_xpathEnvSupport != 0);
+
+ if (m_xpathEnvSupport->problem(XPathEnvSupport::eXPATHProcessor,
XPathEnvSupport::eError,
m_prefixResolver,
sourceNode,
@@ -556,7 +597,9 @@
const XalanNode* sourceNode,
const XalanNode* /* styleNode */) const
{
- if (m_xpathEnvSupport.problem(XPathEnvSupport::eXPATHProcessor,
+ assert(m_xpathEnvSupport != 0);
+
+ if (m_xpathEnvSupport->problem(XPathEnvSupport::eXPATHProcessor,
XPathEnvSupport::eWarning,
m_prefixResolver,
sourceNode,
@@ -588,7 +631,9 @@
const XalanNode* sourceNode,
const XalanNode* /* styleNode */) const
{
- if (m_xpathEnvSupport.problem(XPathEnvSupport::eXPATHProcessor,
+ assert(m_xpathEnvSupport != 0);
+
+ if (m_xpathEnvSupport->problem(XPathEnvSupport::eXPATHProcessor,
XPathEnvSupport::eMessage,
m_prefixResolver,
sourceNode,
@@ -633,7 +678,9 @@
XalanDocument*
XPathExecutionContextDefault::getSourceDocument(const XalanDOMString&
theURI) const
{
- return m_xpathEnvSupport.getSourceDocument(theURI);
+ assert(m_xpathEnvSupport != 0);
+
+ return m_xpathEnvSupport->getSourceDocument(theURI);
}
@@ -643,7 +690,9 @@
const XalanDOMString& theURI,
XalanDocument* theDocument)
{
- m_xpathEnvSupport.setSourceDocument(theURI, theDocument);
+ assert(m_xpathEnvSupport != 0);
+
+ m_xpathEnvSupport->setSourceDocument(theURI, theDocument);
}
1.32 +52 -11 xml-xalan/c/src/XPath/XPathExecutionContextDefault.hpp
Index: XPathExecutionContextDefault.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XPath/XPathExecutionContextDefault.hpp,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -r1.31 -r1.32
--- XPathExecutionContextDefault.hpp 2001/01/16 02:34:46 1.31
+++ XPathExecutionContextDefault.hpp 2001/03/29 22:19:08 1.32
@@ -120,10 +120,59 @@
const NodeRefListBase* theContextNodeList = 0,
const PrefixResolver* thePrefixResolver = 0);
+ /**
+ * Construct an XPathExecutionContextDefault object
+ *
+ * @param theXPathEnvSupport XPathEnvSupport class instance
+ * @param theXObjectFactory factory class instance for XObjects
+ * @param theCurrentNode current node in the source tree
+ * @param theContextNodeList node list for current context
+ * @param thePrefixResolver pointer to prefix resolver to use
+ */
+ explicit
+ XPathExecutionContextDefault(
+ XalanNode* theCurrentNode
= 0,
+ const NodeRefListBase* theContextNodeList = 0,
+ const PrefixResolver* thePrefixResolver = 0);
+
virtual
~XPathExecutionContextDefault();
+ /**
+ * Set the XPathEnvSupport instance.
+ *
+ * @param theSupport a reference to the instance to use.
+ */
+ void
+ setXPathEnvSupport(XPathEnvSupport* theSupport)
+ {
+ m_xpathEnvSupport = theSupport;
+ }
+
+ /**
+ * Set the XObjectFactory instance.
+ *
+ * @param theFactory a reference to the instance to use.
+ */
+ void
+ setXObjectFactory(XObjectFactory* theFactory)
+ {
+ m_xobjectFactory = theFactory;
+ }
+
+ /**
+ * Set the DOMSupport instance.
+ *
+ * @param theDOMSupport a reference to the instance to use.
+ */
+ void
+ setDOMSupport(DOMSupport* theDOMSupport)
+ {
+ m_domSupport = theDOMSupport;
+ }
+
+
// These interfaces are inherited from XPathExecutionContext...
virtual void
@@ -175,14 +224,6 @@
XalanNode*
context,
const XObjectArgVectorType& argVec);
- virtual XLocator*
- getXLocatorFromNode(const XalanNode* node) const;
-
- virtual void
- associateXLocatorToNode(
- const XalanNode* node,
- XLocator* xlocator);
-
virtual XalanDocument*
parseXML(
const XalanDOMString& urlString,
@@ -313,11 +354,11 @@
eResultTreeFragListCacheMax = 50,
eCachedArgVectorDefaultSize = 10 };
- XPathEnvSupport& m_xpathEnvSupport;
+ XPathEnvSupport* m_xpathEnvSupport;
- DOMSupport& m_domSupport;
+ DOMSupport* m_domSupport;
- XObjectFactory& m_xobjectFactory;
+ XObjectFactory* m_xobjectFactory;
XalanNode* m_currentNode;
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]