Commit e9544ada authored by Stefan Krah's avatar Stefan Krah

Resize the coefficient to MPD_MINALLOC also if the requested size is below

MPD_MINALLOC. Previously the resize was skipped as a micro optimization.
parent e158aa85
...@@ -480,17 +480,20 @@ mpd_qresize(mpd_t *result, mpd_ssize_t nwords, uint32_t *status) ...@@ -480,17 +480,20 @@ mpd_qresize(mpd_t *result, mpd_ssize_t nwords, uint32_t *status)
{ {
assert(!mpd_isconst_data(result)); /* illegal operation for a const */ assert(!mpd_isconst_data(result)); /* illegal operation for a const */
assert(!mpd_isshared_data(result)); /* illegal operation for a shared */ assert(!mpd_isshared_data(result)); /* illegal operation for a shared */
assert(MPD_MINALLOC <= result->alloc);
nwords = (nwords <= MPD_MINALLOC) ? MPD_MINALLOC : nwords;
if (nwords == result->alloc) {
return 1;
}
if (mpd_isstatic_data(result)) { if (mpd_isstatic_data(result)) {
if (nwords > result->alloc) { if (nwords > result->alloc) {
return mpd_switch_to_dyn(result, nwords, status); return mpd_switch_to_dyn(result, nwords, status);
} }
} return 1;
else if (nwords != result->alloc && nwords >= MPD_MINALLOC) {
return mpd_realloc_dyn(result, nwords, status);
} }
return 1; return mpd_realloc_dyn(result, nwords, status);
} }
/* Same as mpd_qresize, but the complete coefficient (including the old /* Same as mpd_qresize, but the complete coefficient (including the old
...@@ -500,20 +503,21 @@ mpd_qresize_zero(mpd_t *result, mpd_ssize_t nwords, uint32_t *status) ...@@ -500,20 +503,21 @@ mpd_qresize_zero(mpd_t *result, mpd_ssize_t nwords, uint32_t *status)
{ {
assert(!mpd_isconst_data(result)); /* illegal operation for a const */ assert(!mpd_isconst_data(result)); /* illegal operation for a const */
assert(!mpd_isshared_data(result)); /* illegal operation for a shared */ assert(!mpd_isshared_data(result)); /* illegal operation for a shared */
assert(MPD_MINALLOC <= result->alloc);
if (mpd_isstatic_data(result)) { nwords = (nwords <= MPD_MINALLOC) ? MPD_MINALLOC : nwords;
if (nwords > result->alloc) { if (nwords != result->alloc) {
return mpd_switch_to_dyn_zero(result, nwords, status); if (mpd_isstatic_data(result)) {
if (nwords > result->alloc) {
return mpd_switch_to_dyn_zero(result, nwords, status);
}
} }
} else if (!mpd_realloc_dyn(result, nwords, status)) {
else if (nwords != result->alloc && nwords >= MPD_MINALLOC) {
if (!mpd_realloc_dyn(result, nwords, status)) {
return 0; return 0;
} }
} }
mpd_uint_zero(result->data, nwords); mpd_uint_zero(result->data, nwords);
return 1; return 1;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment