ecore: Create callback wrappers
authormike_m <mike_m@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Thu, 11 Aug 2011 10:59:48 +0000 (10:59 +0000)
committermike_m <mike_m@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Thu, 11 Aug 2011 10:59:48 +0000 (10:59 +0000)
This gets rid of a lot of temporary variables and cleans the code up again...

Signed-off-by: Mike McCormack <mj.mccormack@samsung.com>
git-svn-id: http://svn.enlightenment.org/svn/e/trunk/ecore@62342 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/ecore/ecore_anim.c
src/lib/ecore/ecore_events.c
src/lib/ecore/ecore_idle_enterer.c
src/lib/ecore/ecore_idle_exiter.c
src/lib/ecore/ecore_idler.c
src/lib/ecore/ecore_main.c
src/lib/ecore/ecore_private.h
src/lib/ecore/ecore_timer.c

index e795b46..27efa13 100644 (file)
@@ -99,17 +99,7 @@ _do_tick(void)
      {
         if (!animator->delete_me && !animator->suspended)
           {
-             Ecore_Task_Cb func;
-             void *data;
-             Eina_Bool ret;
-
-             func = animator->func;
-             data = animator->data;
-             _ecore_unlock();
-             ret = func(data);
-             _ecore_lock();
-
-             if (!ret)
+             if (!_ecore_call_task_cb(animator->func, animator->data))
                {
                   animator->delete_me = EINA_TRUE;
                   animators_delete_me++;
index a982d72..9c05122 100644 (file)
@@ -516,20 +516,7 @@ _ecore_event_del(Ecore_Event *event)
    void *data;
 
    data = event->data;
-   if (event->func_free)
-     {
-        Ecore_End_Cb func_free;
-        void *ev;
-        void *data;
-
-        func_free = event->func_free;
-        ev = event->event;
-        data = event->data;
-
-        _ecore_unlock();
-        func_free(data, ev);
-        _ecore_lock();
-     }
+   if (event->func_free) _ecore_call_end_cb(event->func_free, event->data, event->event);
    events = (Ecore_Event *) eina_inlist_remove(EINA_INLIST_GET(events), EINA_INLIST_GET(event));
    ECORE_MAGIC_SET(event, ECORE_MAGIC_NONE);
    free(event);
@@ -583,18 +570,7 @@ _ecore_event_filters_apply()
              ef->references++;
 
              if (ef->func_start)
-               {
-                  Ecore_Data_Cb func_start;
-                  void *data;
-                  void *r;
-
-                  func_start = ef->func_start;
-                  data = ef->data;
-                  _ecore_unlock();
-                  r = func_start(data);
-                  _ecore_lock();
-                  ef->loop_data = r;
-               }
+               ef->loop_data = _ecore_call_data_cb(ef->func_start, ef->data);
 
              if (!event_filter_event_current)
                {
@@ -610,23 +586,9 @@ _ecore_event_filters_apply()
              while (event_filter_event_current)
                {
                   Ecore_Event *e = event_filter_event_current;
-                  Ecore_Filter_Cb func_filter;
-                  void *loop_data;
-                  void *data;
-                  int type;
-                  void *event;
-                  Eina_Bool r;
-
-                  func_filter = ef->func_filter;
-                  data = ef->data;
-                  loop_data = ef->loop_data;
-                  type = e->type;
-                  event = e->event;
-
-                  _ecore_unlock();
-                  r = func_filter(data, loop_data, type, event);
-                  _ecore_lock();
-                  if (!r)
+
+                  if (!_ecore_call_filter_cb(ef->func_filter, ef->data,
+                                               ef->loop_data, e->type, e->event))
                     {
                        ecore_event_del(e);
                     }
@@ -635,19 +597,7 @@ _ecore_event_filters_apply()
                     event_filter_event_current = (Ecore_Event *)EINA_INLIST_GET(event_filter_event_current)->next;
                }
              if (ef->func_end)
-               {
-                  Ecore_End_Cb func_end;
-                  void *loop_data;
-                  void *data;
-
-                  func_end = ef->func_end;
-                  data = ef->data;
-                  loop_data = ef->loop_data;
-
-                  _ecore_unlock();
-                  ef->func_end(ef->data, ef->loop_data);
-                  _ecore_lock();
-               }
+               _ecore_call_end_cb(ef->func_end, ef->data, ef->loop_data);
 
              ef->references--;
           }
@@ -727,22 +677,12 @@ _ecore_event_call(void)
                   eh = event_handler_current;
                   if (!eh->delete_me)
                     {
-                       Ecore_Event_Handler_Cb func;
-                       void *data;
-                       int type;
-                       void *event;
                        Eina_Bool ret;
 
                        handle_count++;
 
-                       func = eh->func;
-                       data = eh->data;
-                       type = e->type;
-                       event = e->event;
                        eh->references++;
-                       _ecore_unlock();
-                       ret = func(data, type, event);
-                       _ecore_lock();
+                       ret = _ecore_call_handler_cb(eh->func, eh->data, e->type, e->event);
                        eh->references--;
 
                        if (!ret)
index aa0b4a6..bfbd065 100644 (file)
@@ -161,17 +161,8 @@ _ecore_idle_enterer_call(void)
         Ecore_Idle_Enterer *ie = (Ecore_Idle_Enterer *)idle_enterer_current;
         if (!ie->delete_me)
           {
-             Ecore_Task_Cb func;
-             void *data;
-             Eina_Bool ret;
-
-             func = ie->func;
-             data = ie->data;
              ie->references++;
-             _ecore_unlock();
-             ret = func(data);
-             _ecore_lock();
-             if (!ret)
+             if (!_ecore_call_task_cb(ie->func, ie->data))
                {
                   if (!ie->delete_me) _ecore_idle_enterer_del(ie);
                }
index fc41f92..af068d8 100644 (file)
@@ -129,17 +129,8 @@ _ecore_idle_exiter_call(void)
         Ecore_Idle_Exiter *ie = (Ecore_Idle_Exiter *)idle_exiter_current;
         if (!ie->delete_me)
           {
-             Ecore_Task_Cb func;
-             void *data;
-             Eina_Bool ret;
-
-             func = ie->func;
-             data = ie->data;
              ie->references++;
-             _ecore_unlock();
-             ret = func(data);
-             _ecore_lock();
-             if (!ret)
+             if (!_ecore_call_task_cb(ie->func, ie->data))
                {
                   if (!ie->delete_me) _ecore_idle_exiter_del(ie);
                }
index f39999f..74da368 100644 (file)
@@ -113,17 +113,8 @@ _ecore_idler_call(void)
         Ecore_Idler *ie = (Ecore_Idler *)idler_current;
         if (!ie->delete_me)
           {
-             Eina_Bool ret;
-             Ecore_Task_Cb func;
-             void *data;
-
-             func = ie->func;
-             data = ie->data;
              ie->references++;
-             _ecore_unlock();
-             ret = func(data);
-             _ecore_lock();
-             if (!ret)
+             if (!_ecore_call_task_cb(ie->func, ie->data))
                {
                   if (!ie->delete_me) _ecore_idler_del(ie);
                }
index edce31d..5653726 100644 (file)
@@ -1255,15 +1255,8 @@ _ecore_main_prepare_handlers(void)
           }
         if (!fdh->delete_me && fdh->prep_func)
           {
-             Ecore_Fd_Prep_Cb prep_func;
-             void *prep_data;
-
-             prep_func = fdh->prep_func;
-             prep_data = fdh->prep_data;
              fdh->references++;
-             _ecore_unlock();
-             prep_func(prep_data, fdh);
-             _ecore_lock();
+             _ecore_call_prep_cb(fdh->prep_func, fdh->prep_data, fdh);
              fdh->references--;
           }
         else
@@ -1413,13 +1406,9 @@ _ecore_main_fd_handlers_bads_rem(void)
              ERR("Found bad fd at index %d", fdh->fd);
              if (fdh->flags & ECORE_FD_ERROR)
                {
-                  Eina_Bool ret;
                   ERR("Fd set for error! calling user");
                   fdh->references++;
-                  _ecore_unlock();
-                  ret = fdh->func(fdh->data, fdh);
-                  _ecore_lock();
-                  if (!ret)
+                  if (!_ecore_call_fd_cb(fdh->func, fdh->data, fdh))
                     {
                        ERR("Fd function err returned 0, remove it");
                        if (!fdh->delete_me)
@@ -1539,12 +1528,8 @@ _ecore_main_fd_handlers_call(void)
                  (fdh->write_active) ||
                  (fdh->error_active))
                {
-                  Eina_Bool ret;
                   fdh->references++;
-                  _ecore_unlock();
-                  ret = fdh->func(fdh->data, fdh);
-                  _ecore_lock();
-                  if (!ret)
+                  if (!_ecore_call_fd_cb(fdh->func, fdh->data, fdh))
                     {
                        if (!fdh->delete_me)
                          {
@@ -1592,27 +1577,10 @@ _ecore_main_fd_handlers_buf_call(void)
           }
         if ((!fdh->delete_me) && fdh->buf_func)
           {
-             Ecore_Fd_Cb buf_func;
-             void *buf_data;
-             Eina_Bool r;
-
-             /* copy data before releasing lock */
-             buf_func = fdh->buf_func;
-             buf_data = fdh->buf_data;
              fdh->references++;
-             _ecore_unlock();
-             r = buf_func(buf_data, fdh);
-             _ecore_lock();
-             if (r)
+             if (_ecore_call_fd_cb(fdh->buf_func, fdh->buf_data, fdh))
                {
-                  Ecore_Fd_Cb func;
-                  void *data;
-
-                  func = fdh->func;
-                  data = fdh->data;
-                  _ecore_unlock();
-                  ret |= func(data, fdh);
-                  _ecore_lock();
+                  ret |= _ecore_call_fd_cb(fdh->func, fdh->data, fdh);
                   fdh->read_active = EINA_TRUE;
                   _ecore_try_add_to_call_list(fdh);
                }
index ae02c1e..10a4f49 100644 (file)
@@ -203,17 +203,99 @@ void _ecore_throttle(void);
 void _ecore_lock(void);
 void _ecore_unlock(void);
 #else
-static inline void _ecore_lock(void)
-  {
-     /* at least check we're not being called from a thread */
-     EINA_MAIN_LOOP_CHECK_RETURN;
-  }
-
-static inline void _ecore_unlock(void)
-  {
-  }
+static inline void
+_ecore_lock(void)
+{
+   /* at least check we're not being called from a thread */
+   EINA_MAIN_LOOP_CHECK_RETURN;
+}
+
+static inline void
+_ecore_unlock(void)
+{
+}
 #endif
 
+/*
+ * Callback wrappers all assume that ecore _ecore_lock has been called
+ */
+static inline Eina_Bool
+_ecore_call_task_cb(Ecore_Task_Cb func, void *data)
+{
+   Eina_Bool r;
+
+   _ecore_unlock();
+   r = func(data);
+   _ecore_lock();
+
+   return r;
+}
+
+static inline void *
+_ecore_call_data_cb(Ecore_Data_Cb func, void *data)
+{
+   void *r;
+
+   _ecore_unlock();
+   r = func(data);
+   _ecore_lock();
+
+   return r;
+}
+
+static inline void
+_ecore_call_end_cb(Ecore_End_Cb func, void *user_data, void *func_data)
+{
+   _ecore_unlock();
+   func(user_data, func_data);
+   _ecore_lock();
+}
+
+static inline Eina_Bool
+_ecore_call_filter_cb(Ecore_Filter_Cb func, void *data,
+                        void *loop_data, int type, void *event)
+{
+   Eina_Bool r;
+
+   _ecore_unlock();
+   r = func(data, loop_data, type, event);
+   _ecore_lock();
+
+   return r;
+}
+
+static inline Eina_Bool
+_ecore_call_handler_cb(Ecore_Event_Handler_Cb func, void *data, int type, void *event)
+{
+   Eina_Bool r;
+
+   _ecore_unlock();
+   r = func(data, type, event);
+   _ecore_lock();
+
+   return r;
+}
+
+static inline void
+_ecore_call_prep_cb(Ecore_Fd_Prep_Cb func, void *data, Ecore_Fd_Handler *fd_handler)
+{
+   _ecore_unlock();
+   func(data, fd_handler);
+   _ecore_lock();
+}
+
+static inline Eina_Bool
+_ecore_call_fd_cb(Ecore_Fd_Cb func, void *data, Ecore_Fd_Handler *fd_handler)
+{
+   Eina_Bool r;
+
+   _ecore_unlock();
+   r = func(data, fd_handler);
+   _ecore_lock();
+
+   return r;
+}
+
 extern int    _ecore_fps_debug;
 extern double _ecore_time_loop_time;
 extern Eina_Bool _ecore_glib_always_integrate;
index 9aee32f..7085d3e 100644 (file)
@@ -706,9 +706,6 @@ _ecore_timer_call(double when)
    while (timer_current)
      {
         Ecore_Timer *timer = timer_current;
-        Eina_Bool cont;
-        Ecore_Task_Cb func;
-        void *data;
 
         if (timer->at > when)
           {
@@ -723,12 +720,7 @@ _ecore_timer_call(double when)
           }
 
         timer->references++;
-        func = timer->func;
-        data = timer->data;
-        _ecore_unlock();
-        cont = func(data);
-        _ecore_lock();
-        if (!cont)
+        if (!_ecore_call_task_cb(timer->func, timer->data))
           {
              if (!timer->delete_me) _ecore_timer_del(timer);
           }