Changeset 4b1c6a4b in mainline


Ignore:
Timestamp:
2019-08-03T08:40:30Z (5 years ago)
Author:
Matthieu Riolo <matthieu.riolo@…>
Children:
7671231
Parents:
8432ae1
git-author:
Michal Koutny <xm.koutny+hos@…> (2015-04-25 00:30:34)
git-committer:
Matthieu Riolo <matthieu.riolo@…> (2019-08-03 08:40:30)
Message:

libc: Add more dyn_array functions
Conflicts:

boot/Makefile.common

Files:
4 edited

Legend:

Unmodified
Added
Removed
  • boot/Makefile.common

    r8432ae1 r4b1c6a4b  
    251251        $(USPACE_PATH)/lib/c/test-libc \
    252252        $(USPACE_PATH)/lib/label/test-liblabel \
     253        $(USPACE_PATH)/lib/conf/test-libconf \
    253254        $(USPACE_PATH)/lib/posix/test-libposix \
    254255        $(USPACE_PATH)/lib/sif/test-libsif \
  • uspace/lib/c/generic/adt/dyn_array.c

    r8432ae1 r4b1c6a4b  
    4545
    4646
    47 static void dyn_array_clear(dyn_array_t *da)
    48 {
    49         da->size = 0;
    50 }
     47
    5148
    5249static int dyn_array_realloc(dyn_array_t *da, size_t capacity)
     
    8077}
    8178
     79/** Clear dynamic array (empty) */
     80void dyn_array_clear(dyn_array_t *da)
     81{
     82        da->size = 0;
     83}
     84
    8285int _dyn_array_initialize(dyn_array_t *da, size_t item_size, size_t capacity)
    8386{
    8487        da->_item_size = item_size;
    8588        da->_data = NULL;
    86        
     89
    8790        da->capacity = 0;
    8891        da->size = 0;
  • uspace/lib/c/include/adt/dyn_array.h

    r8432ae1 r4b1c6a4b  
    9797/** Dynamic array iteration
    9898 *
    99  * @param[in]  it   name of variable used as iterator, it's pointer to @p type
     99 * @param[in]  dyn_array   dyn_array_t (not pointer)
     100 * @param[in]  it          name of variable used as iterator, it's pointer
     101 *                         to @p type
    100102 */
    101103#define dyn_array_foreach(dyn_array, type, it)                                 \
     
    103105            it != ((type *)(dyn_array)._data + (dyn_array).size); ++it)
    104106
     107/** Find first occurence of value
     108 *
     109 * @param[in]  dyn_array   dyn_array_t *
     110 * @param[in]  value       value to search for
     111 *
     112 * @return  index of found value or size of array when no found
     113 */
     114#define dyn_array_find(dyn_array, type, value)                                 \
     115({                                                                             \
     116        size_t _result = (dyn_array)->size;                                    \
     117        dyn_array_foreach(*(dyn_array), type, _it) {                           \
     118                if (*_it == value) {                                           \
     119                        _result = _it - (type *)(dyn_array)->_data;            \
     120                        break;                                                 \
     121                }                                                              \
     122        }                                                                      \
     123        _result;                                                               \
     124})
    105125
    106126extern void dyn_array_destroy(dyn_array_t *);
    107127extern void dyn_array_remove(dyn_array_t *, size_t);
     128void dyn_array_clear(dyn_array_t *);
    108129
    109130extern int _dyn_array_initialize(dyn_array_t *, size_t, size_t);
  • uspace/lib/c/test/dyn_array.c

    r8432ae1 r4b1c6a4b  
    124124}
    125125
     126PCUT_TEST(find) {
     127        dyn_array_append(&da, data_t, 10);
     128        dyn_array_append(&da, data_t, 11);
     129        dyn_array_append(&da, data_t, 12);
     130        dyn_array_append(&da, data_t, 99);
     131
     132        PCUT_ASSERT_INT_EQUALS(0, dyn_array_find(&da, data_t, 10));
     133        PCUT_ASSERT_INT_EQUALS(3, dyn_array_find(&da, data_t, 99));
     134        PCUT_ASSERT_INT_EQUALS(4, dyn_array_find(&da, data_t, 666));
     135}
    126136
    127137PCUT_EXPORT(dyn_array);
Note: See TracChangeset for help on using the changeset viewer.