$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r48628 - trunk/tools/build/v2/util
From: grafikrobot_at_[hidden]
Date: 2008-09-06 01:09:21
Author: grafik
Date: 2008-09-06 01:09:20 EDT (Sat, 06 Sep 2008)
New Revision: 48628
URL: http://svn.boost.org/trac/boost/changeset/48628
Log:
Cleanup of BBv2 number utilities to improve performance.
Text files modified: 
   trunk/tools/build/v2/util/numbers.jam |    57 ++++++--------------------------------- 
   1 files changed, 9 insertions(+), 48 deletions(-)
Modified: trunk/tools/build/v2/util/numbers.jam
==============================================================================
--- trunk/tools/build/v2/util/numbers.jam	(original)
+++ trunk/tools/build/v2/util/numbers.jam	2008-09-06 01:09:20 EDT (Sat, 06 Sep 2008)
@@ -16,25 +16,9 @@
 zero-test = is zero ;  # if $(zero-test[$(n)]) == "is" "zero", n == 0
 
 
-local rule extend ( )
-{
-    local next = $(digits[2-])$(znatural) ;
-    natural += $(next) ;
-    positive += $(next) ;
-    incr += $(next) ;
-    znatural = $(digits)$(znatural) ;
-}
-
-
 rule trim-leading-zeroes ( value )
 {
-    local value2 = [ MATCH "^0(.*)$" : $(value) ] ;
-    while $(value2)
-    {
-        value = $(value2) ;
-        value2 = [ MATCH "^0(.*)$" : $(value) ] ;
-    }
-    return $(value:E="") ;
+    return [ CALC $(value) + 0 ] ;
 }
 
 
@@ -76,45 +60,22 @@
 
     if $(finish) != 0
     {
-        while ! $(positive[$(finish)])
-        {
-            extend ;
-        }
-
-        if $(step) = 1
+        local result ;
+        while [ less $(start) $(finish) ] || $(start) = $(finish)
         {
-            return $(positive[$(start)-$(finish)]) ;
-        }
-        else
-        {
-            local index = [ increment $(step) ] ;
-            local by1 = $(positive[$(start)-$(finish)]) ;
-            local result ;
-            while $(by1)
-            {
-                result += $(by1[1]) ;
-                by1 = $(by1[$(index)-]) ;
-            }
-            return $(result) ;
+            result += $(start) ;
+            start = [ CALC $(start) + $(step) ] ;
         }
+        return $(result) ;
     }
 }
 
 
 rule less ( n1 n2 )
 {
-    check $(n1) $(n2) ;
-    n1 = [ trim-leading-zeroes $(n1) ] ;
-    n2 = [ trim-leading-zeroes $(n2) ] ;
-
-    # Avoid messy 0 case by appending 1.
-    local l1 = [ range 2 [ log10 $(n1)1 ] ] ;
-    local l2 = [ range 2 [ log10 $(n2)1 ] ] ;
-
-    # Number of digits mismatch?
-    if ( $(l1) < $(l2) ) || ( ( $(l1) = $(l2) ) && $(n1) < $(n2) )
+    switch [ CALC $(n2) - $(n1) ]
     {
-        return true ;
+        case [1-9]* : return true ;
     }
 }
 
@@ -184,7 +145,7 @@
     assert.result 0           : trim-leading-zeroes 0           ;
     assert.result 1234        : trim-leading-zeroes 1234        ;
     assert.result 123456      : trim-leading-zeroes 0000123456  ;
-    assert.result 10000123456 : trim-leading-zeroes 10000123456 ;
+    assert.result 1000123456  : trim-leading-zeroes 1000123456  ;
     assert.result 10000       : trim-leading-zeroes 10000       ;
     assert.result 10000       : trim-leading-zeroes 00010000    ;