You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by db...@apache.org on 2002/09/26 03:37:47 UTC
cvs commit: xml-xalan/c/src/XSLT KeyTable.cpp KeyTable.hpp
dbertoni 2002/09/25 18:37:47
Modified: c/src/XSLT KeyTable.cpp KeyTable.hpp
Log:
Make sure node sets are marked being in document order.
Revision Changes Path
1.20 +39 -9 xml-xalan/c/src/XSLT/KeyTable.cpp
Index: KeyTable.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XSLT/KeyTable.cpp,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -r1.19 -r1.20
--- KeyTable.cpp 21 Sep 2002 01:24:41 -0000 1.19
+++ KeyTable.cpp 26 Sep 2002 01:37:47 -0000 1.20
@@ -2,7 +2,7 @@
* The Apache Software License, Version 1.1
*
*
- * Copyright (c) 1999 The Apache Software Foundation. All rights
+ * Copyright (c) 1999-2002 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -203,6 +203,36 @@
pos = nextNode;
} // while(0 != pos)
+
+ if (m_keys.empty() == false)
+ {
+ const KeysMapType::iterator theEnd = m_keys.end();
+ KeysMapType::iterator theCurrent = m_keys.begin();
+ assert(theCurrent != theEnd);
+
+ do
+ {
+ NodeListMapType& theCurrentNodeListMap = (*theCurrent).second;
+
+ if (theCurrentNodeListMap.empty() == false)
+ {
+ const NodeListMapType::iterator theEnd = theCurrentNodeListMap.end();
+ NodeListMapType::iterator theCurrent = theCurrentNodeListMap.begin();
+ assert(theCurrent != theEnd);
+
+ do
+ {
+ (*theCurrent).second.setDocumentOrder();
+
+ ++theCurrent;
+ }
+ while(theCurrent != theEnd);
+ }
+
+ ++theCurrent;
+ }
+ while(theCurrent != theEnd);
+ }
} // end constructor
@@ -213,7 +243,7 @@
-const NodeRefListBase&
+const MutableNodeRefList&
KeyTable::getNodeSetByKey(
const XalanQName& qname,
const XalanDOMString& ref) const
@@ -241,14 +271,12 @@
inline void
-KeyTable::addIfNotFound(
- MutableNodeRefList& theNodeList,
- XalanNode* theNode)
+addIfNotFound(
+ StylesheetExecutionContext& executionContext,
+ MutableNodeRefList& theNodeList,
+ XalanNode* theNode)
{
- if (theNodeList.indexOf(theNode) == MutableNodeRefList::npos)
- {
- theNodeList.addNode(theNode);
- }
+ theNodeList.addNodeInDocOrder(theNode, executionContext);
}
@@ -270,6 +298,7 @@
if(xuse->getType() != XObject::eTypeNodeSet)
{
addIfNotFound(
+ executionContext,
theKeys[kd.getQName()][xuse->str()],
testNode);
}
@@ -296,6 +325,7 @@
DOMServices::getNodeData(*nl.item(i), nodeData);
addIfNotFound(
+ executionContext,
theKeys[kd.getQName()][nodeData],
testNode);
1.14 +3 -14 xml-xalan/c/src/XSLT/KeyTable.hpp
Index: KeyTable.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XSLT/KeyTable.hpp,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- KeyTable.hpp 21 Sep 2002 01:24:41 -0000 1.13
+++ KeyTable.hpp 26 Sep 2002 01:37:47 -0000 1.14
@@ -2,7 +2,7 @@
* The Apache Software License, Version 1.1
*
*
- * Copyright (c) 1999 The Apache Software Foundation. All rights
+ * Copyright (c) 1999-2002 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -157,23 +157,12 @@
* attribute on xsl:key
* @return pointer to nodeset for key
*/
- const NodeRefListBase&
+ const MutableNodeRefList&
getNodeSetByKey(
const XalanQName& qname,
const XalanDOMString& ref) const;
private:
-
- /**
- * Helper function to add a node to the list if not found.
- *
- * @param theNodeList the node list.
- * @param theNode the node to add.
- */
- static void
- addIfNotFound(
- MutableNodeRefList& theNodeList,
- XalanNode* theNode);
static void
processKeyDeclaration(
---------------------------------------------------------------------
To unsubscribe, e-mail: xalan-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-cvs-help@xml.apache.org