'From Squeak2.9alpha of 21 November 2000 [latest update: #2988] on 29 November 2000 at 3:03:50 pm'! "Change Set: LargeIntegersV1.2Install-sr Date: 29 November 2000 Author: Stephan Rudlof Update: This changesets updates Integer>>anyBitOfMagnitudeFrom:to: to work with LargeIntegers v1.2."! !Integer methodsFor: 'bit manipulation' stamp: 'sr 11/29/2000 14:32'! anyBitOfMagnitudeFrom: start to: stopArg "Tests for any magnitude bits in the interval from start to stopArg." "Primitive fixed in LargeIntegers v1.2. If you have an earlier version comment out the primitive call (using this ST method then)." | magnitude firstDigitIx lastDigitIx rightShift leftShift stop | start < 1 | (stopArg < 1) ifTrue: [^ self error: 'out of range']. magnitude _ self abs. stop _ stopArg min: magnitude highBit. start > stop ifTrue: [^ false]. firstDigitIx _ start - 1 // 8 + 1. lastDigitIx _ stop - 1 // 8 + 1. rightShift _ (start - 1 \\ 8) negated. leftShift _ 7 - (stop - 1 \\ 8). firstDigitIx = lastDigitIx ifTrue: [| digit mask | mask _ (255 bitShift: rightShift negated) bitAnd: (255 bitShift: leftShift negated). digit _ magnitude digitAt: firstDigitIx. ^ (digit bitAnd: mask) ~= 0]. ((magnitude digitAt: firstDigitIx) bitShift: rightShift) ~= 0 ifTrue: [^ true]. firstDigitIx + 1 to: lastDigitIx - 1 do: [:ix | (magnitude digitAt: ix) ~= 0 ifTrue: [^ true]]. (((magnitude digitAt: lastDigitIx) bitShift: leftShift) bitAnd: 255) ~= 0 ifTrue: [^ true]. ^ false! !