Hi Felipe

On 7 March 2016 at 05:57, Felipe Magno de Almeida <
[email protected]> wrote:

> felipealmeida pushed a commit to branch master.
>
>
> http://git.enlightenment.org/core/efl.git/commit/?id=d723990955289a5ca62605262f4bc4cd0aa8d25f
>
> commit d723990955289a5ca62605262f4bc4cd0aa8d25f
> Author: Felipe Magno de Almeida <[email protected]>
> Date:   Sun Mar 6 17:24:34 2016 -0300
>
>     eina: Add Eina_Iterator implementation for C-array
>
>     This iterator is convenient when you already have a C-Array and you
>     need to pass this array to a function receiving an Eina_Iterator.
>
>     int array[] = {1, 2, 3, 4};
>     int* array2[] = {&array[0], &array[1], &array[2], &array[3], NULL};
>
>     Eina_Iterator* iterator = eina_carray_iterator_new((void**)array);
>

I guess this is a typo? You meant array2 here?

Is it really necessary to have an array of pointers and NULL termination?
Can't we pass in a step value and length? Maybe that would be another type
of iterator actually?

Just wondering...



> ---
>  src/lib/eina/eina_iterator.c | 54
> ++++++++++++++++++++++++++++++++++++++++++++
>  src/lib/eina/eina_iterator.h | 15 ++++++++++++
>  2 files changed, 69 insertions(+)
>
> diff --git a/src/lib/eina/eina_iterator.c b/src/lib/eina/eina_iterator.c
> index 59dc106..5d62181 100644
> --- a/src/lib/eina/eina_iterator.c
> +++ b/src/lib/eina/eina_iterator.c
> @@ -174,3 +174,57 @@ eina_iterator_unlock(Eina_Iterator *iterator)
>       return iterator->unlock(iterator);
>     return EINA_TRUE;
>  }
> +
> +typedef struct _Eina_Iterator_CArray Eina_Iterator_CArray;
> +
> +struct _Eina_Iterator_CArray
> +{
> +  Eina_Iterator iterator;
> +
> +  void** array;
> +  void** current;
> +};
> +
> +static Eina_Bool
> +eina_carray_iterator_next(Eina_Iterator_CArray *it, void **data)
> +{
> +   if (!it->current || !*it->current)
> +     return EINA_FALSE;
> +
> +   *data = *it->current++;
> +
> +   return EINA_TRUE;
> +}
> +
> +static void**
> +eina_carray_iterator_get_container(Eina_Iterator_CArray *it)
> +{
> +   return it->array;
> +}
> +
> +static void
> +eina_carray_iterator_free(Eina_Iterator_CArray *it)
> +{
> +  free(it);
> +}
> +
> +EAPI Eina_Iterator*
> +eina_carray_iterator_new(void** array)
> +{
> +   Eina_Iterator_CArray *it;
> +
> +   it = calloc(1, sizeof (Eina_Iterator_CArray));
> +   if (!it) return NULL;
> +
> +   EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR);
> +
> +   it->array = it->current = array;
> +
> +   it->iterator.version = EINA_ITERATOR_VERSION;
> +   it->iterator.next = FUNC_ITERATOR_NEXT(eina_carray_iterator_next);
> +   it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(
> +      eina_carray_iterator_get_container);
> +   it->iterator.free = FUNC_ITERATOR_FREE(eina_carray_iterator_free);
> +
> +   return &it->iterator;
> +}
> diff --git a/src/lib/eina/eina_iterator.h b/src/lib/eina/eina_iterator.h
> index 980dbfc..b379d2e 100644
> --- a/src/lib/eina/eina_iterator.h
> +++ b/src/lib/eina/eina_iterator.h
> @@ -285,6 +285,21 @@ EAPI Eina_Bool eina_iterator_lock(Eina_Iterator
> *iterator) EINA_ARG_NONNULL(1);
>  EAPI Eina_Bool eina_iterator_unlock(Eina_Iterator *iterator)
> EINA_ARG_NONNULL(1);
>
>  /**
> + * @brief Creates an Eina_Iterator that iterates through a
> + * NUL-terminated C array.
> + *
> + * @param array The NUL-terminated array
> + *
> + * You can create it like this:
> + * int array[] = {1, 2, 3, 4};
> + * int* array2[] = {&array[0], &array[1], &array[2], &array[3], NULL};
> + *
> + * Eina_Iterator* iterator = eina_carray_iterator_new((void**)array);
>

typo is here too


> + *
> + */
> +EAPI Eina_Iterator* eina_carray_iterator_new(void** array)
> EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
> +
> +/**
>   * @def EINA_ITERATOR_FOREACH
>   * @brief Macro to iterate over all elements easily.
>   *
>
> --
>
> --
> Jean-Philippe André
>
>
------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://makebettercode.com/inteldaal-eval
_______________________________________________
enlightenment-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to