#REFACTORING
authorClaus Gittinger <cg@exept.de>
Mon, 25 Jan 2016 22:09:42 +0100
changeset 19102 3ba85ef22c95
parent 19101 8ccbefbc944d
child 19104 e7c5169d9ab7
child 19106 cfeb2d0d1ee4
#REFACTORING class: LargeInteger changed (tuned): #even #odd
LargeInteger.st
--- a/LargeInteger.st	Mon Jan 25 22:04:02 2016 +0100
+++ b/LargeInteger.st	Mon Jan 25 22:09:42 2016 +0100
@@ -5547,12 +5547,28 @@
 even
     "return true if the receiver is even"
 
-%{
+%{  /* NOCONTEXT */
 #ifdef __SCHTEAM__
     return context._RETURN( ((STLargeInteger)self).isEven() ? STObject.True : STObject.False);
+#else
+    OBJ digits = __INST(digitByteArray);
+    
+    if (__isByteArray(digits)){
+        if (__byteArraySize(digits) > 0) {
+            unsigned char b = __ByteArrayInstPtr(digits)->ba_element[0];
+            RETURN( (b & 1) ? false : true );
+        }
+    }    
 #endif
 %}.
     ^ (digitByteArray at:1) even
+
+    "
+     16r100000000000000000001 even
+     16r100000000000000000001 odd
+     16r100000000000000000000 even
+     16r100000000000000000000 odd
+    "
 !
 
 negative
@@ -5569,9 +5585,18 @@
 odd
     "return true if the receiver is odd"
 
-%{
+%{  /* NOCONTEXT */
 #ifdef __SCHTEAM__
     return context._RETURN( ((STLargeInteger)self).isEven() ? STObject.False : STObject.True);
+#else
+    OBJ digits = __INST(digitByteArray);
+
+    if (__isByteArray(digits)){
+        if (__byteArraySize(digits) > 0) {
+            unsigned char b = __ByteArrayInstPtr(digits)->ba_element[0];
+            RETURN( (b & 1) ? true : false );
+        }
+    }    
 #endif
 %}.
     ^ (digitByteArray at:1) odd