Changeset 03daabd in mainline for uspace/lib/c/generic/adt/array.c
- Timestamp:
- 2019-10-06T19:47:36Z (5 years ago)
- Children:
- 5be6361
- Parents:
- 9559cf8
- git-author:
- Matthieu Riolo <matthieu.riolo@…> (2019-09-17 07:50:03)
- git-committer:
- Matthieu Riolo <matthieu.riolo@…> (2019-10-06 19:47:36)
- File:
-
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/generic/adt/array.c
r9559cf8 r03daabd 34 34 * Implementation of dynamic array that grows or shrinks based upon no. of 35 35 * items it contains. Non-negligible part of implementation is in @ref 36 * dyn_array.h because of type genericity.36 * array.h because of type genericity. 37 37 */ 38 38 39 39 #include <assert.h> 40 40 #include <errno.h> 41 #include <adt/ dyn_array.h>41 #include <adt/array.h> 42 42 #include <macros.h> 43 43 #include <mem.h> 44 44 #include <stdlib.h> 45 45 46 static errno_t dyn_array_realloc(dyn_array_t *da, size_t capacity)46 static errno_t array_realloc(array_t *da, size_t capacity) 47 47 { 48 48 if (capacity == da->capacity) { … … 58 58 } 59 59 60 void dyn_array_destroy(dyn_array_t *da)60 void array_destroy(array_t *da) 61 61 { 62 dyn_array_clear(da);62 array_clear(da); 63 63 free(da->_data); 64 64 da->capacity = 0; … … 66 66 67 67 /** Remove item at given position, shift rest of array */ 68 void dyn_array_remove(dyn_array_t *da, size_t index)68 void array_remove(array_t *da, size_t index) 69 69 { 70 70 assert(index < da->size); 71 _ dyn_array_unshift(da, index, 1);72 errno_t rc = dyn_array_reserve(da, da->size);71 _array_unshift(da, index, 1); 72 errno_t rc = array_reserve(da, da->size); 73 73 assert(rc == EOK); 74 74 } 75 75 76 76 /** Clear dynamic array (empty) */ 77 void dyn_array_clear(dyn_array_t *da)77 void array_clear(array_t *da) 78 78 { 79 79 da->size = 0; … … 86 86 * @param[in] end index behind last item to remove 87 87 */ 88 void dyn_array_clear_range(dyn_array_t *da, size_t begin, size_t end)88 void array_clear_range(array_t *da, size_t begin, size_t end) 89 89 { 90 90 assert(begin < da->size); 91 91 assert(end <= da->size); 92 92 93 _ dyn_array_unshift(da, begin, end - begin);94 errno_t rc = dyn_array_reserve(da, da->size);93 _array_unshift(da, begin, end - begin); 94 errno_t rc = array_reserve(da, da->size); 95 95 assert(rc == EOK); 96 96 } … … 104 104 * @return ENOMEM when allocation fails 105 105 */ 106 errno_t dyn_array_concat(dyn_array_t *da1, dyn_array_t *da2)106 errno_t array_concat(array_t *da1, array_t *da2) 107 107 { 108 108 assert(da1->_item_size == da2->_item_size); 109 109 110 errno_t rc = dyn_array_reserve(da1, da1->size + da2->size);110 errno_t rc = array_reserve(da1, da1->size + da2->size); 111 111 if (rc != EOK) { 112 112 return rc; … … 129 129 * @return ENOMEM 130 130 */ 131 errno_t dyn_array_reserve(dyn_array_t *da, size_t capacity)131 errno_t array_reserve(array_t *da, size_t capacity) 132 132 { 133 133 const size_t factor = 2; … … 141 141 } 142 142 143 return dyn_array_realloc(da, new_capacity);143 return array_realloc(da, new_capacity); 144 144 } 145 145 146 void _ dyn_array_initialize(dyn_array_t *da, size_t item_size)146 void _array_initialize(array_t *da, size_t item_size) 147 147 { 148 148 da->_item_size = item_size; … … 161 161 * @param[in] offset shift in no. of items 162 162 */ 163 void _ dyn_array_shift(dyn_array_t *da, size_t index, size_t offset)163 void _array_shift(array_t *da, size_t index, size_t offset) 164 164 { 165 165 assert(da->capacity >= da->size + offset); … … 180 180 * @param[in] offset shift in no. of items 181 181 */ 182 void _ dyn_array_unshift(dyn_array_t *da, size_t index, size_t offset)182 void _array_unshift(array_t *da, size_t index, size_t offset) 183 183 { 184 184 void *src = da->_data + (index + offset) * da->_item_size;
Note:
See TracChangeset
for help on using the changeset viewer.