Fork us on GitHub Follow us on Facebook Follow us on Twitter

Changeset 16e23e2 in mainline


Ignore:
Timestamp:
2020-03-14T14:45:53Z (3 weeks ago)
Author:
Matthieu Riolo <matthieu.riolo@…>
Children:
b466ec1
Parents:
ea22f51
git-author:
Michal Koutný <xm.koutny+hos@…> (2015-05-08 11:21:11)
git-committer:
Matthieu Riolo <matthieu.riolo@…> (2020-03-14 14:45:53)
Message:

dyn_array: Non-allocating initialization API

Conflicts:

uspace/srv/sysman/job.c
uspace/srv/sysman/sysman.c

Location:
uspace/lib/c
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/c/generic/adt/dyn_array.c

    rea22f51 r16e23e2  
    7373        assert(index < da->size);
    7474        _dyn_array_unshift(da, index, 1);
    75         int rc = _dyn_array_reserve(da, da->size);
     75        int rc = dyn_array_reserve(da, da->size);
    7676        assert(rc == EOK);
    7777}
     
    8383}
    8484
    85 int _dyn_array_initialize(dyn_array_t *da, size_t item_size, size_t capacity)
    86 {
    87         da->_item_size = item_size;
    88         da->_data = NULL;
    89 
    90         da->capacity = 0;
    91         da->size = 0;
    92 
    93         return _dyn_array_reserve(da, capacity);
    94 }
    95 
    9685/** Grows/shrinks array so that it effeciently stores desired capacity
    9786 *
    9887 * @param      da
    99  * @param[in]  desired capacity of array
     88 * @param[in]  desired capacity of array (items)
    10089 *
    10190 * @return EOK
    10291 * @return ENOMEM
    10392 */
    104 int _dyn_array_reserve(dyn_array_t *da, size_t capacity)
     93int dyn_array_reserve(dyn_array_t *da, size_t capacity)
    10594{
    10695        const size_t factor = 2;
     
    115104
    116105        return dyn_array_realloc(da, new_capacity);
     106}
     107
     108void _dyn_array_initialize(dyn_array_t *da, size_t item_size)
     109{
     110        da->_item_size = item_size;
     111        da->_data = NULL;
     112
     113        da->capacity = 0;
     114        da->size = 0;
    117115}
    118116
  • uspace/lib/c/include/adt/dyn_array.h

    rea22f51 r16e23e2  
    5555 * @param[in]  capacity  initial capacity of array
    5656 *
    57  * @return EOK on success
    58  * @return ENOMEM on low memory
     57 * @return void
    5958 */
    60 #define dyn_array_initialize(dyn_array, type, capacity)                        \
    61         _dyn_array_initialize((dyn_array), sizeof(type), capacity)
     59#define dyn_array_initialize(dyn_array, type)                                  \
     60        _dyn_array_initialize((dyn_array), sizeof(type))
    6261
    6362
     
    7877        size_t _index = (index);                                               \
    7978        dyn_array_t *_da = (dyn_array);                                        \
    80         int rc = _dyn_array_reserve(_da, _da->size + 1);                       \
     79        int rc = dyn_array_reserve(_da, _da->size + 1);                       \
    8180        if (!rc) {                                                             \
    8281                _dyn_array_shift(_da, _index, 1);                              \
     
    127126extern void dyn_array_remove(dyn_array_t *, size_t);
    128127void dyn_array_clear(dyn_array_t *);
     128extern int  dyn_array_reserve(dyn_array_t *, size_t);
    129129
    130 extern int _dyn_array_initialize(dyn_array_t *, size_t, size_t);
    131 extern int  _dyn_array_reserve(dyn_array_t *, size_t);
     130extern void _dyn_array_initialize(dyn_array_t *, size_t);
    132131extern void _dyn_array_shift(dyn_array_t *, size_t, size_t);
    133132extern void _dyn_array_unshift(dyn_array_t *, size_t, size_t);
  • uspace/lib/c/test/dyn_array.c

    rea22f51 r16e23e2  
    3939
    4040PCUT_TEST_BEFORE {
    41         int rc = dyn_array_initialize(&da, data_t, 3);
     41        dyn_array_initialize(&da, data_t);
     42        int rc = dyn_array_reserve(&da, 3);
    4243        assert(rc == EOK);
    4344}
Note: See TracChangeset for help on using the changeset viewer.