12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- 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);
- }
- }
- }
|