Glib заменяет хэш-таблицу - PullRequest
       12

Glib заменяет хэш-таблицу

0 голосов
/ 16 февраля 2010

Я использую GLib Hash Table. Я пытаюсь получить текущее значение найденного ключа и затем увеличить его значение. Я не совсем уверен, как я могу заменить существующее значение.

 typedef struct {
   gchar *key;
   guint my_int;
 } my_struct;

char *v;
v = g_hash_table_lookup(table, my_struct.key);
if (v == NULL) 
   g_hash_table_insert(table, g_strdup(my_struct.key), (gpointer)(my_struct.my_int));
else 
   g_hash_table_replace() // here I'd like to do something like current_val+1

Любые идеи оценят.

Ответы [ 2 ]

1 голос
/ 16 февраля 2010

Вы смотрели на g_hash_table_replace?

Кажется, он принимает те же аргументы, что и insert.
Поиск вызова возвращает вам gpointer. Вы захотите привести результат к guint, increment, а затем вызвать replace с увеличенным значением.

0 голосов
/ 16 февраля 2010
g_hash_table_replace(table, my_struct.key, v + 1)

Однако, чтобы соответствовать вашей структуре, v должно быть guint, а не char *.

Но обратите внимание, что приведение, которое вы делаете, не является хорошей идеей, поскольку целые числа не гарантированно помещаются в указатели. Было бы лучше сделать что-то вроде:

 typedef struct {
   gchar *key;
   guint *my_int;
 } my_struct;

guint *v;
v = (guint*) g_hash_table_lookup(table, my_struct.key);
if (v == NULL) 
{
   my_struct.my_int = g_malloc(sizeof(guint));
   *(my_struct.my_int) = 0;
   g_hash_table_insert(table, my_struct.key, my_struct.my_int);
}
else 
{
   (*v)++;
   g_hash_table_replace(table, my_struct.key, v) // here I'd like to do something like current_val+1
}
...