SmallInteger.st
changeset 2431 09f32798910f
parent 2430 cbbf16de1bd7
child 2470 44b8dddd5842
equal deleted inserted replaced
2430:cbbf16de1bd7 2431:09f32798910f
   843 
   843 
   844     INT mask, index, bits;
   844     INT mask, index, bits;
   845 
   845 
   846     bits = __intVal(self);
   846     bits = __intVal(self);
   847     if (bits == 0) {
   847     if (bits == 0) {
   848 	RETURN ( __MKSMALLINT(-1) );
   848         RETURN ( __MKSMALLINT(-1) );
   849     }
   849     }
   850     mask = 1;
   850 
   851     index = 1;
   851     if ((bits & 0xFFFFFF) == 0) {
       
   852         mask = 0x1000000;
       
   853         index = 25;
       
   854     } else {
       
   855         if ((bits & 0xFFFF) == 0) {
       
   856             mask = 0x10000;
       
   857             index = 17;
       
   858         } else {
       
   859             if ((bits & 0xFF) == 0) {
       
   860                 mask = 0x100;
       
   861                 index = 9;
       
   862             } else {
       
   863                 mask = 1;
       
   864                 index = 1;
       
   865             }
       
   866         }
       
   867     }
       
   868 
   852 #ifdef alpha
   869 #ifdef alpha
   853     while (index != 63) {
   870     while (index != 63) {
   854 #else
   871 #else
   855     while (index != 31) {
   872     while (index != 31) {
   856 #endif
   873 #endif
   857 	if (bits & mask) {
   874         if (bits & mask) {
   858 	    RETURN ( __MKSMALLINT(index) );
   875             RETURN ( __MKSMALLINT(index) );
   859 	}
   876         }
   860 	mask = mask << 1;
   877         mask = mask << 1;
   861 	index++;
   878         index++;
   862     }
   879     }
   863     RETURN ( __MKSMALLINT(-1) );
   880     RETURN ( __MKSMALLINT(-1) );
   864 %}
   881 %}
   865     "2r000100 lowBit"
   882     "
   866     "2r010010 lowBit"
   883      2r000100 lowBit
   867     "2r100001 lowBit"
   884      2r010010 lowBit
   868     "0 lowBit"
   885      2r100001 lowBit
       
   886      16r1000 lowBit 
       
   887      16r1000000 lowBit 
       
   888      0 lowBit 
       
   889     "
   869 !
   890 !
   870 
   891 
   871 noMask:anInteger
   892 noMask:anInteger
   872     "return true if no 1-bit in anInteger is 1 in the receiver"
   893     "return true if no 1-bit in anInteger is 1 in the receiver"
   873 
   894 
  2325 ! !
  2346 ! !
  2326 
  2347 
  2327 !SmallInteger class methodsFor:'documentation'!
  2348 !SmallInteger class methodsFor:'documentation'!
  2328 
  2349 
  2329 version
  2350 version
  2330     ^ '$Header: /cvs/stx/stx/libbasic/SmallInteger.st,v 1.68 1997-03-01 15:58:34 cg Exp $'
  2351     ^ '$Header: /cvs/stx/stx/libbasic/SmallInteger.st,v 1.69 1997-03-01 16:02:45 cg Exp $'
  2331 ! !
  2352 ! !