14
14
SMapItem * self = malloc (sizeof (SMapItem));
16
16
self->value = value;
19
void s_map_item_free (SMapItem * self) {
21
* Need to figure a method to determin if objects (keys and values) are
22
* BaseObjectInstance children or not and use the appropriate method for
20
void s_map_item_free (SMapItem * self, MethodFunc free_key,
21
MethodFunc free_value) {
23
free_value (self->value);
28
SMap * s_map_new ( CompFunc comp_func ) {
27
SMap * s_map_new ( CompFunc comp_func, MethodFunc free_key,
28
MethodFunc free_value) {
29
29
SMap * self = malloc (sizeof (SMap));
30
30
SMapClass * klass = malloc (sizeof (SMapClass));
40
40
klass->is_equal = comp_func;
42
/* free_* functions need to be checked if they are null and set the pointer
43
* to free or s_base_object_free ()... Have to decite which...
45
klass->free_key = free_key;
46
klass->free_value = free_value;
45
51
void s_map_free (SMap * self) {
52
s_base_object_free (self);
50
56
void s_map_add (SMap * self ,void * key, void * value) {
51
57
SMapItem ** items = self->priv->items;
52
58
SMapItem * item = s_map_item_new (key, value);
59
size_t * len = self->priv->len;
53
60
if (self->priv->len == 0) {
55
61
items = realloc (items, sizeof(SMapItem));
65
items = reallec (items, sizeof(SMapItem) * (self->priv->len + 1));
63
71
void * s_map_get (SMap * self, void * key) {
72
SMapItem ** items = self->priv->items;
73
size_t * len = self->priv->len;
74
SMapClass * klass = (SMapClass *) s_base_object_get_class ((SBaseObjectInstance *) self);
75
CompFunc comp_func = klass->comp_func;
76
for (int i == 0; i < self->priv->len; i++) {
77
bool is_item = comp_func (key, items[i]);
67
85
void method_map_deinit (SMap * self) {