Initialize the gmime for upstream
[platform/upstream/gmime.git] / mono / HeaderEnumerator.cs
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                 
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                 
49                 public bool MoveFirst ()
50                 {
51                         CheckDisposed ();
52                         
53                         premove = false;
54                         return iter.MoveFirst ();
55                 }
56                 
57                 public bool MoveLast ()
58                 {
59                         CheckDisposed ();
60                         
61                         premove = false;
62                         return iter.MoveLast ();
63                 }
64                 
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                 
77                 public bool MovePrev ()
78                 {
79                         CheckDisposed ();
80                         
81                         if (premove)
82                                 return false;
83                         
84                         premove = false;
85                         return iter.MovePrev ();
86                 }
87                 
88                 public bool Remove ()
89                 {
90                         CheckDisposed ();
91                         return iter.Remove ();
92                 }
93                 
94                 public void Reset ()
95                 {
96                         CheckDisposed ();
97                         iter.MoveFirst ();
98                         premove = true;
99                 }
100
101                 void CheckDisposed ()
102                 {
103                         if (headers == null)
104                                 throw new ObjectDisposedException ("The HeaderEnumerator has been disposed.");
105                 }
106                 
107                 public void Dispose ()
108                 {
109                         headers = null;
110                         iter = null;
111                 }
112         }
113 }