Integer.st
branchjv
changeset 18017 7fef9e17913f
parent 18011 deb0c3355881
parent 14680 eb312d015dd6
child 18027 3621469cc5e8
--- a/Integer.st	Wed Jan 23 10:08:55 2013 +0000
+++ b/Integer.st	Mon Jan 28 21:53:19 2013 +0000
@@ -817,7 +817,6 @@
     "
 ! !
 
-
 !Integer class methodsFor:'prime numbers'!
 
 flushPrimeCache
@@ -1140,7 +1139,6 @@
     ^ self == Integer
 ! !
 
-
 !Integer methodsFor:'Compatibility-Dolphin'!
 
 & aNumber
@@ -4112,6 +4110,64 @@
     "
 !
 
+nextMultipleOf: n
+    "return the multiple of n at or above the receiver.
+     Useful for padding."
+
+    |rest|
+
+    rest := self \\ n.
+    rest == 0 ifTrue:[ ^ self ].
+    ^ self + (n - rest)
+
+    "
+     1 nextMultipleOf: 4  
+     2 nextMultipleOf: 4  
+     3 nextMultipleOf: 4  
+     4 nextMultipleOf: 4  
+
+     22 nextMultipleOf: 4 
+    "
+!
+
+nextPowerOf2
+    "return the power of 2 at or above the receiver.
+     Useful for padding."
+
+    |x t sh|
+
+    x := self - 1.
+    x := x bitOr: (x bitShift: -1).
+    x := x bitOr: (x bitShift: -2).
+    x := x bitOr: (x bitShift: -4).
+    x := x bitOr: (x bitShift: -8).
+    x := x bitOr: (t := x bitShift: -16).
+    t == 0 ifFalse:[
+        sh := -32.
+        [
+            x := x bitOr: (t := x bitShift: sh).
+            sh := sh + sh. 
+        ] doWhile: [t ~~ 0]
+    ].
+    ^ x + 1 
+
+    "
+     1 nextPowerOf2    
+     2 nextPowerOf2    
+     3 nextPowerOf2    
+     4 nextPowerOf2    
+     5 nextPowerOf2    
+     6 nextPowerOf2    
+     7 nextPowerOf2    
+     8 nextPowerOf2    
+
+     22 nextPowerOf2
+     12 factorial nextPowerOf2  isPowerOf:2  
+     100 factorial nextPowerOf2  isPowerOf:2  
+     1000 factorial nextPowerOf2  isPowerOf:2  
+    "
+!
+
 nextPrime
     "return the next prime after the receiver"
 
@@ -4176,7 +4232,6 @@
     "Created: / 09-01-2012 / 17:18:06 / cg"
 ! !
 
-
 !Integer methodsFor:'special modulu arithmetic'!
 
 add_32:anInteger
@@ -4863,11 +4918,12 @@
 !Integer class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/Integer.st,v 1.271 2012-11-04 15:05:51 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Integer.st,v 1.273 2013-01-22 14:10:37 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic/Integer.st,v 1.271 2012-11-04 15:05:51 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Integer.st,v 1.273 2013-01-22 14:10:37 cg Exp $'
 ! !
 
+
 Integer initialize!