eina_array_01_example_page(3)

NAME
eina_array_01_example_page - 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>

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

static Eina_Bool
_print(const void *container EINA_UNUSED, void *data, void *fdata EINA_UNUSED)
{
  printf("%s, (char *)data);
   return EINA_TRUE;
}

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

int
main(int argc EINA_UNUSED, char **argv EINA_UNUSED)
{
   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;
   unsigned int i;

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

   eina_init();

 So now to actually create our array. The 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);

 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 strings 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);

 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, 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);

 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, (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:

   eina_array_free(array);

 And finally shutdown eina and exit:

   eina_shutdown();
   return 0;
}

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