1 using System; 2 using System.Collections; 3 4 namespace GMime { 5 public class HeaderEnumerator : IEnumerator, IDisposable { 6 bool premove = true; 7 HeaderList headers; 8 HeaderIter iter; 9 HeaderEnumerator(HeaderList headers)10 public HeaderEnumerator (HeaderList headers) 11 { 12 if (headers == null) 13 throw new ArgumentNullException ("headers"); 14 15 iter = headers.GetIter (); 16 this.headers = headers; 17 } 18 19 public Header Current { 20 get { 21 CheckDisposed (); 22 return new Header (iter.Name, iter.Value); 23 } 24 } 25 26 object IEnumerator.Current { 27 get { return Current; } 28 } 29 30 public string Name { 31 get { 32 CheckDisposed (); 33 return iter.Name; 34 } 35 } 36 37 public string Value { 38 set { 39 CheckDisposed (); 40 iter.Value = value; 41 } 42 43 get { 44 CheckDisposed (); 45 return iter.Value; 46 } 47 } 48 MoveFirst()49 public bool MoveFirst () 50 { 51 CheckDisposed (); 52 53 premove = false; 54 return iter.MoveFirst (); 55 } 56 MoveLast()57 public bool MoveLast () 58 { 59 CheckDisposed (); 60 61 premove = false; 62 return iter.MoveLast (); 63 } 64 MoveNext()65 public bool MoveNext () 66 { 67 CheckDisposed (); 68 69 if (premove) { 70 premove = false; 71 return iter.MoveFirst (); 72 } 73 74 return iter.MoveNext (); 75 } 76 MovePrev()77 public bool MovePrev () 78 { 79 CheckDisposed (); 80 81 if (premove) 82 return false; 83 84 premove = false; 85 return iter.MovePrev (); 86 } 87 Remove()88 public bool Remove () 89 { 90 CheckDisposed (); 91 return iter.Remove (); 92 } 93 Reset()94 public void Reset () 95 { 96 CheckDisposed (); 97 iter.MoveFirst (); 98 premove = true; 99 } 100 CheckDisposed()101 void CheckDisposed () 102 { 103 if (headers == null) 104 throw new ObjectDisposedException ("The HeaderEnumerator has been disposed."); 105 } 106 Dispose()107 public void Dispose () 108 { 109 headers = null; 110 iter = null; 111 } 112 } 113 } 114