dbertoni 00/07/28 15:02:22
Modified: c/src/XSLT ElemTemplateElement.cpp FunctionDocument.cpp
FunctionKey.cpp StylesheetExecutionContext.hpp
StylesheetExecutionContextDefault.cpp
StylesheetExecutionContextDefault.hpp
XSLTEngineImpl.cpp XSLTEngineImpl.hpp
XSLTProcessor.hpp
Log:
Changes for reducing dynamic allocations.
Revision Changes Path
1.27 +14 -11 xml-xalan/c/src/XSLT/ElemTemplateElement.cpp
Index: ElemTemplateElement.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XSLT/ElemTemplateElement.cpp,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -r1.26 -r1.27
--- ElemTemplateElement.cpp 2000/07/25 14:49:32 1.26
+++ ElemTemplateElement.cpp 2000/07/28 22:02:20 1.27
@@ -676,7 +676,7 @@
executionContext.getXObjectFactory(),
theXObject);
- const NodeRefListBase* const sourceNodes =
&result->mutableNodeset();
+ const NodeRefListBase& sourceNodes = result->nodeset();
if(0 != executionContext.getTraceListeners())
{
@@ -689,7 +689,7 @@
result.get()));
}
- const unsigned int nNodes =
sourceNodes->getLength();
+ const unsigned int nNodes =
sourceNodes.getLength();
if (nNodes > 0)
{
@@ -704,7 +704,7 @@
xslToken,
selectStackFrameIndex,
keys,
- *sourceNodes,
+ sourceNodes,
nNodes);
}
}
@@ -756,11 +756,12 @@
if (keys.size() > 0)
{
- MutableNodeRefList sortedSourceNodes =
- executionContext.createMutableNodeRefList();
+ typedef
StylesheetExecutionContext::BorrowReturnMutableNodeRefList
BorrowReturnMutableNodeRefList;
- sortedSourceNodes = sourceNodes;
+ BorrowReturnMutableNodeRefList
sortedSourceNodes(executionContext);
+ *sortedSourceNodes = sourceNodes;
+
{
NodeSorter sorter;
@@ -768,7 +769,7 @@
executionContext,
selectStackFrameIndex);
- sorter.sort(executionContext, sortedSourceNodes, keys);
+ sorter.sort(executionContext, *sortedSourceNodes, keys);
}
doTransformSelectedChildren(
@@ -780,7 +781,7 @@
sourceNodeContext,
mode,
xslToken,
- sortedSourceNodes,
+ *sortedSourceNodes,
sourceNodesCount);
}
else
@@ -816,9 +817,11 @@
const XalanNodeList&
childNodes,
unsigned int
childNodeCount) const
{
- MutableNodeRefList sourceNodes =
executionContext.createMutableNodeRefList();
+ typedef StylesheetExecutionContext::BorrowReturnMutableNodeRefList
BorrowReturnMutableNodeRefList;
+
+ BorrowReturnMutableNodeRefList sourceNodes(executionContext);
- sourceNodes = &childNodes;
+ *sourceNodes = &childNodes;
doTransformSelectedChildren(
executionContext,
@@ -831,7 +834,7 @@
xslToken,
selectStackFrameIndex,
keys,
- sourceNodes,
+ *sourceNodes,
childNodeCount);
}
1.10 +8 -4 xml-xalan/c/src/XSLT/FunctionDocument.cpp
Index: FunctionDocument.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XSLT/FunctionDocument.cpp,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- FunctionDocument.cpp 2000/06/08 18:33:13 1.9
+++ FunctionDocument.cpp 2000/07/28 22:02:20 1.10
@@ -198,8 +198,12 @@
base = executionContext.getPrefixResolver()->getURI();
}
- MutableNodeRefList
mnl(executionContext.createMutableNodeRefList());
+#if !defined(XALAN_NO_NAMESPACES)
+ using std::auto_ptr;
+#endif
+ auto_ptr<MutableNodeRefList>
mnl(executionContext.createMutableNodeRefList());
+
const unsigned int nRefs = XObject::eTypeNodeSet
== arg->getType() ?
arg->nodeset().getLength()
: 1;
@@ -257,14 +261,14 @@
if(newDoc != 0)
{
- mnl.addNodeInDocOrder(newDoc, true);
+ mnl->addNodeInDocOrder(newDoc, true);
}
}
}
- assert(mnl.checkForDuplicates() == false);
+ assert(mnl->checkForDuplicates() == false);
- return executionContext.getXObjectFactory().createNodeSet(mnl);
+ return
executionContext.getXObjectFactory().createNodeSet(mnl.release());
}
}
1.6 +8 -5 xml-xalan/c/src/XSLT/FunctionKey.cpp
Index: FunctionKey.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XSLT/FunctionKey.cpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- FunctionKey.cpp 2000/04/12 19:41:00 1.5
+++ FunctionKey.cpp 2000/07/28 22:02:21 1.6
@@ -142,8 +142,11 @@
const bool argIsNodeSet =
XObject::eTypeNodeSet == arg->getType() ? true
: false;
- MutableNodeRefList theNodeRefList =
- executionContext.createMutableNodeRefList();
+#if !defined(XALAN_NO_NAMESPACES)
+ using std::auto_ptr;
+#endif
+
+ auto_ptr<MutableNodeRefList>
theNodeRefList(executionContext.createMutableNodeRefList());
if(argIsNodeSet == true)
{
@@ -180,7 +183,7 @@
*executionContext.getPrefixResolver());
assert(nl != 0);
-
theNodeRefList.addNodesInDocOrder(*nl);
+
theNodeRefList->addNodesInDocOrder(*nl);
}
}
}
@@ -198,11 +201,11 @@
if (nl != 0)
{
- theNodeRefList.addNodesInDocOrder(*nl);
+ theNodeRefList->addNodesInDocOrder(*nl);
}
}
- return
executionContext.getXObjectFactory().createNodeSet(theNodeRefList);
+ return
executionContext.getXObjectFactory().createNodeSet(theNodeRefList.release());
}
}
1.24 +13 -1 xml-xalan/c/src/XSLT/StylesheetExecutionContext.hpp
Index: StylesheetExecutionContext.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XSLT/StylesheetExecutionContext.hpp,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -r1.23 -r1.24
--- StylesheetExecutionContext.hpp 2000/07/21 19:52:56 1.23
+++ StylesheetExecutionContext.hpp 2000/07/28 22:02:21 1.24
@@ -1538,6 +1538,12 @@
const XalanDOMString& theNamespace,
const XalanDOMString& functionName) const = 0;
+ virtual XObjectArgVectorType&
+ pushArgVector() = 0;
+
+ virtual void
+ popArgVector() = 0;
+
virtual XObject*
extFunction(
const XalanDOMString& theNamespace,
@@ -1557,8 +1563,14 @@
parseXML(
const XalanDOMString& urlString,
const XalanDOMString& base) const = 0;
+
+ virtual MutableNodeRefList*
+ borrowMutableNodeRefList() = 0;
+
+ virtual bool
+ returnMutableNodeRefList(MutableNodeRefList* theList) = 0;
- virtual MutableNodeRefList
+ virtual MutableNodeRefList*
createMutableNodeRefList() const = 0;
virtual bool
1.24 +35 -4
xml-xalan/c/src/XSLT/StylesheetExecutionContextDefault.cpp
Index: StylesheetExecutionContextDefault.cpp
===================================================================
RCS file:
/home/cvs/xml-xalan/c/src/XSLT/StylesheetExecutionContextDefault.cpp,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -r1.23 -r1.24
--- StylesheetExecutionContextDefault.cpp 2000/07/25 15:12:06 1.23
+++ StylesheetExecutionContextDefault.cpp 2000/07/28 22:02:21 1.24
@@ -969,7 +969,7 @@
sourceNode,
mode));
- return m_xsltProcessor.createXResultTreeFrag(*theFragment.get());
+ return getXObjectFactory().createResultTreeFrag(theFragment.release());
}
@@ -977,8 +977,7 @@
bool
StylesheetExecutionContextDefault::destroyXObject(XObject* theXObject)
const
{
-
- return m_xsltProcessor.destroyXObject(theXObject);
+ return getXObjectFactory().returnObject(theXObject);
}
@@ -1454,6 +1453,22 @@
+StylesheetExecutionContextDefault::XObjectArgVectorType&
+StylesheetExecutionContextDefault::pushArgVector()
+{
+ return m_xpathExecutionContextDefault.pushArgVector();
+}
+
+
+
+void
+StylesheetExecutionContextDefault::popArgVector()
+{
+ m_xpathExecutionContextDefault.popArgVector();
+}
+
+
+
XObject*
StylesheetExecutionContextDefault::extFunction(
const XalanDOMString& theNamespace,
@@ -1493,8 +1508,24 @@
}
+
+MutableNodeRefList*
+StylesheetExecutionContextDefault::borrowMutableNodeRefList()
+{
+ return m_xpathExecutionContextDefault.borrowMutableNodeRefList();
+}
+
+
+
+bool
+StylesheetExecutionContextDefault::returnMutableNodeRefList(MutableNodeRefList*
theList)
+{
+ return m_xpathExecutionContextDefault.returnMutableNodeRefList(theList);
+}
+
+
-MutableNodeRefList
+MutableNodeRefList*
StylesheetExecutionContextDefault::createMutableNodeRefList() const
{
return m_xpathExecutionContextDefault.createMutableNodeRefList();
1.22 +13 -1
xml-xalan/c/src/XSLT/StylesheetExecutionContextDefault.hpp
Index: StylesheetExecutionContextDefault.hpp
===================================================================
RCS file:
/home/cvs/xml-xalan/c/src/XSLT/StylesheetExecutionContextDefault.hpp,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -r1.21 -r1.22
--- StylesheetExecutionContextDefault.hpp 2000/07/25 15:12:07 1.21
+++ StylesheetExecutionContextDefault.hpp 2000/07/28 22:02:21 1.22
@@ -583,6 +583,12 @@
const XalanDOMString& theNamespace,
const XalanDOMString& functionName) const;
+ virtual XObjectArgVectorType&
+ pushArgVector();
+
+ virtual void
+ popArgVector();
+
virtual XObject*
extFunction(
const XalanDOMString& theNamespace,
@@ -602,8 +608,14 @@
parseXML(
const XalanDOMString& urlString,
const XalanDOMString& base) const;
+
+ virtual MutableNodeRefList*
+ borrowMutableNodeRefList();
+
+ virtual bool
+ returnMutableNodeRefList(MutableNodeRefList* theList);
- virtual MutableNodeRefList
+ virtual MutableNodeRefList*
createMutableNodeRefList() const;
virtual bool
1.52 +0 -18 xml-xalan/c/src/XSLT/XSLTEngineImpl.cpp
Index: XSLTEngineImpl.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XSLT/XSLTEngineImpl.cpp,v
retrieving revision 1.51
retrieving revision 1.52
diff -u -r1.51 -r1.52
--- XSLTEngineImpl.cpp 2000/07/25 14:53:40 1.51
+++ XSLTEngineImpl.cpp 2000/07/28 22:02:21 1.52
@@ -3359,24 +3359,6 @@
-XObject*
-XSLTEngineImpl::createXResultTreeFrag(const ResultTreeFragBase& r) const
-{
- return m_xobjectFactory.createResultTreeFrag(r);
-}
-
-
-
-bool
-XSLTEngineImpl::destroyXObject(XObject* theXObject) const
-{
- assert(theXObject != 0);
-
- return m_xobjectFactory.returnObject(theXObject);
-}
-
-
-
void
XSLTEngineImpl::InstallFunctions()
{
1.40 +0 -14 xml-xalan/c/src/XSLT/XSLTEngineImpl.hpp
Index: XSLTEngineImpl.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XSLT/XSLTEngineImpl.hpp,v
retrieving revision 1.39
retrieving revision 1.40
diff -u -r1.39 -r1.40
--- XSLTEngineImpl.hpp 2000/07/25 14:53:41 1.39
+++ XSLTEngineImpl.hpp 2000/07/28 22:02:21 1.40
@@ -263,20 +263,6 @@
virtual const XalanDOMString
getUniqueNSValue() const;
-
- virtual XObject*
- createXResultTreeFrag(const ResultTreeFragBase& r) const;
-
- /**
- * Function to destroy an XObject that was returned
- * by executing. It is safe to call this function
- * with any XObject.
- *
- * @param theXObject pointer to the XObject.
- * @return true if the object was destroyed.
- */
- virtual bool
- destroyXObject(XObject* theXObject) const;
virtual void
setStylesheetParam(
1.13 +0 -33 xml-xalan/c/src/XSLT/XSLTProcessor.hpp
Index: XSLTProcessor.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XSLT/XSLTProcessor.hpp,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- XSLTProcessor.hpp 2000/07/21 19:52:58 1.12
+++ XSLTProcessor.hpp 2000/07/28 22:02:21 1.13
@@ -72,24 +72,15 @@
-class Arg;
-class DispatcherFactory;
class ElemTemplateElement;
-class Formatter;
class FormatterListener;
class GenerateEvent;
-class InputSource;
-class Locator;
class NodeRefListBase;
class PrefixResolver;
class PrintWriter;
-class ProblemListener;
class QName;
-class ResultTreeFrag;
class ResultTreeFragBase;
class SelectionEvent;
-class StackEntry;
-class Stylesheet;
class StylesheetConstructionContext;
class StylesheetExecutionContext;
class StylesheetRoot;
@@ -100,10 +91,7 @@
class XalanNode;
class XMLParserLiaison;
class XObject;
-class XObjectFactory;
class XPathExecutionContext;
-class XPathFactory;
-class XPathProcessor;
class XSLTInputSource;
class XSLTResultTarget;
@@ -331,27 +319,6 @@
*/
virtual const XalanDOMString
getUniqueNSValue() const = 0;
-
- /**
- * Function to create an XObject that represents a Result tree
- * fragment.
- *
- * @param r result tree fragment to use
- * @return pointer to XObject
- */
- virtual XObject*
- createXResultTreeFrag(const ResultTreeFragBase& r) const = 0;
-
- /**
- * Function to destroy an XObject that was returned
- * by executing. It is safe to call this function
- * with any XObject.
- *
- * @param theXObject pointer to the XObject.
- * @return true if the object was destroyed.
- */
- virtual bool
- destroyXObject(XObject* theXObject) const = 0;
/**
* Push a top-level stylesheet parameter. This value can be evaluated
via