Author: atsushi
Date: 2005-03-15 16:34:04 -0500 (Tue, 15 Mar 2005)
New Revision: 41864
Modified:
trunk/mcs/class/System.XML/Mono.Xml.Xsl.Operations/ChangeLog
trunk/mcs/class/System.XML/Mono.Xml.Xsl.Operations/XslVariable.cs
trunk/mcs/class/System.XML/Mono.Xml.Xsl/ChangeLog
trunk/mcs/class/System.XML/Mono.Xml.Xsl/XslFunctions.cs
trunk/mcs/class/System.XML/Mono.Xml.Xsl/XslKey.cs
trunk/mcs/class/System.XML/System.Xml.XPath/ChangeLog
trunk/mcs/class/System.XML/System.Xml.XPath/DefaultContext.cs
trunk/mcs/class/System.XML/System.Xml.XPath/Expression.cs
trunk/mcs/class/System.XML/System.Xml.XPath/Iterator.cs
Log:
2004-03-15 Atsushi Enomoto <[EMAIL PROTECTED]>
* DefaultContext.cs,
Expression.cs,
Iterator.cs : Now RequireSorting is not required in BaseIterator
(it is now fully in Expression).
Removed the last ListIterator .ctor() argument.
* XslKey.cs : removed last ListIterator.ctor() argument.
Reverted the last commit that changed internal key index change
from ArrayList to Hashtable. Avoid clone in CollectIndex().
Sort results in Evaluate() before passing list to ListIterator.
* XslFunctions.cs : removed last ListIterator.ctor() argument.
* XslVariable.cs : removed last ListIterator.ctor() argument.
Modified: trunk/mcs/class/System.XML/Mono.Xml.Xsl/ChangeLog
===================================================================
--- trunk/mcs/class/System.XML/Mono.Xml.Xsl/ChangeLog 2005-03-15 21:31:06 UTC
(rev 41863)
+++ trunk/mcs/class/System.XML/Mono.Xml.Xsl/ChangeLog 2005-03-15 21:34:04 UTC
(rev 41864)
@@ -1,3 +1,11 @@
+2005-03-15 Atsushi Enomoto <[EMAIL PROTECTED]>
+
+ * XslKey.cs : removed last ListIterator.ctor() argument.
+ Reverted the last commit that changed internal key index change
+ from ArrayList to Hashtable. Avoid clone in CollectIndex().
+ Sort results in Evaluate() before passing list to ListIterator.
+ * XslFunctions.cs : removed last ListIterator.ctor() argument.
+
2005-03-14 Atsushi Enomoto <[EMAIL PROTECTED]>
* XslKey.cs,
Modified: trunk/mcs/class/System.XML/Mono.Xml.Xsl/XslFunctions.cs
===================================================================
--- trunk/mcs/class/System.XML/Mono.Xml.Xsl/XslFunctions.cs 2005-03-15
21:31:06 UTC (rev 41863)
+++ trunk/mcs/class/System.XML/Mono.Xml.Xsl/XslFunctions.cs 2005-03-15
21:34:04 UTC (rev 41864)
@@ -277,7 +277,7 @@
}
}
- return new ListIterator (list, xsltContext, false);
+ return new ListIterator (list, xsltContext);
}
XPathNodeIterator GetDocument (XsltCompiledContext xsltContext,
string arg0, string baseUri)
@@ -662,7 +662,7 @@
}
ArrayList al = new ArrayList ();
al.Add (nav);
- return new ListIterator (al, ctx, false);
+ return new ListIterator (al, ctx);
}
}
}
Modified: trunk/mcs/class/System.XML/Mono.Xml.Xsl/XslKey.cs
===================================================================
--- trunk/mcs/class/System.XML/Mono.Xml.Xsl/XslKey.cs 2005-03-15 21:31:06 UTC
(rev 41863)
+++ trunk/mcs/class/System.XML/Mono.Xml.Xsl/XslKey.cs 2005-03-15 21:34:04 UTC
(rev 41864)
@@ -59,14 +59,14 @@
return expr.Evaluate (iter);
}
- internal override XPathNodeType EvaluatedNodeType {
- get { return expr.EvaluatedNodeType; }
- }
-
- public override XPathResultType ReturnType {
- get { return expr.ReturnType; }
+ internal override XPathNodeType EvaluatedNodeType {
+ get { return expr.EvaluatedNodeType; }
}
+ public override XPathResultType ReturnType {
+ get { return expr.ReturnType; }
+ }
+
public override bool RequireSorting {
get { return true; }
}
@@ -122,10 +122,13 @@
{
XPathNavigator nav = doc.Clone ();
nav.MoveToRoot ();
+ XPathNavigator tmp = doc.Clone ();
do {
- if (nav.Matches (key.MatchPattern))
- CollectIndex (nav);
+ if (nav.Matches (key.MatchPattern)) {
+ tmp.MoveTo (nav);
+ CollectIndex (nav, tmp);
+ }
} while (MoveNavigatorToNext (nav));
}
@@ -140,9 +143,8 @@
return false;
}
- private void CollectIndex (XPathNavigator nav)
+ private void CollectIndex (XPathNavigator nav, XPathNavigator
target)
{
- XPathNavigator target = nav.Clone ();
XPathNodeIterator iter;
switch (key.UsePattern.ReturnType) {
case XPathResultType.NodeSet:
@@ -169,12 +171,15 @@
private void AddIndex (string key, XPathNavigator target)
{
- Hashtable al = map [key] as Hashtable;
+ ArrayList al = map [key] as ArrayList;
if (al == null) {
- al = new Hashtable ();
+ al = new ArrayList ();
map [key] = al;
}
- al [target] = target;
+ for (int i = 0; i < al.Count; i++)
+ if (((XPathNavigator) al [i]).IsSamePosition
(target))
+ return;
+ al.Add (target.Clone ());
}
public bool Matches (XPathNavigator nav, string value)
@@ -192,11 +197,11 @@
key.UsePattern.SetContext (null);
}
- Hashtable al = map [value] as Hashtable;
+ ArrayList al = map [value] as ArrayList;
if (al == null)
return false;
- foreach (XPathNavigator i in al.Values)
- if (i.IsSamePosition (nav))
+ for (int i = 0; i < al.Count; i++)
+ if (((XPathNavigator) al [i]).IsSamePosition
(nav))
return true;
return false;
}
@@ -215,8 +220,8 @@
} else {
FindKeyMatch (XPathFunctions.ToString (o),
result, iter.Current);
}
-
- return new ListIterator (result, (ctx), true);
+ result.Sort (XPathNavigatorComparer.Instance);
+ return new ListIterator (result, (ctx));
}
void FindKeyMatch (string value, ArrayList result,
XPathNavigator context)
Modified: trunk/mcs/class/System.XML/Mono.Xml.Xsl.Operations/ChangeLog
===================================================================
--- trunk/mcs/class/System.XML/Mono.Xml.Xsl.Operations/ChangeLog
2005-03-15 21:31:06 UTC (rev 41863)
+++ trunk/mcs/class/System.XML/Mono.Xml.Xsl.Operations/ChangeLog
2005-03-15 21:34:04 UTC (rev 41864)
@@ -1,3 +1,7 @@
+2005-03-15 Atsushi Enomoto <[EMAIL PROTECTED]>
+
+ * XslVariable.cs : removed last ListIterator.ctor() argument.
+
2005-03-09 Atsushi Enomoto <[EMAIL PROTECTED]>
* XslText.cs : whitespace nodes should be written at any time, once
Modified: trunk/mcs/class/System.XML/Mono.Xml.Xsl.Operations/XslVariable.cs
===================================================================
--- trunk/mcs/class/System.XML/Mono.Xml.Xsl.Operations/XslVariable.cs
2005-03-15 21:31:06 UTC (rev 41863)
+++ trunk/mcs/class/System.XML/Mono.Xml.Xsl.Operations/XslVariable.cs
2005-03-15 21:34:04 UTC (rev 41864)
@@ -95,7 +95,7 @@
XPathNodeIterator iter =
(XPathNodeIterator) o;
while (iter.MoveNext ())
al.Add (iter.Current.Clone ());
- o = new ListIterator (al,
p.XPathContext, false);
+ o = new ListIterator (al,
p.XPathContext);
}
return o;
} else if (content != null) {
Modified: trunk/mcs/class/System.XML/System.Xml.XPath/ChangeLog
===================================================================
--- trunk/mcs/class/System.XML/System.Xml.XPath/ChangeLog 2005-03-15
21:31:06 UTC (rev 41863)
+++ trunk/mcs/class/System.XML/System.Xml.XPath/ChangeLog 2005-03-15
21:34:04 UTC (rev 41864)
@@ -1,5 +1,13 @@
2004-03-15 Atsushi Enomoto <[EMAIL PROTECTED]>
+ * DefaultContext.cs,
+ Expression.cs,
+ Iterator.cs : Now RequireSorting is not required in BaseIterator
+ (it is now fully in Expression).
+ Removed the last ListIterator .ctor() argument.
+
+2004-03-15 Atsushi Enomoto <[EMAIL PROTECTED]>
+
* XPathNavigator.cs : In ComparePosition(), make use of IsDescendant().
2004-03-14 Atsushi Enomoto <[EMAIL PROTECTED]>
Modified: trunk/mcs/class/System.XML/System.Xml.XPath/DefaultContext.cs
===================================================================
--- trunk/mcs/class/System.XML/System.Xml.XPath/DefaultContext.cs
2005-03-15 21:31:06 UTC (rev 41863)
+++ trunk/mcs/class/System.XML/System.Xml.XPath/DefaultContext.cs
2005-03-15 21:34:04 UTC (rev 41864)
@@ -305,7 +305,7 @@
rgNodes.Add (n.Clone ());
rgNodes.Sort (XPathNavigatorComparer.Instance);
- return new ListIterator (iter, rgNodes, true);
+ return new ListIterator (iter, rgNodes);
}
public override string ToString ()
Modified: trunk/mcs/class/System.XML/System.Xml.XPath/Expression.cs
===================================================================
--- trunk/mcs/class/System.XML/System.Xml.XPath/Expression.cs 2005-03-15
21:31:06 UTC (rev 41863)
+++ trunk/mcs/class/System.XML/System.Xml.XPath/Expression.cs 2005-03-15
21:34:04 UTC (rev 41864)
@@ -238,7 +238,7 @@
XPathSortElement elt =
(XPathSortElement) rgElts [iResult];
rgResults [iResult] = elt.Navigator;
}
- return new ListIterator (iter, rgResults,
false);
+ return new ListIterator (iter, rgResults);
}
class XPathSortElement
Modified: trunk/mcs/class/System.XML/System.Xml.XPath/Iterator.cs
===================================================================
--- trunk/mcs/class/System.XML/System.Xml.XPath/Iterator.cs 2005-03-15
21:31:06 UTC (rev 41863)
+++ trunk/mcs/class/System.XML/System.Xml.XPath/Iterator.cs 2005-03-15
21:34:04 UTC (rev 41864)
@@ -64,13 +64,11 @@
get { return _nsm; }
set { _nsm = value; }
}
-
+
public virtual bool ReverseAxis {
get { return false; }
}
- public abstract bool RequireSorting { get; }
-
public virtual int ComparablePosition {
get {
if (ReverseAxis) {
@@ -139,10 +137,6 @@
public override XPathNavigator Current {
get { return iter.Current; }
}
-
- public override bool RequireSorting {
- get { return true; }
- }
}
internal abstract class SimpleIterator : BaseIterator
@@ -193,8 +187,6 @@
public override XPathNavigator Current {
get { return _nav; }
}
-
- public override bool RequireSorting { get { return false; } }
}
internal class NullIterator : SelfIterator
@@ -213,6 +205,7 @@
internal class ParensIterator : BaseIterator
{
BaseIterator _iter;
+
public ParensIterator (BaseIterator iter) : base
(iter.NamespaceManager)
{
_iter = iter;
@@ -229,8 +222,6 @@
public override XPathNavigator Current { get { return
_iter.Current; }}
- public override bool RequireSorting { get { return
_iter.RequireSorting; } }
-
public override int Count { get { return _iter.Count; } }
}
@@ -258,8 +249,6 @@
}
public override bool ReverseAxis { get { return true; } }
-
- public override bool RequireSorting { get { return false; } }
}
internal class ChildIterator : SimpleIterator
@@ -275,8 +264,6 @@
}
return fSuccess;
}
-
- public override bool RequireSorting { get { return false; } }
}
internal class FollowingSiblingIterator : SimpleIterator
@@ -299,8 +286,6 @@
}
return false;
}
-
- public override bool RequireSorting { get { return false; } }
}
internal class PrecedingSiblingIterator : SimpleIterator
@@ -358,8 +343,6 @@
public override bool ReverseAxis {
get { return true; }
}
-
- public override bool RequireSorting { get { return true; } }
}
internal class AncestorIterator : SimpleIterator
@@ -423,8 +406,6 @@
get { return true; }
}
- public override bool RequireSorting { get { return true; } }
-
public override int Count {
get {
if (navigators == null)
@@ -500,8 +481,6 @@
get { return true; }
}
- public override bool RequireSorting { get { return true; } }
-
public override int Count {
get {
if (navigators == null)
@@ -551,8 +530,6 @@
_finished = true;
return false;
}
-
- public override bool RequireSorting { get { return false; } }
}
internal class DescendantOrSelfIterator : SimpleIterator
@@ -600,8 +577,6 @@
_finished = true;
return false;
}
-
- public override bool RequireSorting { get { return false; } }
}
internal class FollowingIterator : SimpleIterator
@@ -660,8 +635,6 @@
_finished = true;
return false;
}
-
- public override bool RequireSorting { get { return false; } }
}
internal class PrecedingIterator : SimpleIterator
@@ -717,8 +690,6 @@
public override bool ReverseAxis {
get { return true; }
}
-
- public override bool RequireSorting { get { return true; } }
}
internal class NamespaceIterator : SimpleIterator
@@ -745,7 +716,6 @@
}
public override bool ReverseAxis { get { return true; } }
- public override bool RequireSorting { get { return false; } }
}
internal class AttributeIterator : SimpleIterator
@@ -770,8 +740,6 @@
}
return false;
}
-
- public override bool RequireSorting { get { return true; } }
}
internal class AxisIterator : BaseIterator
@@ -820,8 +788,6 @@
public override bool ReverseAxis {
get { return _iter.ReverseAxis; }
}
-
- public override bool RequireSorting { get { return
_iter.RequireSorting; } }
}
internal class SimpleSlashIterator : BaseIterator
@@ -865,11 +831,6 @@
public override XPathNavigator Current {
get { return _current; }
}
-
- public override bool RequireSorting {
- // It always does not need to be sorted.
- get { return false; }
- }
}
internal class SlashIterator : BaseIterator
@@ -1027,11 +988,6 @@
}
}
- public override bool RequireSorting {
- // It always does not need to be sorted.
- get { return false; }
- }
-
public override int Count { get { return _navStore == null ?
base.Count : _navStore.Count; } }
}
@@ -1096,36 +1052,30 @@
public override bool ReverseAxis {
get { return _iter.ReverseAxis; }
}
-
- public override bool RequireSorting { get { return
_iter.RequireSorting; } }
}
internal class ListIterator : BaseIterator
{
private IList _list;
- bool _requireSorting;
- public ListIterator (BaseIterator iter, IList list, bool
requireSorting) : base (iter.NamespaceManager)
+ public ListIterator (BaseIterator iter, IList list) : base
(iter.NamespaceManager)
{
if (!(list is ICloneable))
throw new ArgumentException ("Target enumerator
must be cloneable.");
_list = list;
- _requireSorting = requireSorting;
}
- public ListIterator (IList list, NSResolver nsm, bool
requireSorting) : base (nsm)
+ public ListIterator (IList list, NSResolver nsm) : base (nsm)
{
if (!(list is ICloneable))
throw new ArgumentException ("Target enumerator
must be cloneable.");
_list = list;
- _requireSorting = requireSorting;
}
private ListIterator (ListIterator other) : base (other)
{
ICloneable listClone = other._list as ICloneable;
_list = (IList) listClone.Clone ();
- _requireSorting = other._requireSorting;
}
public override XPathNodeIterator Clone () { return new
ListIterator (this); }
@@ -1143,8 +1093,6 @@
}
}
- public override bool RequireSorting { get { return
_requireSorting; } }
-
public override int Count { get { return _list.Count; } }
}
@@ -1225,7 +1173,54 @@
{
get { return _current; }
}
+ }
- public override bool RequireSorting { get { return
_left.RequireSorting || _right.RequireSorting; } }
+ internal class OrderedIterator : BaseIterator
+ {
+ BaseIterator iter;
+ ArrayList list;
+ int index = -1;
+
+ public OrderedIterator (BaseIterator iter)
+ : base (iter.NamespaceManager)
+ {
+// if (iter.Ordered)
+ if (false)
+ this.iter = iter;
+ else {
+ list = new ArrayList ();
+ while (iter.MoveNext ())
+ list.Add (iter.Current);
+ list.Sort (XPathNavigatorComparer.Instance);
+ }
+ }
+
+ private OrderedIterator (OrderedIterator other, bool dummy)
+ : base (other)
+ {
+ if (other.iter != null)
+ iter = (BaseIterator) other.iter.Clone ();
+ list = other.list;
+ index = other.index;
+ }
+
+ public override XPathNodeIterator Clone ()
+ {
+ return new OrderedIterator (this);
+ }
+
+ public override bool MoveNextCore ()
+ {
+ if (iter != null)
+ return iter.MoveNext ();
+ else if (index++ < list.Count)
+ return true;
+ index--;
+ return false;
+ }
+
+ public override XPathNavigator Current {
+ get { return iter != null ? iter.Current : index < 0 ?
null : (XPathNavigator) list [index]; }
+ }
}
}
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches