[Python-checkins] cpython: Resize the coefficient to MPD_MINALLOC also if the requested size is below
stefan.krah
python-checkins at python.org
Mon Apr 9 21:33:29 CEST 2012
http://hg.python.org/cpython/rev/170bdc5c798b
changeset: 76197:170bdc5c798b
parent: 76184:02ecb8261cd8
user: Stefan Krah <skrah at bytereef.org>
date: Mon Apr 09 20:47:57 2012 +0200
summary:
Resize the coefficient to MPD_MINALLOC also if the requested size is below
MPD_MINALLOC. Previously the resize was skipped as a micro optimization.
files:
Modules/_decimal/libmpdec/mpdecimal.c | 36 ++++++++------
1 files changed, 20 insertions(+), 16 deletions(-)
diff --git a/Modules/_decimal/libmpdec/mpdecimal.c b/Modules/_decimal/libmpdec/mpdecimal.c
--- a/Modules/_decimal/libmpdec/mpdecimal.c
+++ b/Modules/_decimal/libmpdec/mpdecimal.c
@@ -480,17 +480,20 @@
{
assert(!mpd_isconst_data(result)); /* illegal operation for a const */
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 (nwords > result->alloc) {
return mpd_switch_to_dyn(result, nwords, status);
}
- }
- else if (nwords != result->alloc && nwords >= MPD_MINALLOC) {
- return mpd_realloc_dyn(result, nwords, status);
- }
-
- return 1;
+ return 1;
+ }
+
+ return mpd_realloc_dyn(result, nwords, status);
}
/* Same as mpd_qresize, but the complete coefficient (including the old
@@ -500,20 +503,21 @@
{
assert(!mpd_isconst_data(result)); /* illegal operation for a const */
assert(!mpd_isshared_data(result)); /* illegal operation for a shared */
-
- if (mpd_isstatic_data(result)) {
- if (nwords > result->alloc) {
- return mpd_switch_to_dyn_zero(result, nwords, status);
- }
- }
- else if (nwords != result->alloc && nwords >= MPD_MINALLOC) {
- if (!mpd_realloc_dyn(result, nwords, status)) {
+ assert(MPD_MINALLOC <= result->alloc);
+
+ nwords = (nwords <= MPD_MINALLOC) ? MPD_MINALLOC : nwords;
+ if (nwords != result->alloc) {
+ 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)) {
return 0;
}
}
mpd_uint_zero(result->data, nwords);
-
return 1;
}
--
Repository URL: http://hg.python.org/cpython
More information about the Python-checkins
mailing list