Liste chaînée simple avec Eina.

Enlightenment

Eina est LA bibliothèque de “base” d’Enlightenment. Elle fournit un ensemble d’outils (“data types”) utilisés par les EFL, comme des tableaux, des hashs, des listes chaînées, une gestion de modules, et bien plus encore…

Voici, un exemple simple d’usage de ses listes chaînées.

#include 

int main(int ac, char **av)
{
  int i;
  char *data;
  Eina_List *list = NULL, *l = NULL;
 
  if (ac <= 1)
    return 0;
 
  eina_init();
 
  for (i=0; i < ac; i++)
    list = eina_list_append(list, eina_stringshare_add(av[i]));
 
  EINA_LIST_FOREACH(list, l, data)
    printf("argument : %s\n", data);

  return 0;
}

J’espère que cet exemple aura pu vous servir.

4 commentaires

  1. Hello cool !
    mais quand on compile ton programme il y a des warnings :

    issa@issa-desktop:/media/Element/programmation/SYSTEM/TEST_EINA_LIST$ make
    — compilation main.c —
    main.c: In function ‘main’:
    main.c:18: warning: implicit declaration of function ‘printf’
    main.c:18: warning: incompatible implicit declaration of built-in function ‘printf’
    — Cr�ation ex�cutable : bin/main —

    mais cela marche bien quand même quand je le lance :
    issa@issa-desktop:/media/Element/programmation/SYSTEM/TEST_EINA_LIST/bin$ ./main mot1 mot2 mot3 mot4 mot5
    argument : ./main
    argument : mot1
    argument : mot2
    argument : mot3
    argument : mot4
    argument : mot5

  2. Par contre j’ai oublié de poser ma question donc :

    par contre ce que je comprend pas pourquoi on ne peut ajjouter que des pointeurs dans une list ?

    pourquoi par exemple si je fais ceci ça ne marche pas :

    le code :
    #include

    int main()
    {
    const int val1 = 10,val2 = 20, val3 = 30, val4 = 40;
    Eina_List *list = NULL, *l = NULL;
    int *data;

    eina_init();

    list = eina_list_append(list, val1);
    list = eina_list_append(list, val2);
    list = eina_list_append(list, val3);
    list = eina_list_append(list, val4);

    EINA_LIST_FOREACH(list, l, data)
    printf(“argument : %dn”, data);

    return 0;
    }

    a la compile j’ai ces erreurs :
    issa@issa-desktop:/media/Element/programmation/SYSTEM/TEST_EINA_LIST$ make
    — compilation main.c —
    main.c: In function ‘main’:
    main.c:13: warning: passing argument 2 of ‘eina_list_append’ makes pointer from integer without a cast
    /home/issa/usr/E17svn/include/eina-0/eina/eina_list.h:78: note: expected ‘const void *’ but argument is of type ‘int’
    main.c:14: warning: passing argument 2 of ‘eina_list_append’ makes pointer from integer without a cast
    /home/issa/usr/E17svn/include/eina-0/eina/eina_list.h:78: note: expected ‘const void *’ but argument is of type ‘int’
    main.c:15: warning: passing argument 2 of ‘eina_list_append’ makes pointer from integer without a cast
    /home/issa/usr/E17svn/include/eina-0/eina/eina_list.h:78: note: expected ‘const void *’ but argument is of type ‘int’
    main.c:16: warning: passing argument 2 of ‘eina_list_append’ makes pointer from integer without a cast
    /home/issa/usr/E17svn/include/eina-0/eina/eina_list.h:78: note: expected ‘const void *’ but argument is of type ‘int’
    main.c:19: warning: implicit declaration of function ‘printf’
    main.c:19: warning: incompatible implicit declaration of built-in function ‘printf’
    main.c:19: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘int *’
    — Cr�ation ex�cutable : bin/main —
    et pourtant quand je lance mon programme il marche :

    issa@issa-desktop:/media/Element/programmation/SYSTEM/TEST_EINA_LIST/bin$ ./main
    argument : 10
    argument : 20
    argument : 30
    argument : 40

    Donc ma question est comment ne plus avoir ces warnins ?
    et est ce que dans une EINA_LIST on peut mettre des variables de type différentes ?

  3. Ce billet est un peu vieux, et l’API de EINA a peut être changé depuis, renseigne toi auprès de cédric ou sur la documentation de Eina.

    Mais les listes prennent des adresses en paramètre oui, après tu peux bien sur passé une référence à une variable simple. Mais dès la mort de ta variable, ton noeud ne pointera plus sur rien… 🙂

Laisser une réponse

Votre adresse email est et restera confidentielle. Les champs marqués d'une * sont obligatoires.

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Tous les articles liés