src/array_list.c

changeset 1111
78eeeb950883
parent 1089
865c84fef6b4
equal deleted inserted replaced
1110:a0e9be7ed131 1111:78eeeb950883
1011 allocator = cxDefaultAllocator; 1011 allocator = cxDefaultAllocator;
1012 } 1012 }
1013 1013
1014 cx_array_list *list = cxCalloc(allocator, 1, sizeof(cx_array_list)); 1014 cx_array_list *list = cxCalloc(allocator, 1, sizeof(cx_array_list));
1015 if (list == NULL) return NULL; 1015 if (list == NULL) return NULL;
1016 1016 cx_list_init((CxList*)list, &cx_array_list_class,
1017 list->base.cl = &cx_array_list_class; 1017 allocator, comparator, elem_size);
1018 list->base.collection.allocator = allocator;
1019 list->capacity = initial_capacity; 1018 list->capacity = initial_capacity;
1020 1019
1021 if (elem_size > 0) {
1022 list->base.collection.elem_size = elem_size;
1023 list->base.collection.cmpfunc = comparator;
1024 } else {
1025 elem_size = sizeof(void *);
1026 list->base.collection.cmpfunc = comparator == NULL ? cx_cmp_ptr : comparator;
1027 cxListStorePointers((CxList *) list);
1028 }
1029
1030 // allocate the array after the real elem_size is known 1020 // allocate the array after the real elem_size is known
1031 list->data = cxCalloc(allocator, initial_capacity, elem_size); 1021 list->data = cxCalloc(allocator, initial_capacity,
1022 list->base.collection.elem_size);
1032 if (list->data == NULL) { // LCOV_EXCL_START 1023 if (list->data == NULL) { // LCOV_EXCL_START
1033 cxFree(allocator, list); 1024 cxFree(allocator, list);
1034 return NULL; 1025 return NULL;
1035 } // LCOV_EXCL_STOP 1026 } // LCOV_EXCL_STOP
1036 1027

mercurial