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);)
78 eina_iterator_free(h);
82 Efl.Eo.Globals.ThreadSafeFreeCbExec(eina_iterator_free, h);
90 GC.SuppressFinalize(this);
98 public IntPtr Release()
101 Handle = IntPtr.Zero;
105 public void SetOwnership(bool ownAll)
111 public void SetOwnership(bool own, bool ownContent)
114 OwnContent = ownContent;
117 public bool Next(out T res)
120 if (!eina_iterator_next(Handle, out data))
126 res = NativeToManaged<T>(data);
138 return eina_iterator_lock(Handle);
143 return eina_iterator_unlock(Handle);
146 public IEnumerator<T> GetEnumerator()
148 for (T curr; Next(out curr);)
154 System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
156 return this.GetEnumerator();