ecore: add efl_future_iterator_all.
authorCedric BAIL <cedric@osg.samsung.com>
Tue, 30 Aug 2016 23:29:49 +0000 (16:29 -0700)
committerCedric BAIL <cedric@osg.samsung.com>
Thu, 8 Sep 2016 21:58:06 +0000 (14:58 -0700)
src/lib/ecore/Ecore_Eo.h
src/lib/ecore/efl_promise.c

index ef2b17f..1209232 100644 (file)
@@ -70,6 +70,7 @@ struct _Efl_Future_Composite_Progress
 };
 
 EAPI Efl_Future *efl_future_all_internal(Efl_Future *f1, ...);
+EAPI Efl_Future *efl_future_iterator_all(Eina_Iterator *it);
 
 #define efl_future_all(...) efl_future_all_internal(__VA_ARGS__, NULL)
 
index 2bdf219..275c56a 100644 (file)
@@ -934,9 +934,32 @@ efl_future_all_internal(Efl_Future *f1, ...)
 
    return _efl_future_all_done(all);
 
+ on_error:
+   _efl_promise_all_die(all, NULL);
+   return NULL;
+}
+
+EAPI Efl_Future *
+efl_future_iterator_all(Eina_Iterator *it)
+{
+   Efl_Promise_All *all = NULL;
+   Efl_Future *fn;
+
+   if (!it) return NULL;
 
+   EINA_ITERATOR_FOREACH(it, fn)
+     {
+        if (!all) _efl_future_all_new(fn);
+        if (!all) goto on_error;
+        if (!_efl_future_all_append(all, fn))
+          goto on_error;
+     }
+   eina_iterator_free(it);
+
+   return _efl_future_all_done(all);
 
  on_error:
+   eina_iterator_free(it);
    _efl_promise_all_die(all, NULL);
    return NULL;
 }