namespace System.Xml
{
- internal class XmlIteratorNodeList : XmlNodeList
+ internal class XmlIteratorNodeList : XmlNodeList//, IDisposable
{
+ XmlDocument doc;
XPathNodeIterator source;
XPathNodeIterator iterator;
- XmlNode previous;
ArrayList list;
- bool finished;
+ bool finished, event_detached;
#region Constructors
- public XmlIteratorNodeList (XPathNodeIterator iter)
+ public XmlIteratorNodeList (XmlDocument doc, XPathNodeIterator iter)
{
+ if (doc == null)
+ throw new Exception ("huh?");
+ this.doc = doc;
+ //doc.NodeRemoving += SaveNodeList;
source = iter;
iterator = iter.Clone ();
list = new ArrayList ();
#region Methods
+ /*
+ void IDisposable.Dispose ()
+ {
+ if (!event_detached) {
+ event_detached = true;
+ doc.NodeRemoving -= SaveNodeList;
+ }
+ }
+
+ void SaveNodeList (object o, XmlNodeChangedEventArgs e)
+ {
+ if (Item (Count) != null || !finished)
+ throw new Exception (); // dummy. It accesses to the end of the list
+ doc.NodeRemoving -= SaveNodeList;
+ event_detached = true;
+ }
+ */
+
public override IEnumerator GetEnumerator ()
{
if (finished)
return list.GetEnumerator ();
else
return new XPathNodeIteratorNodeListIterator (source);
-// return new XPathNodeIteratorNodeListIterator2 (this);
+ //return new XPathNodeIteratorNodeListIterator2 (this);
}
public override XmlNode Item (int index)
#endregion
+ // FIXME: switch to XPathNodeIteratorNodeListIterator2.
class XPathNodeIteratorNodeListIterator : IEnumerator
{
XPathNodeIterator iter;