[WebView] Replace eina_list_* with eina_iterator_* (#805)
authoryounghajung <35090305+younghajung@users.noreply.github.com>
Tue, 30 Apr 2019 02:55:29 +0000 (11:55 +0900)
committerdjmixkim <djmix.kim@samsung.com>
Tue, 30 Apr 2019 02:55:29 +0000 (11:55 +0900)
Signed-off-by: yh106.jung <yh106.jung@samsung.com>
src/Tizen.WebView/Interop/Interop.Eina.cs
src/Tizen.WebView/Tizen.WebView/BackForwardList.cs

index a80d61b..cf88bc8 100644 (file)
@@ -29,9 +29,16 @@ internal static partial class Interop
         internal static extern bool eina_hash_add(IntPtr hash, string Key, string Value);
 
         [DllImport(Libraries.Eina)]
-        internal static extern uint eina_list_count(IntPtr list);
+        internal static extern IntPtr eina_list_iterator_new(IntPtr list);
 
         [DllImport(Libraries.Eina)]
-        internal static extern IntPtr eina_list_nth(IntPtr list, uint n);
+        [return: MarshalAs(UnmanagedType.U1)]
+        internal static extern bool eina_iterator_next(IntPtr iterator, out IntPtr data);
+
+        [DllImport(Libraries.Eina)]
+        internal static extern void eina_iterator_free(IntPtr list);
+
+        [DllImport(Libraries.Eina)]
+        internal static extern IntPtr eina_list_free(IntPtr list);
     }
 }
index 49dda74..74f78e9 100644 (file)
@@ -156,15 +156,17 @@ namespace Tizen.WebView
         /// <since_tizen> 6 </since_tizen>
         public IList<BackForwardListItem> BackItems(int limit)
         {
-            IntPtr backList = Interop.ChromiumEwk.ewk_back_forward_list_n_back_items_copy(_list_handle, limit);
+            IntPtr list = Interop.ChromiumEwk.ewk_back_forward_list_n_back_items_copy(_list_handle, limit);
             List<BackForwardListItem> backItemsList = new List<BackForwardListItem>();
 
-            uint count = Interop.Eina.eina_list_count(backList);
-
-            for(uint i=0; i < count; i++) {
-              IntPtr data = Interop.Eina.eina_list_nth(backList, i);
+            var iter = Interop.Eina.eina_list_iterator_new(list);
+            for (IntPtr data; Interop.Eina.eina_iterator_next(iter, out data);) {
               backItemsList.Add(new BackForwardListItem(data));
             }
+
+            Interop.Eina.eina_iterator_free(iter);
+            Interop.Eina.eina_list_free(list);
+
             return backItemsList;
         }
 
@@ -177,15 +179,17 @@ namespace Tizen.WebView
         /// <since_tizen> 6 </since_tizen>
         public IList<BackForwardListItem> ForwardItems(int limit)
         {
-            IntPtr forwardList = Interop.ChromiumEwk.ewk_back_forward_list_n_forward_items_copy(_list_handle, limit);
+            IntPtr list = Interop.ChromiumEwk.ewk_back_forward_list_n_forward_items_copy(_list_handle, limit);
             List<BackForwardListItem> forwardItemsList = new List<BackForwardListItem>();
 
-            uint count = Interop.Eina.eina_list_count(forwardList);
-
-            for(uint i = 0; i < count; i++) {
-              IntPtr data = Interop.Eina.eina_list_nth(forwardList, i);
+            var iter = Interop.Eina.eina_list_iterator_new(list);
+            for (IntPtr data; Interop.Eina.eina_iterator_next(iter, out data);) {
               forwardItemsList.Add(new BackForwardListItem(data));
             }
+
+            Interop.Eina.eina_iterator_free(iter);
+            Interop.Eina.eina_list_free(list);
+
             return forwardItemsList;
         }
     }