--- a/LargeInteger.st Wed Jan 20 04:19:23 2016 +0100
+++ b/LargeInteger.st Wed Jan 20 04:19:30 2016 +0100
@@ -1,5 +1,3 @@
-"{ Encoding: utf8 }"
-
"
COPYRIGHT (c) 1994 by Claus Gittinger
All Rights Reserved
@@ -316,8 +314,6 @@
"Modified: / 8.5.1998 / 21:40:41 / cg"
! !
-
-
!LargeInteger class methodsFor:'queries'!
isBuiltInClass
@@ -1111,50 +1107,6 @@
"Modified: / 26.9.2001 / 17:34:03 / cg"
!
-bitAt:anIntegerIndex
- "return the value of the index's bit (index starts at 1) as 0 or 1.
- Notice: the result of bitAt: on negative receivers is not
- defined in the language standard (since the implementation
- is free to choose any internal representation for integers)"
-
-%{ /* NOCONTEXT */
- if (__isSmallInteger(anIntegerIndex)) {
- INT idx = __smallIntegerVal(anIntegerIndex) - 1;
-
- if (idx >= 0) {
- int v1;
- int byteOffset = idx / 8;
- int digitLen = __byteArraySize(__INST(digitByteArray));
-
- if (digitLen < byteOffset) {
- RETURN(__mkSmallInteger(0));
- }
-
- v1 = (__byteArrayVal(__INST(digitByteArray)))[byteOffset];
- if (v1 & (1 << (idx % 8))) {
- RETURN(__mkSmallInteger(1));
- } else {
- RETURN(__mkSmallInteger(0));
- }
- }
- }
-%}.
- ^ super bitAt:anIntegerIndex
-
- "
- TestCase should:[ 16rFFFFFFFFFF01 bitAt:0 ] raise:Error
- TestCase assert:( 16rFFFFFFFFFF01 bitAt:49 ) == 0
- TestCase assert:( 16rFFFFFFFFFF01 bitAt:1 ) == 1
- TestCase assert:( 16rFFFFFFFFFF01 bitAt:2 ) == 0
- TestCase assert:( 16rFFFFFFFFFF02 bitAt:2 ) == 1
- TestCase assert:( 16rFFFFFFFF01FF bitAt:8 ) == 1
- TestCase assert:( 16rFFFFFFFF01FF bitAt:9 ) == 1
- TestCase assert:( 16rFFFFFFFF01FF bitAt:10 ) == 0
- "
-
- "Modified: / 10-08-2010 / 12:33:04 / cg"
-!
-
bitXor:anInteger
"return the bitwise-or of the receiver and the argument, anInteger.
Here, a specially tuned version for largeInteger arguments
@@ -1336,6 +1288,52 @@
"
"Modified: 14.8.1997 / 11:55:34 / cg"
+! !
+
+!LargeInteger methodsFor:'bit operators - indexed'!
+
+bitAt:anIntegerIndex
+ "return the value of the index's bit (index starts at 1) as 0 or 1.
+ Notice: the result of bitAt: on negative receivers is not
+ defined in the language standard (since the implementation
+ is free to choose any internal representation for integers)"
+
+%{ /* NOCONTEXT */
+ if (__isSmallInteger(anIntegerIndex)) {
+ INT idx = __smallIntegerVal(anIntegerIndex) - 1;
+
+ if (idx >= 0) {
+ int v1;
+ int byteOffset = idx / 8;
+ int digitLen = __byteArraySize(__INST(digitByteArray));
+
+ if (digitLen < byteOffset) {
+ RETURN(__mkSmallInteger(0));
+ }
+
+ v1 = (__byteArrayVal(__INST(digitByteArray)))[byteOffset];
+ if (v1 & (1 << (idx % 8))) {
+ RETURN(__mkSmallInteger(1));
+ } else {
+ RETURN(__mkSmallInteger(0));
+ }
+ }
+ }
+%}.
+ ^ super bitAt:anIntegerIndex
+
+ "
+ TestCase should:[ 16rFFFFFFFFFF01 bitAt:0 ] raise:Error
+ TestCase assert:( 16rFFFFFFFFFF01 bitAt:49 ) == 0
+ TestCase assert:( 16rFFFFFFFFFF01 bitAt:1 ) == 1
+ TestCase assert:( 16rFFFFFFFFFF01 bitAt:2 ) == 0
+ TestCase assert:( 16rFFFFFFFFFF02 bitAt:2 ) == 1
+ TestCase assert:( 16rFFFFFFFF01FF bitAt:8 ) == 1
+ TestCase assert:( 16rFFFFFFFF01FF bitAt:9 ) == 1
+ TestCase assert:( 16rFFFFFFFF01FF bitAt:10 ) == 0
+ "
+
+ "Modified: / 10-08-2010 / 12:33:04 / cg"
!
setBit:index