comparison src/edl.c @ 6:7137fbac0b85

edl: expose EDL_reallocate() API to allow resizing the array
author Paper <mrpapersonic@gmail.com>
date Thu, 28 Dec 2023 16:47:24 -0500
parents c2408abb258a
children 0c98b46eaf73
comparison
equal deleted inserted replaced
5:a6ab6d9c0dac 6:7137fbac0b85
142 return EDL_internal_append_offset(input, offset, length); 142 return EDL_internal_append_offset(input, offset, length);
143 } 143 }
144 144
145 /* memory management routines */ 145 /* memory management routines */
146 146
147 static int EDL_internal_reallocate(EDL* input, size_t new_capacity) { 147 int EDL_reallocate(EDL* input, size_t new_capacity) {
148 input->arr = realloc(input->arr, new_capacity * sizeof(EDL_line)); 148 input->arr = realloc(input->arr, new_capacity * sizeof(EDL_line));
149 if (!input->arr) 149 if (!input->arr)
150 return 0; 150 return 0;
151 151
152 if (new_capacity > input->capacity) 152 if (new_capacity > input->capacity)
158 } 158 }
159 159
160 /* the important function */ 160 /* the important function */
161 EDL EDL_parse(const char* data, size_t length) { 161 EDL EDL_parse(const char* data, size_t length) {
162 EDL edl = {0}; 162 EDL edl = {0};
163 if (!EDL_internal_reallocate(&edl, 16)) 163 if (!EDL_reallocate(&edl, 16))
164 return edl; 164 return edl;
165 165
166 size_t order_size = 0; 166 size_t order_size = 0;
167 uint32_t* order = EDL_internal_parse_first_line(data, &order_size); 167 uint32_t* order = EDL_internal_parse_first_line(data, &order_size);
168 168
280 280
281 if (!ok) 281 if (!ok)
282 break; 282 break;
283 283
284 if (++edl.size >= edl.capacity) 284 if (++edl.size >= edl.capacity)
285 EDL_internal_reallocate(&edl, edl.capacity * 2); 285 EDL_reallocate(&edl, edl.capacity * 2);
286 } 286 }
287 287
288 EDL_internal_reallocate(&edl, edl.size); 288 EDL_reallocate(&edl, edl.size);
289 289
290 free(order); 290 free(order);
291 291
292 return edl; 292 return edl;
293 } 293 }