12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- using System;
- using System.Collections.Generic;
- namespace SharpCifs.Util.Sharpen
- {
- internal class EnumeratorWrapper<T> : Iterator<T>
- {
- object _collection;
- IEnumerator<T> _e;
- T _lastVal;
- bool _more;
- bool _copied;
- public EnumeratorWrapper (object collection, IEnumerator<T> 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<T> col = _collection as ICollection<T>;
- 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<T> remaining = new List<T> ();
- do {
- remaining.Add (_e.Current);
- } while (_e.MoveNext ());
- _e = remaining.GetEnumerator ();
- _e.MoveNext ();
- _copied = true;
- }
- col.Remove (_lastVal);
- }
- }
- }
|