1 #pragma warning disable 1591
4 using System.Runtime.InteropServices;
5 using System.Collections.Generic;
7 using static Eina.TraitFunctions;
8 using static Eina.IteratorNativeFunctions;
13 public static class IteratorNativeFunctions
15 [DllImport(efl.Libs.Eina)] public static extern void
16 eina_iterator_free(IntPtr iterator);
17 [DllImport(efl.Libs.Eina)] public static extern IntPtr
18 eina_iterator_container_get(IntPtr iterator);
19 [DllImport(efl.Libs.Eina)] [return: MarshalAs(UnmanagedType.U1)] public static extern bool
20 eina_iterator_next(IntPtr iterator, out IntPtr data);
21 [DllImport(efl.Libs.Eina)] public static extern void
22 eina_iterator_foreach(IntPtr iterator, IntPtr callback, IntPtr fdata);
23 [DllImport(efl.Libs.Eina)] [return: MarshalAs(UnmanagedType.U1)] public static extern bool
24 eina_iterator_lock(IntPtr iterator);
25 [DllImport(efl.Libs.Eina)] [return: MarshalAs(UnmanagedType.U1)] public static extern bool
26 eina_iterator_unlock(IntPtr iterator);
28 [DllImport(efl.Libs.Eina)] public static extern IntPtr
29 eina_carray_iterator_new(IntPtr array);
32 public class Iterator<T> : IEnumerable<T>, IDisposable
34 public IntPtr Handle {get;set;} = IntPtr.Zero;
35 public bool Own {get;set;} = true;
36 public bool OwnContent {get;set;} = false;
38 public Iterator(IntPtr handle, bool own)
45 public Iterator(IntPtr handle, bool own, bool ownContent)
49 OwnContent = ownContent;
57 protected virtual void Dispose(bool disposing)
68 for (IntPtr data; eina_iterator_next(h, out data);)
76 eina_iterator_free(h);
83 GC.SuppressFinalize(this);
91 public IntPtr Release()
98 public void SetOwnership(bool ownAll)
104 public void SetOwnership(bool own, bool ownContent)
107 OwnContent = ownContent;
110 public bool Next(out T res)
113 if (!eina_iterator_next(Handle, out data))
119 res = NativeToManaged<T>(data);
131 return eina_iterator_lock(Handle);
136 return eina_iterator_unlock(Handle);
139 public IEnumerator<T> GetEnumerator()
141 for (T curr; Next(out curr);)
147 System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
149 return this.GetEnumerator();