src/array.c

changeset 369
28a8ccc442b0
parent 357
0f5732f0dc00
child 384
9b81a555c059
equal deleted inserted replaced
368:97c53f7ef5e4 369:28a8ccc442b0
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)
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