Basic array usage

For this example we add stdlib.h, stdio.h and string.h for some convenience functions. The first thing to do to be able to use an Eina_Array is to include Eina.h:

#include <stdio.h>
#include <string.h>
#include <Eina.h>
Eina Utility library.

Here we have a callback that prints the element given to it:

static Eina_Bool
_print(const void *container, void *data, void *fdata)
{
printf("%s\n", (char *)data);
return EINA_TRUE;
}
#define EINA_TRUE
boolean value TRUE (numerical value 1)
Definition eina_types.h:299
unsigned char Eina_Bool
Type to mimic a boolean.
Definition eina_types.h:287

Now we create our entry point and declare some variables, nothing especial:

int
main(int argc, char **argv)
{
const char* strings[] = {
"helo", "hera", "starbuck", "kat", "boomer",
"hotdog", "longshot", "jammer", "crashdown", "hardball",
"duck", "racetrack", "apolo", "husker", "freaker",
"skulls", "bulldog", "flat top", "hammerhead", "gonzo"
};
Eina_Array *array;
char *item;
unsigned int i;
void ** Eina_Array_Iterator
Type for an iterator on arrays, used with EINA_ARRAY_ITER_NEXT.
Definition eina_array.h:226
struct _Eina_Array Eina_Array
Type for a generic vector.
Definition eina_array.h:220

Before we can start using any array function we need to initialize eina:

int eina_init(void)
Initialize the Eina library.
Definition eina_main.c:244

So now to actually creating our array. The only interesting thing here is the argument given to the eina_array_new() function, this argument sets how fast the array grows.

array = eina_array_new(10);
Eina_Array * eina_array_new(unsigned int step)
Create a new array.
Definition eina_array.c:265

If you know before hand how big the array will need to be you should set the step to that. In our case we can set it to the number of string we have and since we didn't do that in the eina_array_new() we can do it now:

eina_array_step_set(array, sizeof(*array), 20);
void eina_array_step_set(Eina_Array *array, unsigned int sizeof_eina_array, unsigned int step)
Set the step of an array.
Definition eina_array.c:299

Now let us populate our array with some strings:

for (i = 0; i < 20; i++)
eina_array_push(array, strdup(strings[i]));
Note
Notice we use strdup, so we will have to free that memory later on.

Now lets check the size of the array:

printf("array count: %d\n", eina_array_count(array));

And now we call a function on every member of our array to print it:

eina_array_foreach(array, _print, NULL);
static Eina_Bool eina_array_foreach(Eina_Array *array, Eina_Each_Cb cb, void *fdata)
Provide a safe way to iterate over an array.

One of the strengths of Eina_Array over Eina_List is that it has very fast random access to elements, so this is very efficient:

printf("Top gun: %s\n", (char*)eina_array_data_get(array, 2));

And now we free up the memory allocated with the strdup()s:

while (eina_array_count(array))
free(eina_array_pop(array));

And the array memory itself:

void eina_array_free(Eina_Array *array)
Free an array.
Definition eina_array.c:289

And finally shutdown eina and exit:

return 0;
}
int eina_shutdown(void)
Shut down the Eina library.
Definition eina_main.c:315

The full source code can be found on the examples folder on the eina_array_01.c file.