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) |