LargeInteger.st
changeset 19052 3981835eca68
parent 18903 5fc592d100b5
child 19054 80cbbad08d0c
child 19059 687547192a05
--- 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