Skip to content

Commit bca8276

Browse files
committed
Use STRV for SimpleSet rather than GPtrArray
1 parent 6df92c1 commit bca8276

File tree

4 files changed

+51
-41
lines changed

4 files changed

+51
-41
lines changed

modulemd/modulemd-simpleset.c

Lines changed: 28 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -66,17 +66,15 @@ modulemd_simpleset_remove_from_array (gpointer key,
6666
gpointer value,
6767
gpointer user_data)
6868
{
69-
GPtrArray *array;
70-
gchar *item;
69+
gchar **array;
7170
g_return_val_if_fail (key, FALSE);
7271
g_return_val_if_fail (user_data, FALSE);
7372

74-
array = (GPtrArray *)user_data;
73+
array = (gchar **)user_data;
7574

76-
for (gsize i = 0; i < array->len; i++)
75+
for (gsize i = 0; array[i]; i++)
7776
{
78-
item = g_ptr_array_index (array, i);
79-
if (g_strcmp0 ((gchar *)key, item) == 0)
77+
if (g_strcmp0 ((gchar *)key, array[i]) == 0)
8078
{
8179
/* This value should stay in the set */
8280
return FALSE;
@@ -90,18 +88,17 @@ modulemd_simpleset_remove_from_array (gpointer key,
9088

9189
/**
9290
* modulemd_simpleset_set:
93-
* @set: (array zero-terminated=0) (element-type utf8): Extensible metadata block
91+
* @set: (array zero-terminated=1): Extensible metadata block
9492
*
9593
* Make the contents of the set equal to an array of strings. This function
9694
* will trigger a signal only if the resulting set is different. It does not
9795
* guarantee any order to the resulting set, only that it will be unique.
9896
*/
9997
void
100-
modulemd_simpleset_set (ModulemdSimpleSet *self, GPtrArray *set)
98+
modulemd_simpleset_set (ModulemdSimpleSet *self, gchar **set)
10199
{
102100
gboolean do_notify = FALSE;
103101
guint num_removed;
104-
gchar *item;
105102

106103
g_return_if_fail (MODULEMD_IS_SIMPLESET (self));
107104
g_return_if_fail (set);
@@ -116,10 +113,9 @@ modulemd_simpleset_set (ModulemdSimpleSet *self, GPtrArray *set)
116113
}
117114

118115
/* Add in the whole new set to make sure we have everything */
119-
for (gsize i = 0; i < set->len; i++)
116+
for (gsize i = 0; set[i]; i++)
120117
{
121-
item = g_ptr_array_index (set, i);
122-
if (g_hash_table_add (self->set, g_strdup (item)))
118+
if (g_hash_table_add (self->set, g_strdup (set[i])))
123119
{
124120
/* This key didn't previously exist */
125121
do_notify = TRUE;
@@ -137,15 +133,30 @@ modulemd_simpleset_set (ModulemdSimpleSet *self, GPtrArray *set)
137133
*
138134
* Retrieves the set as a #GPtrArray of strings
139135
*
140-
* Returns: (array zero-terminated=0) (element-type utf8) (transfer container):
136+
* Returns: (array zero-terminated=1) (transfer container):
141137
* A list representing a set of string values.
142138
*/
143-
GPtrArray *
139+
gchar **
144140
modulemd_simpleset_get (ModulemdSimpleSet *self)
145141
{
142+
GPtrArray *sorted_keys = NULL;
143+
gchar **keys = NULL;
146144
g_return_val_if_fail (MODULEMD_IS_SIMPLESET (self), NULL);
147145

148-
return _modulemd_ordered_str_keys (self->set, _modulemd_strcmp_sort);
146+
/* FIXME: Sort this */
147+
/* return (gchar **)g_hash_table_get_keys_as_array(self->set, NULL); */
148+
149+
sorted_keys = _modulemd_ordered_str_keys (self->set, _modulemd_strcmp_sort);
150+
151+
keys = g_malloc0_n (sorted_keys->len + 1, sizeof(char *));
152+
for (gsize i = 0; i < sorted_keys->len; i++)
153+
{
154+
keys[i] = g_strdup (g_ptr_array_index (sorted_keys, i));
155+
}
156+
keys[sorted_keys->len] = NULL;
157+
g_ptr_array_unref (sorted_keys);
158+
159+
return keys;
149160
}
150161

151162
/**
@@ -240,13 +251,13 @@ modulemd_simpleset_class_init (ModulemdSimpleSetClass *klass)
240251
object_class->finalize = modulemd_simpleset_finalize;
241252

242253
/**
243-
* ModulemdSimpleSet:set: (type GLib.PtrArray(utf8)) (transfer container)
254+
* ModulemdSimpleSet:set: (transfer container)
244255
*/
245256
set_properties[SET_PROP_SET] =
246257
g_param_spec_boxed ("set",
247258
"The set represented as an array of strings.",
248259
"An ordered list of unique strings in this set",
249-
G_TYPE_PTR_ARRAY,
260+
G_TYPE_STRV,
250261
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
251262

252263
g_object_class_install_properties (

modulemd/modulemd-simpleset.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ guint
4242
modulemd_simpleset_size (ModulemdSimpleSet *self);
4343

4444
void
45-
modulemd_simpleset_set (ModulemdSimpleSet *self, GPtrArray *set);
46-
GPtrArray *
45+
modulemd_simpleset_set (ModulemdSimpleSet *self, gchar **set);
46+
gchar **
4747
modulemd_simpleset_get (ModulemdSimpleSet *self);
4848

4949
void

modulemd/modulemd-yaml-emitter.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1558,7 +1558,7 @@ _emit_modulemd_simpleset (yaml_emitter_t *emitter,
15581558
gboolean ret = FALSE;
15591559
gsize i;
15601560
yaml_event_t event;
1561-
GPtrArray *array = modulemd_simpleset_get (set);
1561+
gchar **array = modulemd_simpleset_get (set);
15621562
gchar *item;
15631563

15641564
g_debug ("TRACE: entering _emit_modulemd_simpleset");
@@ -1567,9 +1567,9 @@ _emit_modulemd_simpleset (yaml_emitter_t *emitter,
15671567
YAML_EMITTER_EMIT_WITH_ERROR_RETURN (
15681568
emitter, &event, error, "Error starting simpleset sequence");
15691569

1570-
for (i = 0; i < array->len; i++)
1570+
for (i = 0; array[i]; i++)
15711571
{
1572-
item = g_strdup (g_ptr_array_index (array, i));
1572+
item = g_strdup (array[i]);
15731573
MMD_YAML_EMIT_SCALAR (&event, item, YAML_PLAIN_SCALAR_STYLE);
15741574
}
15751575

@@ -1579,7 +1579,7 @@ _emit_modulemd_simpleset (yaml_emitter_t *emitter,
15791579

15801580
ret = TRUE;
15811581
error:
1582-
g_ptr_array_unref (array);
1582+
g_free (array);
15831583

15841584
g_debug ("TRACE: exiting _emit_modulemd_simpleset");
15851585
return ret;

modulemd/test-modulemd-simpleset.c

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,11 @@ modulemd_simpleset_tear_down (SimpleSetFixture *fixture,
4646
}
4747

4848
static gboolean
49-
_array_contains (GPtrArray *array, const gchar *value)
49+
_array_contains (gchar **array, const gchar *value)
5050
{
51-
for (gsize i = 0; i < array->len; i++)
51+
for (gsize i = 0; array[i]; i++)
5252
{
53-
if (g_strcmp0 (g_ptr_array_index (array, i), value) == 0)
53+
if (g_strcmp0 (array[i], value) == 0)
5454
{
5555
return TRUE;
5656
}
@@ -63,41 +63,40 @@ modulemd_simpleset_test_get_set (SimpleSetFixture *fixture,
6363
gconstpointer user_data)
6464
{
6565
gsize i = 0;
66-
GPtrArray *array = g_ptr_array_new_full (3, g_free);
67-
GPtrArray *array2;
68-
gchar *entry;
66+
gchar **array = g_malloc0_n (4, sizeof(gchar *));
67+
gchar **array2;
6968

70-
entry = g_strdup ("a");
71-
g_ptr_array_add (array, entry);
72-
73-
entry = g_strdup ("b");
74-
g_ptr_array_add (array, entry);
69+
array[0] = g_strdup ("alpha");
70+
array[1] = g_strdup ("bravo");
71+
array[2] = NULL;
7572

7673
/* Add duplicate value to ensure uniqueness of resulting set */
77-
entry = g_strdup ("a");
78-
g_ptr_array_add (array, entry);
74+
array[3] = g_strdup ("alpha");
7975

8076
/* Create the set from a strv */
8177
modulemd_simpleset_set (fixture->set, array);
8278

83-
for (i = 0; i < array->len; i++)
79+
for (i = 0; array[i]; i++)
8480
{
8581
g_assert_true (modulemd_simpleset_contains (
86-
fixture->set, g_ptr_array_index (array, i)));
82+
fixture->set, array[i]));
8783
}
8884

8985
array2 = modulemd_simpleset_get (fixture->set);
9086

91-
for (i = 0; i < array->len; i++)
87+
for (i = 0; array[i]; i++)
9288
{
93-
g_assert_true (_array_contains (array2, g_ptr_array_index (array, i)));
89+
g_assert_true (_array_contains (array2, array[i]));
9490
}
9591

92+
/* Verify order */
93+
g_assert_cmpstr(array2[0], ==, "alpha");
94+
g_assert_cmpstr(array2[1], ==, "bravo");
9695

9796
/* The size of the resulting set should only be two entries,
9897
* since one of them was a duplicate.
9998
*/
100-
g_assert_cmpint (array2->len, ==, 2);
99+
g_assert_cmpint (g_strv_length(array2), ==, 2);
101100
}
102101

103102
int

0 commit comments

Comments
 (0)