[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