28
28
#include "DynamicArray.h"
30
struct SDynamicArrayPrivate {
31
32
FreeFunc free_func;
34
FuncPointer from_json;
36
41
_private_for_each_item_free (SDynamicArray * self, spointer item,
39
SDynamicArray * s_dynamic_array_new (size_t len, FreeFunc free_func) {
45
_s_dynamic_array_new_full (size_t len,
48
FuncPointer from_json) {
40
49
SDynamicArray * self = malloc (sizeof(SDynamicArray));
42
self->priv = malloc (sizeof (SDynamicArrayPrivate));
44
51
self->max_size = len;
46
53
self->last_item = 0;
48
self->priv->free_func = free_func;
50
self->priv->array = calloc (len ,sizeof (* self->priv->array));
55
self->free_func = free_func;
56
self->to_json = to_json;
57
self->from_json = from_json;
59
self->array = calloc (len ,sizeof (* self->array));
65
s_dynamic_array_new (size_t len,
67
SDynamicArray * self = _s_dynamic_array_new_full (len, free_func, NULL, NULL);
72
s_dynamic_array_new_json (size_t len,
75
FuncPointer from_json) {
76
SDynamicArray * self = _s_dynamic_array_new_full (len, free_func, to_json, from_json);
56
81
s_dynamic_array_free (SDynamicArray * self, sboolean free_data) {
58
if (self->priv->free_func != NULL) {
83
if (self->free_func != NULL) {
59
84
s_dynamic_array_for_each (self, (ForEachFunc) _private_for_each_item_free,
62
87
for (int i = 0; i < self->last_item; i++) {
63
free (self->priv->array[i]);
88
free (self->array[i]);
68
free (self->priv->array);
74
98
s_dynamic_array_get (SDynamicArray * self, size_t index) {
75
return self->priv->array[index];
99
return self->array[index];
85
109
self->max_size = new_size;
87
self->priv->array = realloc (self->priv->array,
88
(sizeof (* self->priv->array) * (self->max_size)));
111
self->array = realloc (self->array,
112
(sizeof (* self->array) * (self->max_size)));
91
115
if (self->last_item < index) {
92
116
self->last_item = index;
95
self->priv->array[index] = item;
119
self->array[index] = item;
109
133
s_dynamic_array_dump_array (SDynamicArray * self) {
110
spointer * ret_val = calloc (self->last_item + 1, sizeof (* self->priv->array));
134
spointer * ret_val = calloc (self->last_item + 1, sizeof (* self->array));
111
135
for (int i = 0; i < self->last_item; i++) {
112
ret_val[i] = self->priv->array[i];
136
ret_val[i] = self->array[i];
114
138
ret_val[self->last_item] = NULL;
119
143
s_dynamic_array_for_each (SDynamicArray * self, ForEachFunc func,
121
145
for (int i = 0; i < self->max_size && i <= self->last_item; i++) {
122
spointer item = self->priv->array[i];
146
spointer item = self->array[i];
124
148
func (self, item, data);