dbertoni 01/05/10 10:58:14
Modified: c/src/XSLT ElemTemplateElement.cpp ElemTemplateElement.hpp
Log:
Changes for caching NodeSorters.
Revision Changes Path
1.55 +31 -25 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.54
retrieving revision 1.55
diff -u -r1.54 -r1.55
--- ElemTemplateElement.cpp 2001/04/13 02:01:27 1.54
+++ ElemTemplateElement.cpp 2001/05/10 17:58:07 1.55
@@ -99,6 +99,7 @@
#include "ElemSort.hpp"
#include "ElemTemplate.hpp"
#include "NamespacesHandler.hpp"
+#include "NodeSorter.hpp"
#include "Stylesheet.hpp"
#include "StylesheetExecutionContext.hpp"
#include "StylesheetRoot.hpp"
@@ -108,7 +109,6 @@
const XalanDOMString
ElemTemplateElement::s_emptyString;
-const NodeSorter::NodeSortKeyVectorType
ElemTemplateElement::s_dummyKeys;
@@ -602,13 +602,21 @@
theTemplate,
sourceNodeContext,
selectPattern,
- s_dummyKeys,
+ 0,
selectStackFrameIndex);
}
else
{
- NodeSorter::NodeSortKeyVectorType keys;
+ typedef NodeSorter::NodeSortKeyVectorType
NodeSortKeyVectorType;
+ typedef
StylesheetExecutionContext::BorrowReturnNodeSorter BorrowReturnNodeSorter;
+ BorrowReturnNodeSorter sorter(executionContext);
+
+ NodeSortKeyVectorType& keys = sorter->getSortKeys();
+ assert(keys.size() == 0);
+
+ CollectionClearGuard<NodeSortKeyVectorType>
guard(keys);
+
// Reserve the space now...
keys.reserve(nChildren);
@@ -677,7 +685,7 @@
theTemplate,
sourceNodeContext,
selectPattern,
- keys,
+ sorter.get(),
selectStackFrameIndex);
}
}
@@ -689,7 +697,7 @@
theTemplate,
sourceNodeContext,
selectPattern,
- s_dummyKeys,
+ 0,
selectStackFrameIndex);
}
}
@@ -698,13 +706,13 @@
void
ElemTemplateElement::doTransformSelectedChildren(
- StylesheetExecutionContext&
executionContext,
- const ElemTemplateElement&
xslInstruction,
- const ElemTemplateElement*
theTemplate,
- XalanNode*
sourceNodeContext,
- const XPath&
selectPattern,
- const NodeSorter::NodeSortKeyVectorType& keys,
- int
selectStackFrameIndex) const
+ StylesheetExecutionContext&
executionContext,
+ const ElemTemplateElement& xslInstruction,
+ const ElemTemplateElement* theTemplate,
+ XalanNode*
sourceNodeContext,
+ const XPath&
selectPattern,
+ NodeSorter*
sorter,
+ int
selectStackFrameIndex) const
{
typedef StylesheetExecutionContext::SetAndRestoreCurrentStackFrameIndex
SetAndRestoreCurrentStackFrameIndex;
@@ -748,7 +756,7 @@
theTemplate,
sourceNodeContext,
selectStackFrameIndex,
- keys,
+ sorter,
sourceNodes,
nNodes);
}
@@ -759,16 +767,16 @@
void
ElemTemplateElement::doTransformSelectedChildren(
- StylesheetExecutionContext&
executionContext,
- const ElemTemplateElement&
xslInstruction,
- const ElemTemplateElement*
theTemplate,
- XalanNode*
sourceNodeContext,
- int
selectStackFrameIndex,
- const NodeSorter::NodeSortKeyVectorType& keys,
- const NodeRefListBase&
sourceNodes,
- unsigned int
sourceNodesCount) const
+ StylesheetExecutionContext&
executionContext,
+ const ElemTemplateElement& xslInstruction,
+ const ElemTemplateElement* theTemplate,
+ XalanNode*
sourceNodeContext,
+ int
selectStackFrameIndex,
+ NodeSorter*
sorter,
+ const NodeRefListBase& sourceNodes,
+ unsigned int
sourceNodesCount) const
{
- if (keys.size() > 0)
+ if (sorter != 0)
{
typedef
StylesheetExecutionContext::SetAndRestoreCurrentStackFrameIndex
SetAndRestoreCurrentStackFrameIndex;
typedef
StylesheetExecutionContext::ContextNodeListSetAndRestore
ContextNodeListSetAndRestore;
@@ -779,8 +787,6 @@
*sortedSourceNodes = sourceNodes;
{
- NodeSorter sorter;
-
SetAndRestoreCurrentStackFrameIndex
theStackFrameSetAndRestore(
executionContext,
selectStackFrameIndex);
@@ -789,7 +795,7 @@
executionContext,
sourceNodes);
- sorter.sort(executionContext, *sortedSourceNodes, keys);
+ sorter->sort(executionContext, *sortedSourceNodes);
}
doTransformSelectedChildren(
1.28 +17 -19 xml-xalan/c/src/XSLT/ElemTemplateElement.hpp
Index: ElemTemplateElement.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XSLT/ElemTemplateElement.hpp,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -r1.27 -r1.28
--- ElemTemplateElement.hpp 2001/03/29 22:24:26 1.27
+++ ElemTemplateElement.hpp 2001/05/10 17:58:09 1.28
@@ -85,13 +85,13 @@
#include <XSLT/NamespacesHandler.hpp>
-#include <XSLT/NodeSorter.hpp>
class AttributeList;
class NamespacesHandler;
class NodeRefListBase;
+class NodeSorter;
class QName;
class Stylesheet;
class StylesheetConstructionContext;
@@ -684,13 +684,13 @@
*/
void
doTransformSelectedChildren(
- StylesheetExecutionContext&
executionContext,
- const ElemTemplateElement&
xslInstruction,
- const ElemTemplateElement*
theTemplate,
- XalanNode*
sourceNodeContext,
- const XPath&
selectPattern,
- const NodeSorter::NodeSortKeyVectorType& keys,
- int
selectStackFrameIndex) const;
+ StylesheetExecutionContext&
executionContext,
+ const ElemTemplateElement& xslInstruction,
+ const ElemTemplateElement* theTemplate,
+ XalanNode*
sourceNodeContext,
+ const XPath&
selectPattern,
+ NodeSorter*
sorter,
+ int
selectStackFrameIndex) const;
/**
* Perform a query if needed, and call transformChild for each child.
@@ -705,19 +705,19 @@
* think we want this).
* @param selectStackFrameIndex stack frame context for executing the
* select statement
- * @param keys Any sort keys that should be applied
+ * @param sorter If non-null, use the sorter to sort the nodes.
* @param sourceNodesCount The number of source nodes.
*/
void
doTransformSelectedChildren(
- StylesheetExecutionContext&
executionContext,
- const ElemTemplateElement&
xslInstruction,
- const ElemTemplateElement*
theTemplate,
- XalanNode*
sourceNodeContext,
- int
selectStackFrameIndex,
- const NodeSorter::NodeSortKeyVectorType& keys,
- const NodeRefListBase&
sourceNodes,
- unsigned int
sourceNodesCount) const;
+ StylesheetExecutionContext&
executionContext,
+ const ElemTemplateElement& xslInstruction,
+ const ElemTemplateElement* theTemplate,
+ XalanNode*
sourceNodeContext,
+ int
selectStackFrameIndex,
+ NodeSorter*
sorter,
+ const NodeRefListBase& sourceNodes,
+ unsigned int
sourceNodesCount) const;
/**
* Perform a query if needed, and call transformChild for each child.
@@ -804,8 +804,6 @@
XalanEmptyNamedNodeMap m_fakeAttributes;
const XalanDOMString m_baseIndentifier;
-
- static const NodeSorter::NodeSortKeyVectorType s_dummyKeys;
};
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]