src/array_list.c

changeset 1476
79d4c281a63b
parent 1429
6e0c3a8a914a
equal deleted inserted replaced
1475:9381883c1a99 1476:79d4c281a63b
100 }; 100 };
101 } 101 }
102 102
103 // LOW LEVEL ARRAY LIST FUNCTIONS 103 // LOW LEVEL ARRAY LIST FUNCTIONS
104 104
105 /**
106 * Increases the capacity until it is a multiple of a some alignment or reaches the maximum.
107 *
108 * @param cap the required capacity (must not be larger than @p max)
109 * @param alignment the alignment
110 * @param max the maximum capacity
111 * @return the aligned capacity
112 */
105 static size_t cx_array_align_capacity( 113 static size_t cx_array_align_capacity(
106 size_t cap, 114 size_t cap,
107 size_t alignment, 115 size_t alignment,
108 size_t max 116 size_t max
109 ) { 117 ) {
780 cx_array_list *arl = (cx_array_list *) list; 788 cx_array_list *arl = (cx_array_list *) list;
781 789
782 // guarantee enough capacity 790 // guarantee enough capacity
783 if (arl->capacity < list->collection.size + n) { 791 if (arl->capacity < list->collection.size + n) {
784 size_t new_capacity = list->collection.size + n; 792 size_t new_capacity = list->collection.size + n;
785 new_capacity = new_capacity - (new_capacity % 16) + 16; 793 new_capacity = cx_array_align_capacity(new_capacity, 16, SIZE_MAX);
786 if (cxReallocateArray( 794 if (cxReallocateArray(
787 list->collection.allocator, 795 list->collection.allocator,
788 &arl->data, new_capacity, 796 &arl->data, new_capacity,
789 list->collection.elem_size) 797 list->collection.elem_size)
790 ) { 798 ) {

mercurial