using System; using System.Collections.Generic; namespace SharpCifs.Util.Sharpen { internal class EnumeratorWrapper : Iterator { object _collection; IEnumerator _e; T _lastVal; bool _more; bool _copied; public EnumeratorWrapper (object collection, IEnumerator e) { this._e = e; this._collection = collection; _more = e.MoveNext (); } public override bool HasNext () { return _more; } public override T Next () { if (!_more) throw new NoSuchElementException (); _lastVal = _e.Current; _more = _e.MoveNext (); return _lastVal; } public override void Remove () { ICollection col = _collection as ICollection; if (col == null) { throw new NotSupportedException (); } if (_more && !_copied) { // Read the remaining elements, since the current enumerator // will be invalid after removing the element List remaining = new List (); do { remaining.Add (_e.Current); } while (_e.MoveNext ()); _e = remaining.GetEnumerator (); _e.MoveNext (); _copied = true; } col.Remove (_lastVal); } } }