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