src/ucx/array.c

branch
webdav
changeset 260
4779a6fb4fbe
parent 254
4784c14aa639
equal deleted inserted replaced
259:0b8692959d37 260:4779a6fb4fbe
68 } 68 }
69 return 0; 69 return 0;
70 } 70 }
71 71
72 int ucx_array_util_set_a(UcxAllocator* alloc, void** array, size_t* capacity, 72 int ucx_array_util_set_a(UcxAllocator* alloc, void** array, size_t* capacity,
73 size_t elmsize, size_t index, ...) { 73 size_t elmsize, size_t index, void* data) {
74 74
75 if(!alloc || !capacity || !array) { 75 if(!alloc || !capacity || !array) {
76 errno = EINVAL; 76 errno = EINVAL;
77 return 1; 77 return 1;
78 } 78 }
102 *capacity = newcapacity; 102 *capacity = newcapacity;
103 103
104 104
105 char* dest = *array; 105 char* dest = *array;
106 dest += elmsize*index; 106 dest += elmsize*index;
107 107 memcpy(dest, data, elmsize);
108 va_list ap; 108
109 va_start(ap, index); 109 return 0;
110 int elem = va_arg(ap, int); 110 }
111 memcpy(dest, &elem, elmsize); 111
112 va_end(ap); 112 int ucx_array_util_setptr_a(UcxAllocator* alloc, void** array, size_t* capacity,
113 113 size_t index, void* data) {
114 return 0; 114
115 return ucx_array_util_set_a(alloc, array, capacity, sizeof(void*),
116 index, &data);
115 } 117 }
116 118
117 UcxArray* ucx_array_new(size_t capacity, size_t elemsize) { 119 UcxArray* ucx_array_new(size_t capacity, size_t elemsize) {
118 return ucx_array_new_a(capacity, elemsize, ucx_default_allocator()); 120 return ucx_array_new_a(capacity, elemsize, ucx_default_allocator());
119 } 121 }
250 } else { 252 } else {
251 memset(dest, 0, array->elemsize*count); 253 memset(dest, 0, array->elemsize*count);
252 } 254 }
253 255
254 return 0; 256 return 0;
255 }
256
257 int ucx_array_appendv(UcxArray *array, ...) {
258 va_list ap;
259 va_start(ap, array);
260 int elem = va_arg(ap, int);
261 int ret = ucx_array_append_from(array, &elem, 1);
262 va_end(ap);
263 return ret;
264 }
265
266 int ucx_array_prependv(UcxArray *array, ...) {
267 va_list ap;
268 va_start(ap, array);
269 int elem = va_arg(ap, int);
270 int ret = ucx_array_prepend_from(array, &elem, 1);
271 va_end(ap);
272 return ret;
273 }
274
275 int ucx_array_setv(UcxArray *array, size_t index, ...) {
276 va_list ap;
277 va_start(ap, index);
278 int elem = va_arg(ap, int);
279 int ret = ucx_array_set_from(array, index, &elem, 1);
280 va_end(ap);
281 return ret;
282 } 257 }
283 258
284 int ucx_array_concat(UcxArray *array1, const UcxArray *array2) { 259 int ucx_array_concat(UcxArray *array1, const UcxArray *array2) {
285 260
286 if (array1->elemsize != array2->elemsize) 261 if (array1->elemsize != array2->elemsize)
402 cmp_func func; 377 cmp_func func;
403 void *data; 378 void *data;
404 }; 379 };
405 380
406 static int cmp_func_swap_args(void *data, const void *x, const void *y) { 381 static int cmp_func_swap_args(void *data, const void *x, const void *y) {
407 cmpfnc_swapargs_info* info = data; 382 struct cmpfnc_swapargs_info* info = data;
408 return info->func(x, y, info->data); 383 return info->func(x, y, info->data);
409 } 384 }
410 385
411 static void ucx_qsort_r(void *array, size_t count, size_t elemsize, 386 static void ucx_qsort_r(void *array, size_t count, size_t elemsize,
412 cmp_func cmpfnc, void *data) { 387 cmp_func cmpfnc, void *data) {
484 } else { 459 } else {
485 return 1; 460 return 1;
486 } 461 }
487 } 462 }
488 } 463 }
464
465 int ucx_array_grow(UcxArray* array, size_t count) {
466 return ucx_array_reserve(array, array->size+count);
467 }

mercurial