struct _GKeyFile
{
GList *groups;
+ GHashTable *group_hash;
GKeyFileGroup *start_group;
GKeyFileGroup *current_group;
{
key_file->current_group = g_slice_new0 (GKeyFileGroup);
key_file->groups = g_list_prepend (NULL, key_file->current_group);
+ key_file->group_hash = g_hash_table_new (g_str_hash, g_str_equal);
key_file->start_group = NULL;
key_file->parse_buffer = g_string_sized_new (128);
key_file->approximate_size = 0;
GList *group_node;
GKeyFileGroup *group;
- group_node = g_key_file_lookup_group_node (key_file, group_name);
- if (!group_node)
+ group = g_key_file_lookup_group (key_file, group_name);
+ if (!group)
{
g_set_error (error, G_KEY_FILE_ERROR,
G_KEY_FILE_ERROR_GROUP_NOT_FOUND,
return NULL;
}
- group = (GKeyFileGroup *)group_node->data;
if (group->comment)
return g_strdup (group->comment->value);
+ group_node = g_key_file_lookup_group_node (key_file, group_name);
group_node = group_node->next;
group = (GKeyFileGroup *)group_node->data;
return get_group_comment (key_file, group, error);
g_return_val_if_fail (key_file != NULL, FALSE);
g_return_val_if_fail (group_name != NULL, FALSE);
- return g_key_file_lookup_group_node (key_file, group_name) != NULL;
+ return g_key_file_lookup_group (key_file, group_name) != NULL;
}
/**
if (key_file->start_group == NULL)
key_file->start_group = group;
+
+ g_hash_table_insert (key_file->group_hash, group->name, group);
}
static void
group = (GKeyFileGroup *) group_node->data;
+ if (group->name)
+ g_hash_table_remove (key_file->group_hash, group->name);
+
/* If the current group gets deleted make the current group the last
* added group.
*/
g_key_file_lookup_group (GKeyFile *key_file,
const gchar *group_name)
{
- GList *group_node;
-
- group_node = g_key_file_lookup_group_node (key_file, group_name);
-
- if (group_node != NULL)
- return (GKeyFileGroup *) group_node->data;
-
- return NULL;
+ return (GKeyFileGroup *)g_hash_table_lookup (key_file->group_hash, group_name);
}
static GList *