cedric pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=56df83e2c09db7a549a712c21a6cfecc055a8bcd
commit 56df83e2c09db7a549a712c21a6cfecc055a8bcd Author: Cedric BAIL <ced...@osg.samsung.com> Date: Tue Aug 30 16:29:49 2016 -0700 ecore: add efl_future_iterator_all. --- src/lib/ecore/Ecore_Eo.h | 1 + src/lib/ecore/efl_promise.c | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/src/lib/ecore/Ecore_Eo.h b/src/lib/ecore/Ecore_Eo.h index ef2b17f..1209232 100644 --- a/src/lib/ecore/Ecore_Eo.h +++ b/src/lib/ecore/Ecore_Eo.h @@ -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) diff --git a/src/lib/ecore/efl_promise.c b/src/lib/ecore/efl_promise.c index 2bdf219..275c56a 100644 --- a/src/lib/ecore/efl_promise.c +++ b/src/lib/ecore/efl_promise.c @@ -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; } --