discomfitor pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=3789e3e1dc72edd33d01af36d2bbd47761b5dd72

commit 3789e3e1dc72edd33d01af36d2bbd47761b5dd72
Author: Mike Blumenkrantz <[email protected]>
Date:   Wed Feb 14 21:14:52 2018 -0500

    efl: merge list->iterator creation function into evas_main.c and reuse
    
    this deduplicates a large amount of code
---
 src/lib/edje/edje_part_box.c            | 51 +-------------------------
 src/lib/edje/edje_part_table.c          | 50 +------------------------
 src/lib/elementary/efl_ui_layout_pack.c | 65 ++-------------------------------
 src/lib/evas/Evas_Internal.h            |  2 +
 src/lib/evas/canvas/evas_main.c         | 58 +++++++++++++++++++++++++++++
 5 files changed, 65 insertions(+), 161 deletions(-)

diff --git a/src/lib/edje/edje_part_box.c b/src/lib/edje/edje_part_box.c
index e01cfe1453..88c622bfaa 100644
--- a/src/lib/edje/edje_part_box.c
+++ b/src/lib/edje/edje_part_box.c
@@ -8,8 +8,6 @@
 PROXY_IMPLEMENTATION(box, MY_CLASS, EINA_FALSE)
 #undef PROXY_IMPLEMENTATION
 
-typedef struct _Part_Item_Iterator Part_Item_Iterator;
-
 /* Legacy features */
 
 EOLIAN static Eina_Bool
@@ -127,53 +125,6 @@ 
_efl_canvas_layout_part_box_efl_pack_linear_pack_index_get(Eo *obj, void *_pd EI
    return -1;
 }
 
-/* this iterator is the same as efl_ui_box */
-static Eina_Bool
-_part_item_iterator_next(Part_Item_Iterator *it, void **data)
-{
-   Efl_Gfx *sub;
-
-   if (!it->object) return EINA_FALSE;
-   if (!eina_iterator_next(it->real_iterator, (void **) &sub))
-     return EINA_FALSE;
-
-   if (data) *data = sub;
-   return EINA_TRUE;
-}
-
-static Eo *
-_part_item_iterator_get_container(Part_Item_Iterator *it)
-{
-   return it->object;
-}
-
-static void
-_part_item_iterator_free(Part_Item_Iterator *it)
-{
-   eina_iterator_free(it->real_iterator);
-   efl_wref_del(it->object, &it->object);
-   free(it);
-}
-
-static Eina_Iterator *
-_part_item_iterator_create(Eo *obj, Eina_Iterator *real_iterator)
-{
-   Part_Item_Iterator *it;
-
-   it = calloc(1, sizeof(*it));
-   if (!it) return NULL;
-
-   EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR);
-
-   it->real_iterator = real_iterator;
-   it->iterator.version = EINA_ITERATOR_VERSION;
-   it->iterator.next = FUNC_ITERATOR_NEXT(_part_item_iterator_next);
-   it->iterator.get_container = 
FUNC_ITERATOR_GET_CONTAINER(_part_item_iterator_get_container);
-   it->iterator.free = FUNC_ITERATOR_FREE(_part_item_iterator_free);
-   efl_wref_add(obj, &it->object);
-
-   return &it->iterator;
-}
 
 EOLIAN static Eina_Iterator *
 _efl_canvas_layout_part_box_efl_container_content_iterate(Eo *obj, void *_pd 
EINA_UNUSED)
@@ -184,7 +135,7 @@ 
_efl_canvas_layout_part_box_efl_container_content_iterate(Eo *obj, void *_pd EIN
    if (!pd->rp->typedata.container) return NULL;
    it = evas_object_box_iterator_new(pd->rp->object);
 
-   return _part_item_iterator_create(pd->rp->object, it);
+   return efl_canvas_iterator_create(pd->rp->object, it, NULL);
 }
 
 EOLIAN static int
diff --git a/src/lib/edje/edje_part_table.c b/src/lib/edje/edje_part_table.c
index 87c694f2bf..79141cc334 100644
--- a/src/lib/edje/edje_part_table.c
+++ b/src/lib/edje/edje_part_table.c
@@ -10,54 +10,6 @@ PROXY_IMPLEMENTATION(table, MY_CLASS, EINA_FALSE)
 
 typedef struct _Part_Item_Iterator Part_Item_Iterator;
 
-/* this iterator is the same as efl_ui_box */
-static Eina_Bool
-_part_item_iterator_next(Part_Item_Iterator *it, void **data)
-{
-   Efl_Gfx *sub;
-
-   if (!it->object) return EINA_FALSE;
-   if (!eina_iterator_next(it->real_iterator, (void **) &sub))
-     return EINA_FALSE;
-
-   if (data) *data = sub;
-   return EINA_TRUE;
-}
-
-static Eo *
-_part_item_iterator_get_container(Part_Item_Iterator *it)
-{
-   return it->object;
-}
-
-static void
-_part_item_iterator_free(Part_Item_Iterator *it)
-{
-   eina_iterator_free(it->real_iterator);
-   efl_wref_del(it->object, &it->object);
-   free(it);
-}
-
-static Eina_Iterator *
-_part_item_iterator_create(Eo *obj, Eina_Iterator *real_iterator)
-{
-   Part_Item_Iterator *it;
-
-   it = calloc(1, sizeof(*it));
-   if (!it) return NULL;
-
-   EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR);
-
-   it->real_iterator = real_iterator;
-   it->iterator.version = EINA_ITERATOR_VERSION;
-   it->iterator.next = FUNC_ITERATOR_NEXT(_part_item_iterator_next);
-   it->iterator.get_container = 
FUNC_ITERATOR_GET_CONTAINER(_part_item_iterator_get_container);
-   it->iterator.free = FUNC_ITERATOR_FREE(_part_item_iterator_free);
-   efl_wref_add(obj, &it->object);
-
-   return &it->iterator;
-}
-
 EOLIAN static Eina_Iterator *
 _efl_canvas_layout_part_table_efl_container_content_iterate(Eo *obj, void *_pd 
EINA_UNUSED)
 {
@@ -67,7 +19,7 @@ 
_efl_canvas_layout_part_table_efl_container_content_iterate(Eo *obj, void *_pd E
    if (!pd->rp->typedata.container) return NULL;
    it = evas_object_table_iterator_new(pd->rp->object);
 
-   return _part_item_iterator_create(pd->rp->object, it);
+   return efl_canvas_iterator_create(pd->rp->object, it, NULL);
 }
 
 EOLIAN static int
diff --git a/src/lib/elementary/efl_ui_layout_pack.c 
b/src/lib/elementary/efl_ui_layout_pack.c
index c45a13ed38..d4cacc1a33 100644
--- a/src/lib/elementary/efl_ui_layout_pack.c
+++ b/src/lib/elementary/efl_ui_layout_pack.c
@@ -31,7 +31,6 @@ Eina_Bool    _efl_ui_layout_table_clear(Eo *obj, 
Efl_Ui_Layout_Data *sd, const c
 
 typedef struct _Layout_Part_Data   Efl_Ui_Layout_Box_Data;
 typedef struct _Layout_Part_Data   Efl_Ui_Layout_Table_Data;
-typedef struct _Part_Item_Iterator Part_Item_Iterator;
 
 struct _Layout_Part_Data
 {
@@ -41,14 +40,6 @@ struct _Layout_Part_Data
    unsigned char          temp;
 };
 
-struct _Part_Item_Iterator
-{
-   Eina_Iterator  iterator;
-   Eina_List     *list;
-   Eina_Iterator *real_iterator;
-   Eo            *object;
-};
-
 Eo *
 _efl_ui_layout_pack_proxy_get(Efl_Ui_Layout *obj, Edje_Part_Type type, const 
char *part)
 {
@@ -80,63 +71,13 @@ _efl_ui_layout_part_box_real_part_set(Eo *obj, 
Efl_Ui_Layout_Box_Data *pd, Eo *l
    pd->temp = 1;
 }
 
-/* this iterator is the same as efl_ui_box */
-static Eina_Bool
-_part_item_iterator_next(Part_Item_Iterator *it, void **data)
-{
-   Efl_Gfx *sub;
-
-   if (!it->object) return EINA_FALSE;
-   if (!eina_iterator_next(it->real_iterator, (void **) &sub))
-     return EINA_FALSE;
-
-   if (data) *data = sub;
-   return EINA_TRUE;
-}
-
-static Eo *
-_part_item_iterator_get_container(Part_Item_Iterator *it)
-{
-   return it->object;
-}
-
-static void
-_part_item_iterator_free(Part_Item_Iterator *it)
-{
-   eina_iterator_free(it->real_iterator);
-   efl_wref_del(it->object, &it->object);
-   eina_list_free(it->list);
-   free(it);
-}
-
-static Eina_Iterator *
-_part_item_iterator_create(Eo *obj, Eina_Iterator *real_iterator, Eina_List 
*list)
-{
-   Part_Item_Iterator *it;
-
-   it = calloc(1, sizeof(*it));
-   if (!it) return NULL;
-
-   EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR);
-
-   it->list = list;
-   it->real_iterator = real_iterator;
-   it->iterator.version = EINA_ITERATOR_VERSION;
-   it->iterator.next = FUNC_ITERATOR_NEXT(_part_item_iterator_next);
-   it->iterator.get_container = 
FUNC_ITERATOR_GET_CONTAINER(_part_item_iterator_get_container);
-   it->iterator.free = FUNC_ITERATOR_FREE(_part_item_iterator_free);
-   efl_wref_add(obj, &it->object);
-
-   return &it->iterator;
-}
-
 EOLIAN static Eina_Iterator *
 _efl_ui_layout_part_box_efl_container_content_iterate(Eo *obj, 
Efl_Ui_Layout_Box_Data *pd)
 {
    Eina_Iterator *it;
    Eo *pack = (Eo *) edje_object_part_object_get(pd->obj, pd->part);
    it = evas_object_box_iterator_new(pack);
-   return _part_item_iterator_create(obj, it, NULL);
+   return efl_canvas_iterator_create(obj, it, NULL);
 }
 
 EOLIAN static int
@@ -289,7 +230,7 @@ _efl_ui_layout_part_table_efl_container_content_iterate(Eo 
*obj, Efl_Ui_Layout_T
 
    it = evas_object_table_iterator_new(pack);
 
-   return _part_item_iterator_create(obj, it, NULL);
+   return efl_canvas_iterator_create(obj, it, NULL);
 }
 
 EOLIAN static int
@@ -364,7 +305,7 @@ 
_efl_ui_layout_part_table_efl_pack_table_table_contents_get(Eo *obj EINA_UNUSED,
           }
      }
 
-   return _part_item_iterator_create(pd->obj, eina_list_iterator_new(l), l);
+   return efl_canvas_iterator_create(pd->obj, eina_list_iterator_new(l), l);
 }
 
 EOLIAN static Eina_Bool
diff --git a/src/lib/evas/Evas_Internal.h b/src/lib/evas/Evas_Internal.h
index 4e5655bd23..fc413cf964 100644
--- a/src/lib/evas/Evas_Internal.h
+++ b/src/lib/evas/Evas_Internal.h
@@ -50,6 +50,8 @@ EAPI void evas_render_pending_objects_flush(Evas *eo_evas);
 
 EAPI void efl_input_pointer_finalize(Efl_Input_Pointer *obj);
 
+EAPI Eina_Iterator *efl_canvas_iterator_create(Eo *obj, Eina_Iterator 
*real_iterator, Eina_List *list);
+
 static inline void
 evas_object_size_hint_combined_min_get(const Eo *obj, int *w, int *h)
 {
diff --git a/src/lib/evas/canvas/evas_main.c b/src/lib/evas/canvas/evas_main.c
index 026186570a..ec583d31cc 100644
--- a/src/lib/evas/canvas/evas_main.c
+++ b/src/lib/evas/canvas/evas_main.c
@@ -1387,6 +1387,64 @@ get_layer_objects(Evas_Layer *l)
    return (EINA_INLIST_GET(l->objects));
 }
 
+typedef struct _Efl_Canvas_Iterator
+{
+   Eina_Iterator  iterator;
+   Eina_List     *list;
+   Eina_Iterator *real_iterator;
+   Eo            *object;
+} Efl_Canvas_Iterator;
+
+/* this iterator is the same as efl_ui_box */
+static Eina_Bool
+_efl_canvas_iterator_next(Efl_Canvas_Iterator *it, void **data)
+{
+   Efl_Gfx *sub;
+
+   if (!it->object) return EINA_FALSE;
+   if (!eina_iterator_next(it->real_iterator, (void **) &sub))
+     return EINA_FALSE;
+
+   if (data) *data = sub;
+   return EINA_TRUE;
+}
+
+static Eo *
+_efl_canvas_iterator_get_container(Efl_Canvas_Iterator *it)
+{
+   return it->object;
+}
+
+static void
+_efl_canvas_iterator_free(Efl_Canvas_Iterator *it)
+{
+   eina_iterator_free(it->real_iterator);
+   efl_wref_del(it->object, &it->object);
+   eina_list_free(it->list);
+   free(it);
+}
+
+EAPI Eina_Iterator *
+efl_canvas_iterator_create(Eo *obj, Eina_Iterator *real_iterator, Eina_List 
*list)
+{
+   Efl_Canvas_Iterator *it;
+
+   it = calloc(1, sizeof(*it));
+   if (!it) return NULL;
+
+   EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR);
+
+   it->list = list;
+   it->real_iterator = real_iterator;
+   it->iterator.version = EINA_ITERATOR_VERSION;
+   it->iterator.next = FUNC_ITERATOR_NEXT(_efl_canvas_iterator_next);
+   it->iterator.get_container = 
FUNC_ITERATOR_GET_CONTAINER(_efl_canvas_iterator_get_container);
+   it->iterator.free = FUNC_ITERATOR_FREE(_efl_canvas_iterator_free);
+   efl_wref_add(obj, &it->object);
+
+   return &it->iterator;
+}
+
 EOLIAN Evas_Object*
 _evas_canvas_object_top_at_xy_get(const Eo *eo_e EINA_UNUSED, Evas_Public_Data 
*e, Evas_Coord x, Evas_Coord y, Eina_Bool include_pass_events_objects, 
Eina_Bool include_hidden_objects)
 {

-- 


Reply via email to