1 using System; 2 using System.Collections; 3 using System.Runtime.InteropServices; 4 5 namespace GMime { 6 7 public class InternetAddressList : ArrayList, IDisposable { 8 private IntPtr raw_list; 9 private bool needs_destroy; 10 11 [DllImport("gmime")] internet_address_list_next(IntPtr raw)12 static extern IntPtr internet_address_list_next (IntPtr raw); 13 14 [DllImport("gmime")] internet_address_list_get_address(IntPtr raw)15 static extern IntPtr internet_address_list_get_address (IntPtr raw); 16 17 [DllImport("gmime")] internet_address_list_destroy(IntPtr raw)18 static extern void internet_address_list_destroy (IntPtr raw); 19 InternetAddressList(IntPtr raw_list, bool needs_destroy)20 public InternetAddressList (IntPtr raw_list, bool needs_destroy) 21 { 22 this.raw_list = raw_list; 23 this.needs_destroy = needs_destroy; 24 25 while (raw_list != IntPtr.Zero) { 26 IntPtr raw_ia = internet_address_list_get_address (raw_list); 27 28 InternetAddress addr = new InternetAddress (raw_ia); 29 this.Add (addr); 30 31 raw_list = internet_address_list_next (raw_list); 32 } 33 } 34 InternetAddressList(IntPtr raw_list)35 public InternetAddressList (IntPtr raw_list) : this (raw_list, false) { } 36 ~InternetAddressList()37 ~InternetAddressList () 38 { 39 this.Dispose (); 40 } 41 Dispose()42 public void Dispose () 43 { 44 if (this.needs_destroy) { 45 internet_address_list_destroy (this.raw_list); 46 this.raw_list = IntPtr.Zero; 47 this.needs_destroy = false; 48 } 49 GC.SuppressFinalize (this); 50 } 51 52 [DllImport("gmime")] internet_address_parse_string(string list)53 static extern IntPtr internet_address_parse_string (string list); 54 ParseString(string list)55 public static InternetAddressList ParseString (string list) 56 { 57 IntPtr raw_ret = internet_address_parse_string (list); 58 59 return new InternetAddressList (raw_ret, true); 60 } 61 } 62 } 63