Bonjour.
Voila, je suis nouveau sur glib, et c'est tellement bien foutu que ca
rend le C utilisable ! Mais tout n'est pas rose, et je n'arrive pas a
affecter une valeur dans un tableau.
Voila ce que je veux faire: un tableau de listes, genre:
0: "toto", "tata", "titi"
1: "popo", "papa", "pipi"
2:.....
(en fait de "toto" "tata", j'ai des pointeurs vers un type GaloisNode que j'ai defini.)
Donc j'ai une variable buckets:
GArray* buckets = g_array_new(FALSE, FALSE, sizeof(gpointer));
g_array_set_size(buckets, laBonneTaille);
Puis je me met a inserer des elements dans mes listes. Pour ca je me suis fait une petite fonction
GArray*
bucket_insert(GArray* buckets,
GaloisNode* node,
guint index){
GList* currentBucket = g_array_index (buckets, GList*, index);
currentBucket = g_list_append(currentBucket, node);
g_array_insert_val(buckets, index, currentBucket);
}
* Ligne 1: je recupere la GList existante a la position "index"
* Ligne 2: j'ajoute "node" a la GList
* Ligne 3: je remet la GList a sa place ; je sais que g_list_append modifie la liste qu'il prend en entree, mais si on avait NULL (insertion du premier element) ca ne nous aide pas beaucoup.
Voila, maintenant le probleme c'est qu'a chaque fois que je rentre dans cette fonction, la liste que je recupere au final a l'air vide. Et une fois que mon "remplissage" de listes est fini, je me retrouve avec au plus un element dans chaque liste.
Il semble donc que l'insertion marche, mais qu'elle vide la liste...
# ah en fait
Posté par Erwan . Évalué à 2.
[^] # Re: ah en fait
Posté par Erwan . Évalué à 2.
g_array_remove_index(buckets, index);
pour virer l'index avant de le reinserer. C'est porc, mais j'ai pas trouve mieux en utilisant l'interface de GArray.
[^] # Re: ah en fait
Posté par gerald dumas . Évalué à 2.
La documentation dit :
GArray* g_array_insert_vals (GArray *array,
guint index_,
gconstpointer data,
guint len);
Inserts len elements into a GArray at the given index.
array : a GArray.
index_ : the index to place the elements at.
data : a pointer to the elements to insert.
len : the number of elements to insert.
Returns : the GArray.
En plus, il n'y a pas d'instruction return dans ta fonction ?
Donc en résumant :
GArray *bucket_insert(GArray* buckets, GaloisNode* node, guint index)
{
GList* currentBucket = g_array_index (buckets, GList*, index);
currentBucket = g_list_append(currentBucket, node);
buckets=g_array_insert_val(buckets, index, currentBucket);
return buckets;
}
Ca devrait te permettre de récupérer le pointeur de départ de ton tableau.
PS: je me permets de faire un peu de pub. Il existe un site ainsi qu'un forum sur l'utilisation des librairies GTK ( dont la Glib fait partie ) :
site : http://www.gtk-fr.org(...)
forum : http://forums.apinc.org(...)
[^] # Re: ah en fait
Posté par Erwan . Évalué à 2.
0: toto
1: tata
2: titi
...Et je voulais recuperer 1: tata pour lui ajouter titi et le remettre en position 1. Manque de bol, vu que ca insert mais ne remplace pas, ca donnait ca:
0: toto
1: tata titi
2: tata
3: titi
au lieu de ca:
0: toto
1: tata titi
2: titi
D'ou la necessite de supprimer l'entree 1 avant de reinserer... Merci aussi pour le lien vers le forum et le site !
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.