Integer.st
changeset 1883 d3fbf4b36be7
parent 1866 225afe414934
child 1888 463d49ca22e3
--- a/Integer.st	Tue Nov 05 12:21:22 1996 +0100
+++ b/Integer.st	Tue Nov 05 14:32:24 1996 +0100
@@ -306,11 +306,11 @@
     result := self class basicNew numberOfDigits:n.
 
     1 to:n do:[:index |
-	byte := (anInteger digitAt:index) bitAnd:(self digitAt:index).
-	result digitAt:index put:byte.
+        byte := (anInteger digitAt:index) bitAnd:(self digitAt:index).
+        result digitAt:index put:byte.
     ].
     (byte == 0 or:[n < 5]) ifTrue:[
-	^ result normalize
+        ^ result compressed
     ].
     ^ result
 
@@ -320,6 +320,8 @@
      (16r112233445566778899 bitAnd:16rFF0000000000000000) printStringRadix:16 
      (16r112233445566778899 bitAnd:16r00000000000000FFFF) printStringRadix:16 
     "
+
+    "Modified: 5.11.1996 / 14:06:26 / cg"
 !
 
 bitAt:index
@@ -386,8 +388,8 @@
      leftShift if shiftCount > 0; rightShift otherwise.
 
      Notice: the result of bitShift: on negative receivers is not 
-	     defined in the language standard (since the implementation
-	     is free to choose any internal representation for integers)"
+             defined in the language standard (since the implementation
+             is free to choose any internal representation for integers)"
 
     |result 
      prev       "{ Class: SmallInteger }"
@@ -401,150 +403,152 @@
      nn         "{ Class: SmallInteger }"|
 
     shiftCount > 0 ifTrue:[
-	"left shift"
+        "left shift"
 
-	digitShift := shiftCount // 8.
-	bitShift := shiftCount \\ 8.
-	n := self digitLength.
+        digitShift := shiftCount // 8.
+        bitShift := shiftCount \\ 8.
+        n := self digitLength.
 
-	"
-	 modulu 8 shifts can be done faster ...
-	"
-	bitShift == 0 ifTrue:[
-	    result := self class basicNew numberOfDigits:n + digitShift.
-	    result sign:self sign.
-	    result digits replaceFrom:(digitShift + 1) with:self digits.
-	    "
-	     no normalize needed, since receiver was already normalized
-	    "
-	    ^ result
-	].
+        "
+         modulu 8 shifts can be done faster ...
+        "
+        bitShift == 0 ifTrue:[
+            result := self class basicNew numberOfDigits:n + digitShift.
+            result sign:self sign.
+            result digits replaceFrom:(digitShift + 1) with:self digits.
+            "
+             no normalize needed, since receiver was already normalized
+            "
+            ^ result
+        ].
 
-	"
-	 less-than-8 shifts can be done faster ...
-	"
-	digitShift == 0 ifTrue:[
-	    n := n + 1.
-	    result := self class basicNew numberOfDigits:n.
-	    result sign:self sign.
-	    prev := 0.
-	    1 to:n-1 do:[:index |
-		byte := self digitAt:index.
-		byte := (byte bitShift:bitShift) bitOr:prev.
-		result digitAt:index put:(byte bitAnd:16rFF).
-		prev := byte bitShift:-8.
-	    ].
-	    result digitAt:n put:prev.
-	    "
-	     might have stored a 0-byte ...
-	    "
-	    prev == 0 ifTrue:[
-		^ result normalize
-	    ].
-	    ^ result.
-	].
+        "
+         less-than-8 shifts can be done faster ...
+        "
+        digitShift == 0 ifTrue:[
+            n := n + 1.
+            result := self class basicNew numberOfDigits:n.
+            result sign:self sign.
+            prev := 0.
+            1 to:n-1 do:[:index |
+                byte := self digitAt:index.
+                byte := (byte bitShift:bitShift) bitOr:prev.
+                result digitAt:index put:(byte bitAnd:16rFF).
+                prev := byte bitShift:-8.
+            ].
+            result digitAt:n put:prev.
+            "
+             might have stored a 0-byte ...
+            "
+            prev == 0 ifTrue:[
+                ^ result compressed
+            ].
+            ^ result.
+        ].
 
-	"
-	 slow case ...
-	"
-	n := n + digitShift + 1.
-	result := self class basicNew numberOfDigits:n.
-	result sign:self sign.
-	byte := self digitAt:1.
-	byte := (byte bitShift:bitShift) bitAnd:16rFF.
-	result digitAt:(digitShift + 1) put:byte.
-	revShift := -8 + bitShift.
-	2 to:(self digitLength) do:[:index |
-	    byte := self digitAt:index.
-	    byte2 := self digitAt:index-1.
-	    byte := byte bitShift:bitShift.
-	    byte2 := byte2 bitShift:revShift.
-	    byte := byte bitOr:byte2.
-	    byte := byte bitAnd:16rFF.
-	    result digitAt:(index + digitShift) put:byte.
-	].
-	byte2 := self digitAt:self digitLength.
-	byte2 := byte2 bitShift:revShift.
-	byte2 := byte2 bitAnd:16rFF.
-	result digitAt:(self digitLength + digitShift + 1) put:byte2.
-	"
-	 might have stored a 0-byte ...
-	"
-	byte2 == 0 ifTrue:[
-	    ^ result normalize
-	].
-	^ result
+        "
+         slow case ...
+        "
+        n := n + digitShift + 1.
+        result := self class basicNew numberOfDigits:n.
+        result sign:self sign.
+        byte := self digitAt:1.
+        byte := (byte bitShift:bitShift) bitAnd:16rFF.
+        result digitAt:(digitShift + 1) put:byte.
+        revShift := -8 + bitShift.
+        2 to:(self digitLength) do:[:index |
+            byte := self digitAt:index.
+            byte2 := self digitAt:index-1.
+            byte := byte bitShift:bitShift.
+            byte2 := byte2 bitShift:revShift.
+            byte := byte bitOr:byte2.
+            byte := byte bitAnd:16rFF.
+            result digitAt:(index + digitShift) put:byte.
+        ].
+        byte2 := self digitAt:self digitLength.
+        byte2 := byte2 bitShift:revShift.
+        byte2 := byte2 bitAnd:16rFF.
+        result digitAt:(self digitLength + digitShift + 1) put:byte2.
+        "
+         might have stored a 0-byte ...
+        "
+        byte2 == 0 ifTrue:[
+            ^ result compressed
+        ].
+        ^ result
     ].
 
     shiftCount < 0 ifTrue:[
-	"right shift"
+        "right shift"
 
-	digitShift := shiftCount negated // 8.
-	bitShift := shiftCount negated \\ 8.
-	n := self digitLength.
+        digitShift := shiftCount negated // 8.
+        bitShift := shiftCount negated \\ 8.
+        n := self digitLength.
 
-	digitShift >= n ifTrue:[
-	    ^ 0
-	].
+        digitShift >= n ifTrue:[
+            ^ 0
+        ].
 
-	"
-	 modulu 8 shifts can be done faster ...
-	"
-	bitShift == 0 ifTrue:[
-	    n := n-digitShift.
-	    result := self class basicNew numberOfDigits:n.
-	    result sign:self sign.
-	    result digits replaceFrom:1 with:self digits startingAt:(digitShift + 1) .
-	    n <= 4 ifTrue:[
-		^ result normalize
-	    ].
-	    ^ result
-	].
+        "
+         modulu 8 shifts can be done faster ...
+        "
+        bitShift == 0 ifTrue:[
+            n := n-digitShift.
+            result := self class basicNew numberOfDigits:n.
+            result sign:self sign.
+            result digits replaceFrom:1 with:self digits startingAt:(digitShift + 1) .
+            n <= 4 ifTrue:[
+                ^ result compressed
+            ].
+            ^ result
+        ].
 
-	"
-	 less-than-8 shifts can be done faster ...
-	"
-	digitShift == 0 ifTrue:[
-	    result := self class basicNew numberOfDigits:n.
-	    result sign:self sign.
-	    prev := 0.
-	    bitShift := bitShift negated.
-	    revShift := 8 + bitShift.
-	    n to:1 by:-1 do:[:index |
-		byte := self digitAt:index.
-		next := (byte bitShift:revShift) bitAnd:16rFF.
-		byte := (byte bitShift:bitShift) bitOr:prev.
-		result digitAt:index put:(byte bitAnd:16rFF).
-		prev := next.
-	    ].
-	    (n <= 5) ifTrue:[
-		^ result normalize
-	    ].
-	    ^ result
-	].
+        "
+         less-than-8 shifts can be done faster ...
+        "
+        digitShift == 0 ifTrue:[
+            result := self class basicNew numberOfDigits:n.
+            result sign:self sign.
+            prev := 0.
+            bitShift := bitShift negated.
+            revShift := 8 + bitShift.
+            n to:1 by:-1 do:[:index |
+                byte := self digitAt:index.
+                next := (byte bitShift:revShift) bitAnd:16rFF.
+                byte := (byte bitShift:bitShift) bitOr:prev.
+                result digitAt:index put:(byte bitAnd:16rFF).
+                prev := next.
+            ].
+            (n <= 5) ifTrue:[
+                ^ result compressed
+            ].
+            ^ result
+        ].
 
-	"
-	 slow case ...
-	"
-	nn := n-digitShift.
-	result := self class basicNew numberOfDigits:nn.
-	result sign:self sign.
+        "
+         slow case ...
+        "
+        nn := n-digitShift.
+        result := self class basicNew numberOfDigits:nn.
+        result sign:self sign.
 
-	prev := 0.
-	bitShift := bitShift negated.
-	revShift := 8 + bitShift.
-	n to:(1 + digitShift) by:-1 do:[:index |
-	    byte := self digitAt:index.
-	    next := (byte bitShift:revShift) bitAnd:16rFF.
-	    byte := (byte bitShift:bitShift) bitOr:prev.
-	    result digitAt:(index - digitShift) put:byte.
-	    prev := next.
-	].
-	"the last stored byte ..."
-	^ result normalize
+        prev := 0.
+        bitShift := bitShift negated.
+        revShift := 8 + bitShift.
+        n to:(1 + digitShift) by:-1 do:[:index |
+            byte := self digitAt:index.
+            next := (byte bitShift:revShift) bitAnd:16rFF.
+            byte := (byte bitShift:bitShift) bitOr:prev.
+            result digitAt:(index - digitShift) put:byte.
+            prev := next.
+        ].
+        "the last stored byte ..."
+        ^ result compressed
     ].
 
     ^ self "no shift"
+
+    "Modified: 5.11.1996 / 14:06:37 / cg"
 !
 
 bitTest:anInteger
@@ -592,11 +596,11 @@
     result := self class basicNew numberOfDigits:n.
 
     1 to:n do:[:index |
-	byte := (anInteger digitAt:index) bitXor:(self digitAt:index).
-	result digitAt:index put:byte.
+        byte := (anInteger digitAt:index) bitXor:(self digitAt:index).
+        result digitAt:index put:byte.
     ].
     byte == 0 ifTrue:[
-	^ result normalize
+        ^ result compressed
     ].
     ^ result
 
@@ -606,6 +610,8 @@
      (16r112233445566778899 bitXor:16rFF0000000000000000) printStringRadix:16 'EE2233445566778899'
      (16r112233445566778899 bitXor:16r112233445566778800) printStringRadix:16 
     "
+
+    "Modified: 5.11.1996 / 14:06:40 / cg"
 !
 
 highBit
@@ -859,9 +865,9 @@
     ttt := anInteger.
     selfInteger := self.
     [ttt ~~ 0] whileTrue:[
-	temp := selfInteger \\ ttt.
-	selfInteger := ttt.
-	ttt := temp
+        temp := selfInteger \\ ttt.
+        selfInteger := ttt.
+        ttt := temp
     ].
     ^ selfInteger
 
@@ -870,6 +876,8 @@
      3 gcd:15
      132 gcd:55
     "
+
+    "Modified: 5.11.1996 / 13:46:18 / cg"
 !
 
 lcm:anInteger
@@ -1084,10 +1092,13 @@
 !
 
 compressed
-    "this is ST-80's name for ST/X's normalize.
-     ST/X may be changed for full compatibility."
+    "if the receiver can be represented as a SmallInteger, return
+     a SmallInteger with my value; otherwise return self with leading
+     zeros removed. This method is redefined in LargeInteger."
 
-    ^ self normalize
+    ^ self
+
+    "Modified: 5.11.1996 / 14:07:41 / cg"
 !
 
 floor
@@ -1134,10 +1145,15 @@
 !
 
 normalize
-    "this is ST/X's name for ST-80's compressed.
-     ST/X may be changed for full compatibility."
+    "if the receiver can be represented as a SmallInteger, return
+     a SmallInteger with my value; otherwise return self with leading
+     zeros removed.
+     This method is left for backward compatibility - it has been
+     renamed to #compressed for ST-80 compatibility."
 
-    ^ self
+    ^ self compressed
+
+    "Modified: 5.11.1996 / 14:08:24 / cg"
 !
 
 rounded
@@ -1161,5 +1177,5 @@
 !Integer class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/Integer.st,v 1.50 1996-11-04 19:29:07 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Integer.st,v 1.51 1996-11-05 13:31:47 cg Exp $'
 ! !