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

Changeset 5b8da86 in mainline


Ignore:
Timestamp:
2020-03-14T14:42:59Z (3 weeks ago)
Author:
Matthieu Riolo <matthieu.riolo@…>
Children:
0e23efa9
Parents:
bc81f54
git-author:
Michal Koutny <xm.koutny+hos@…> (2015-04-25 00:30:34)
git-committer:
Matthieu Riolo <matthieu.riolo@…> (2020-03-14 14:42:59)
Message:

libc: Add more dyn_array functions
Conflicts:

boot/Makefile.common

Conflicts:

boot/Makefile.common

Location:
uspace/lib/c
Files:
3 edited

Legend:

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

    rbc81f54 r5b8da86  
    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

    rbc81f54 r5b8da86  
    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

    rbc81f54 r5b8da86  
    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.