352 } |
352 } |
353 |
353 |
354 void cx_list_default_sort(struct cx_list_s *list) { |
354 void cx_list_default_sort(struct cx_list_s *list) { |
355 size_t elem_size = list->collection.elem_size; |
355 size_t elem_size = list->collection.elem_size; |
356 size_t list_size = list->collection.size; |
356 size_t list_size = list->collection.size; |
357 void *tmp = malloc(elem_size * list_size); |
357 void *tmp = cxMalloc(cxDefaultAllocator, elem_size * list_size); |
358 if (tmp == NULL) abort(); |
358 if (tmp == NULL) abort(); |
359 |
359 |
360 // copy elements from source array |
360 // copy elements from source array |
361 char *loc = tmp; |
361 char *loc = tmp; |
362 for (size_t i = 0; i < list_size; i++) { |
362 for (size_t i = 0; i < list_size; i++) { |
375 void *dest = invoke_list_func(at, list, i); |
375 void *dest = invoke_list_func(at, list, i); |
376 memcpy(dest, loc, elem_size); |
376 memcpy(dest, loc, elem_size); |
377 loc += elem_size; |
377 loc += elem_size; |
378 } |
378 } |
379 |
379 |
380 free(tmp); |
380 cxFree(cxDefaultAllocator, tmp); |
381 } |
381 } |
382 |
382 |
383 int cx_list_default_swap(struct cx_list_s *list, size_t i, size_t j) { |
383 int cx_list_default_swap(struct cx_list_s *list, size_t i, size_t j) { |
384 if (i == j) return 0; |
384 if (i == j) return 0; |
385 if (i >= list->collection.size) return 1; |
385 if (i >= list->collection.size) return 1; |
386 if (j >= list->collection.size) return 1; |
386 if (j >= list->collection.size) return 1; |
387 |
387 |
388 size_t elem_size = list->collection.elem_size; |
388 size_t elem_size = list->collection.elem_size; |
389 |
389 |
390 void *tmp = malloc(elem_size); |
390 void *tmp = cxMalloc(cxDefaultAllocator, elem_size); |
391 if (tmp == NULL) return 1; |
391 if (tmp == NULL) return 1; |
392 |
392 |
393 void *ip = invoke_list_func(at, list, i); |
393 void *ip = invoke_list_func(at, list, i); |
394 void *jp = invoke_list_func(at, list, j); |
394 void *jp = invoke_list_func(at, list, j); |
395 |
395 |
396 memcpy(tmp, ip, elem_size); |
396 memcpy(tmp, ip, elem_size); |
397 memcpy(ip, jp, elem_size); |
397 memcpy(ip, jp, elem_size); |
398 memcpy(jp, tmp, elem_size); |
398 memcpy(jp, tmp, elem_size); |
399 |
399 |
400 free(tmp); |
400 cxFree(cxDefaultAllocator, tmp); |
401 |
401 |
402 return 0; |
402 return 0; |
403 } |
403 } |
404 |
404 |
405 void cx_list_init( |
405 void cx_list_init( |