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;
12 public static class IteratorNativeFunctions
14 [DllImport(efl.Libs.Eina)] public static extern void
15 eina_iterator_free(IntPtr iterator);
16 [DllImport(efl.Libs.Eina)] public static extern IntPtr
17 eina_iterator_container_get(IntPtr iterator);
18 [DllImport(efl.Libs.Eina)] [return: MarshalAs(UnmanagedType.U1)] public static extern bool
19 eina_iterator_next(IntPtr iterator, out IntPtr data);
20 [DllImport(efl.Libs.Eina)] public static extern void
21 eina_iterator_foreach(IntPtr iterator, IntPtr callback, IntPtr fdata);
22 [DllImport(efl.Libs.Eina)] [return: MarshalAs(UnmanagedType.U1)] public static extern bool
23 eina_iterator_lock(IntPtr iterator);
24 [DllImport(efl.Libs.Eina)] [return: MarshalAs(UnmanagedType.U1)] public static extern bool
25 eina_iterator_unlock(IntPtr iterator);
27 [DllImport(efl.Libs.Eina)] public static extern IntPtr
28 eina_carray_iterator_new(IntPtr array);
31 public class Iterator<T> : IEnumerable<T>, IDisposable
33 public IntPtr Handle {get;set;} = IntPtr.Zero;
34 public bool Own {get;set;} = true;
35 public bool OwnContent {get;set;} = false;
37 public Iterator(IntPtr handle, bool own)
44 public Iterator(IntPtr handle, bool own, bool ownContent)
48 OwnContent = ownContent;
56 protected virtual void Dispose(bool disposing)
65 for(IntPtr data; eina_iterator_next(h, out data);)
72 eina_iterator_free(h);
78 GC.SuppressFinalize(this);
86 public IntPtr Release()
93 public void SetOwnership(bool ownAll)
99 public void SetOwnership(bool own, bool ownContent)
102 OwnContent = ownContent;
105 public bool Next(out T res)
108 if (!eina_iterator_next(Handle, out data))
114 res = NativeToManaged<T>(data);
124 return eina_iterator_lock(Handle);
129 return eina_iterator_unlock(Handle);
132 public IEnumerator<T> GetEnumerator()
134 for(T curr; Next(out curr);)
140 System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
142 return this.GetEnumerator();