/simpletypesystem/trunk

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/simpletypesystem/trunk

« back to all changes in this revision

Viewing changes to libssts/DynamicArray.c

* Merge callback system fixes

Show diffs side-by-side

added added

removed removed

Lines of Context:
42
42
                             spointer data);
43
43
 
44
44
SDynamicArray *
45
 
_s_dynamic_array_new_full (size_t len,
 
45
s_dynamic_array_new_full (size_t len,
46
46
                          FreeFunc free_func,
47
47
                          FuncPointer to_json,
48
48
                          FuncPointer from_json) {
70
70
s_dynamic_array_new (size_t len,
71
71
                     FreeFunc free_func) {
72
72
 
73
 
  SDynamicArray * self = _s_dynamic_array_new_full (len, free_func, NULL, NULL);
 
73
  SDynamicArray * self = s_dynamic_array_new_full (len, free_func, NULL, NULL);
74
74
 
75
75
  return self;
76
76
}
80
80
                          FreeFunc free_func,
81
81
                          FuncPointer to_json,
82
82
                          FuncPointer from_json) {
83
 
  SDynamicArray * self = _s_dynamic_array_new_full (len, free_func, to_json, from_json);
 
83
  SDynamicArray * self = s_dynamic_array_new_full (len, free_func, to_json, from_json);
84
84
  return self;
85
85
}
86
86
 
88
88
s_dynamic_array_free (SDynamicArray * self, sboolean free_data) {
89
89
  if (free_data) {
90
90
    if (self->free_func != NULL) {
 
91
      s_dbg_print ("SDynamicArray: free data.");
91
92
      s_dynamic_array_for_each (self,
92
93
                                FOREACHFUNC (_private_for_each_item_free),
93
94
                                NULL);
100
101
 
101
102
spointer
102
103
s_dynamic_array_get (SDynamicArray * self, size_t index) {
 
104
  if (index > self->max_size) {
 
105
    s_err_print ("Index out of range:\n\tMax index: %zd requested index:%zd",
 
106
                 self->max_size, index);
 
107
    return NULL;
 
108
  }
 
109
  if (self->max_size < 1) {
 
110
    return NULL;
 
111
  }
103
112
  return self->array[index];
104
113
}
105
114
 
159
168
void
160
169
s_dynamic_array_for_each (SDynamicArray * self, ForEachFunc func,
161
170
                             spointer data) {
 
171
  s_dbg_print ("Size: %zd", self->max_size);
162
172
  for (int i = 0; i < self->max_size && i <= self->last_item; i++) {
163
173
    spointer item = self->array[i];
164
174
    if (item) {
 
175
      s_dbg_print ("Item Found.");
165
176
      func (self, item, data);
166
177
    }
167
178
  }
173
184
                             spointer data) {
174
185
  s_dbg_print ("Removing item from array");
175
186
  FreeFunc func = self->free_func;
176
 
  func (item);
 
187
  if (func) {
 
188
    func (item);
 
189
  }
177
190
}
178
191