page=page_8
Forums Tutoriels Magazine FAQs Blogs Chat Newsletter tudes Emploi Club
Contacts
p
u
Developpez.com b
l
i
Plus de 14 000 cours et tutoriels en informatique professionnelle c
i
t
consulter, tlcharger ou visionner en vido.
Accueil ALM Java .NET Dv. Web EDI Programmation SGBD Office Solutions d'entreprise Applications Mobiles Systmes
Accueil C Forums C FAQ C Tutoriels C Livres C Compilateurs et outils C Sources C Bibliothques C GTK+
ACCUEIL GTK+ FORUM GTK+ FAQ GTK+ TUTORIELS GTK+ SOURCES GTK+ BIBLIOTHEQUES LIVRES GTK+ OUTILS GTK+
Cours GTK 2
Slectionnez
struct GSList
{
gpointer data;
struct GSList *next;
};
Nous voyons donc qu'elle nous permet de crer la plus simple des liste chane, c'est
dire que chaque lment connat son suivant et rien d'autre. La liste s'organise
suivant ce schma :
Il faut d'abord avoir le pointeur sur le premier lment de la liste. Pour cela, rien de
plus simple :
Slectionnez
GSList *premier = NULL;
Ensuite, il n'existe pas de fonction spcifique pour crer la liste, il suffit juste
d'ajouter un lment la liste. Plusieurs fonctions sont disponibles mais nous allons
en tudier deux.
Slectionnez
GSList* g_slist_append(GSList *list, gpointer data);
GSList* g_slist_prepend(GSList *list, gpointer data);
Slectionnez
premier = g_slist_append(premier,(GtkWidget*) widget);
Slectionnez
GSList* g_slist_nth(GSList *list, guint n);
gpointer g_slist_nth_data(GSList *list, guint n);
List est bien sur la liste laquelle l'lment recherch appartient, et n est la position
de l'lment dans la liste (le premier lment est n=0). Avec ces deux fonctions, il
suffit juste de connatre la position d'un lment pour rcuprer la donne qu'il
contient.
La premire fonction renvoie un pointeur sur une variable du type GSList. Il faudra
donc utiliser l'oprateur -> pour rcuprer la valeur data. La deuxime, par contre,
renvoie directement la valeur de data.
Si la valeur donne n ne fait pas partie de la liste, la valeur de retour sera NULL.
Supposons qu'une variable de type GtkWidget soit stocke dans le premier lment
d'une liste nomm liste, et que l'on veuille rcuprer ce widget, il faudra alors coder :
Slectionnez
temp_list = g_slist_nth(liste, 0);
widget = (GtkWidget*) (temp_list->data);
Ou
Slectionnez
widget = (GtkWidget*) g_slist_nth_data(liste, 0);
Slectionnez
GSList* g_slist_remove(GSList *list, gconstpointer data);
Slectionnez
GSList* g_slist_remove_all(GSList *list, gconstpointer data);
Slectionnez
Avec toutes ces fonctions, nous en savons suffisamment pour pouvoir utiliser une
liste simple.
Cette liste est lgrement diffrente car en plus de connatre son suivant, chaque
lment connat aussi l'lment qui le prcde. Cette structure est dfinie ainsi :
Slectionnez
struct GList
{
gpointer data;
struct GList *next;
struct GList *prev;
};
L'tude sera cette fois beaucoup plus rapide car vous allez le voir, les fonctions pour
les GList sont quasiment identiques celles de GSList.
Slectionnez
GList *premier = NULL;
Comme pour les GList, il n'y a pas de fonction spcifique il suffit d'ajouter des
lments avec les fonctions suivantes :
Slectionnez
GList* g_list_append(GList *list, gpointer data);
GList* g_list_prepend(GList *list, gpointer data);
Les paramtres sont identiques que pour son homologue GSList et la valeur de retour
est toujours un pointeur sur le premier lment de la liste.
Slectionnez
GList* g_list_nth(GList *list, guint n);
gpointer g_list_nth_data(Glist *list, guint n);
Slectionnez
GList* g_list_remove(GList *list, gconstpointer data);
GList* g_list_remove_all(GList *list, gconstpointer data);
void g_list_free(GList *list);
Bien sur pour ces deux types de listes, d'autres fonctions existent pour ajouter,
dplacer, ordonner, supprimer des lments. Ces dernires sont (comme
l'accoutum) dans la section en savoir plus.
Il n'y aura pas dans ce chapitre d'exemple d'utilisation, mais vous pourrez voir
l'intrt particulier de ces deux types de listes dans les chapitres suivants.
Slectionnez
GSList* g_slist_insert(GSList *list, gpointer data, gint position);
Entre(s) :
list : la liste.
data : la valeur ajouter.
position : la position laquelle sera ajout l'lment. Si cette valeur est
invalide (ngative ou trop grande) l'lment sera ajout la fin de la liste.
Slectionnez
GSList* g_slist_insert_before(GSList *list, GSList *sibling, gpointer data);
GList* g_list_insert_before(GList *list, GList *sibling, gpointer data);
Entre(s) :
list : la liste.
sibling : lment avant lequel doit tre insre notre nouvelle valeur.
data : valeur ajouter.
Slectionnez
GSList* g_slist_remove_link(GSList *list, GSList *link);
GList* g_list_remove_link(GList *list, GList *link);
Entre(s) :
list : la liste.
link : l'lment supprimer de la liste.
Slectionnez
GSList* g_slist_delete_link(GSList *list, GSList *link);
GList* g_list_delete_link(GList *list, GList *link);
Entre(s) :
list : la liste.
link : l'lment supprimer.
Slectionnez
guint g_slist_length(GSList *list);
guint g_list_length(GList *list);
Entre(s) :
list : la liste.
Slectionnez
GSList* g_slist_copy(GSList *list);
GList* g_list_copy(GList *list);
Entre(s) :
list : la liste.
Slectionnez
GSList* g_slist_reverse(GSList *list);
GList* g_list_reverse(GList *list);
Entre(s) :
list : la liste.
Slectionnez
GSList* g_slist_concat(GSList *list1, GSList *list2);
GList* g_list_concat(GList *list1, GList *list2);
Entre(s) :
Slectionnez
GList* g_list_first(GList *list);
Entre(s) :
list : la liste.
Slectionnez
GSList* g_slist_last(GSList *list);
GList* g_list_last(GList *list);
Entre(s) :
list : la liste.
Slectionnez
g_slist_next(list)
g_list_next(list)
Entre(s) :
list : la liste.
Sortie : le pointeur sur l'lment suivant ou NULL si l'on est en fin de liste.
Slectionnez
g_list_previous(list)
Entre(s) :
list : la liste.
Slectionnez
GSList* g_slist_find(GSList *list, gconstpointer data);
GList* g_list_find(GList *list, gconstpointer data);
Entre(s) :
list : la liste.
data : la donne chercher.
Slectionnez
gint g_slist_position(GSList *list, GSList *llink);
gint g_list_position(GList *list, GList *llink);
Entre(s) :
list : la liste.
llink : l'lment chercher.
Slectionnez
gint g_slist_index(GSList *list, gconstpointer data);
gint g_list_index(GList *list, gconstpointer data);
Entre(s) :
list : la liste.
data : la donne chercher.
Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre
convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge
par les droits d'auteur. Copyright 2013 developpez. Aucune reproduction, mme partielle,
ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images,
etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans
de prison et jusqu' 300 000 de dommages et intrts.