From f84be00c4ed0cb612fcad0a07c40574bcae2cf35 Mon Sep 17 00:00:00 2001 From: Arnaud Giersch Date: Wed, 23 Nov 2011 13:53:16 +0100 Subject: [PATCH] Factorize code for xbt_dynar_shrink/_xbt_dynar_expand. --- src/xbt/dynar.c | 33 +++++++++++++-------------------- 1 file changed, 13 insertions(+), 20 deletions(-) diff --git a/src/xbt/dynar.c b/src/xbt/dynar.c index 2c435f59e0..437a47f741 100644 --- a/src/xbt/dynar.c +++ b/src/xbt/dynar.c @@ -80,25 +80,25 @@ static XBT_INLINE memset(ptr, 0, length); } +static XBT_INLINE +void _xbt_dynar_resize(xbt_dynar_t dynar, unsigned long new_size) +{ + if (new_size != dynar->size) { + dynar->size = new_size; + dynar->data = xbt_realloc(dynar->data, new_size * dynar->elmsize); + } +} + static XBT_INLINE void _xbt_dynar_expand(xbt_dynar_t const dynar, const unsigned long nb) { const unsigned long old_size = dynar->size; if (nb > old_size) { - void *const old_data = dynar->data; - const unsigned long elmsize = dynar->elmsize; - const unsigned long old_length = old_size * elmsize; - const unsigned long expand = 2 * (old_size + 1); - const unsigned long new_size = (nb > expand ? nb : expand); - const unsigned long new_length = new_size * elmsize; - void *const new_data = xbt_realloc(old_data, new_length); - - XBT_DEBUG("expand %p from %lu to %lu elements", dynar, old_size, new_size); - - dynar->size = new_size; - dynar->data = new_data; + _xbt_dynar_resize(dynar, (nb > expand ? nb : expand)); + XBT_DEBUG("expand %p from %lu to %lu elements", + dynar, old_size, dynar->size); } } @@ -271,15 +271,8 @@ XBT_INLINE void xbt_dynar_reset(xbt_dynar_t const dynar) */ void xbt_dynar_shrink(xbt_dynar_t dynar, int empty_slots_wanted) { - unsigned long size_wanted; - _dynar_lock(dynar); - - size_wanted = dynar->used + empty_slots_wanted; - if (size_wanted != dynar->size) { - dynar->size = size_wanted; - dynar->data = xbt_realloc(dynar->data, dynar->elmsize * dynar->size); - } + _xbt_dynar_resize(dynar, dynar->used + empty_slots_wanted); _dynar_unlock(dynar); } -- 2.20.1