X-Git-Url: http://git.madism.org/?a=blobdiff_plain;f=common%2Farray.h;h=4a5b88dc89728dcb75420f4cb7d0d4bda7ebac90;hb=7fa8c1bc673add68529fa2bda8134be5089e8745;hp=6f5217d6693e0318021e6876553d4a5a15762bfa;hpb=f47b916bf7581b0070431eb70f43710e4c79fc98;p=apps%2Fpfixtools.git diff --git a/common/array.h b/common/array.h index 6f5217d..4a5b88d 100644 --- a/common/array.h +++ b/common/array.h @@ -138,12 +138,19 @@ array_ensure_can_edit(array); \ p_allocgrow(&(array).data, (goal), &(array).size); \ } -#define array_adjust(array) \ +#define array_shrink(array, cap) \ do { \ array_ensure_can_edit(array); \ - p_shrink(&(array).data, (array).len, &(array).size); \ + if ((cap) < (array).size && (array).size != (array).len) { \ + p_shrink(&(array).data, MAX((array).len, (cap)), &(array).size); \ + } \ } while (0) +#define array_adjust(array) array_shrink(array, 0) + #define array_elt(array, n) ((array).data[(n)]) +#define array_last(array) array_elt(array, (array).len - 1) +#define array_pop_last(array) array_elt(array, --((array).len)) + #define array_ptr(array, n) ((array).data + (n)) #define foreach(var, array) \