Nowadays, XmlDeclaratoin.WriteTo() writes PI instead of raw.
[mono.git] / mcs / class / System.XML / System.Xml / XmlIteratorNodeList.cs
index fc5518e98e5ed6ba286dd5c6be569c26c132a766..36735fa5048c5a2ad550c6fe5ff2ec36618e3a27 100644 (file)
@@ -34,17 +34,22 @@ using System.Xml.XPath;
 
 namespace System.Xml
 {
-       internal class XmlIteratorNodeList : XmlNodeList
+       internal class XmlIteratorNodeList : XmlNodeList//, IDisposable
        {
+               XmlDocument doc;
                XPathNodeIterator source;
                XPathNodeIterator iterator;
                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 ();
@@ -97,13 +102,31 @@ namespace System.Xml
 
                #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)
@@ -125,6 +148,7 @@ namespace System.Xml
 
                #endregion
 
+               // FIXME: switch to XPathNodeIteratorNodeListIterator2.
                class XPathNodeIteratorNodeListIterator : IEnumerator
                {
                        XPathNodeIterator iter;