Class Integer Number Methods Integer , value " used to make long integer constants " ^ self * 1000 + value ] Methods Integer isShortInteger ^ true ] Methods Integer new ^ smalltalk error: 'cannot create integers with new' ] Methods Integer printString ^ self asString ] Methods Integer truncated ^ self ] Methods Integer + value | r | ^ (self isShortInteger and: [value isShortInteger]) ifTrue: [ r <- <60 self value>. "primitive will return nil on overflow" r notNil ifTrue: [ r ] ifFalse: [ self asLongInteger + value asLongInteger ]] ifFalse: [ super + value ] ] Methods Integer asFraction ^ Fraction new ; with: self over: 1 ] Methods Integer bitShift: value ^ (self isShortInteger and: [value isShortInteger]) ifTrue: [ <79 self value > ] ifFalse: [ smalltalk error: 'argument to bit operation must be integer'] ] Methods Integer radix: base | sa text | " return a printed representation of self in given base" sa <- self abs. text <- (sa \\ base) asDigit asString. ^ (sa < base) ifTrue: [ (self negative) ifTrue: [ '-' , text ] ifFalse: [ text ]] ifFalse: [ ((self quo: base) radix: base), text ] ] Methods Integer timesRepeat: aBlock | i | " use while, which is optimized, not to:, which is not" i <- 0. [ i < self ] whileTrue: [ aBlock value. i <- i + 1] ] Methods Integer = value ^ (self isShortInteger and: [value isShortInteger]) ifTrue: [ self == value ] ifFalse: [ super = value ] ] Methods Integer asString ^ self radix: 10 ] Methods Integer even ^ (self rem: 2) = 0 ] Methods Integer lcm: value ^ (self quo: (self gcd: value)) * value ] Methods Integer odd ^ (self rem: 2) ~= 0 ] Methods Integer - value | r | ^ (self isShortInteger and: [value isShortInteger]) ifTrue: [ r <- <61 self value>. "primitive will return nil on overflow" r notNil ifTrue: [ r ] ifFalse: [ self asLongInteger - value asLongInteger ]] ifFalse: [ super - value ] ] Methods Integer bitAnd: value ^ (self isShortInteger and: [value isShortInteger]) ifTrue: [ <71 self value > ] ifFalse: [ smalltalk error: 'arguments to bit operation must be short integer'] ] Methods Integer factorial ^ (2 to: self) inject: 1 into: [:x :y | x * y ] ] Methods Integer generality " generality value - used in mixed class arithmetic " ^ 2 ] Methods Integer asCharacter ^ Char new; value: self ] Methods Integer asLongInteger | newList i | newList <- List new. i = 0 ifTrue: [ newList add: 0 ] ifFalse: [ i <- self abs. [ i ~= 0 ] whileTrue: [ newList addLast: (i rem: 100). i <- i quo: 100 ] ]. ^ LongInteger new; sign: i negative digits: newList asArray ] Methods Integer bitOr: value ^ (self bitXor: value) bitXor: (self bitAnd: value) ] Methods Integer bitXor: value ^ (self isShortInteger and: [value isShortInteger]) ifTrue: [ <72 self value > ] ifFalse: [ smalltalk error: 'argument to bit operation must be integer'] ] Methods Integer * value | r | ^ (self isShortInteger and: [value isShortInteger]) ifTrue: [ r <- <68 self value>. "primitive will return nil on overflow" r notNil ifTrue: [ r ] ifFalse: [ self asLongInteger * value asLongInteger ]] ifFalse: [ super * value ] ] Methods Integer anyMask: value " see if any bits in argument are on" ^ 0 ~= (self bitAnd: value) ] Methods Integer < value ^ (self isShortInteger and: [value isShortInteger]) ifTrue: [ <62 self value> ] ifFalse: [ super < value ] ] Methods Integer allMask: value " see if all bits in argument are on" ^ value = (self bitAnd: value) ] Methods Integer bitAt: value ^ (self bitShift: 1 - value) bitAnd: 1 ] Methods Integer gcd: value (value = 0) ifTrue: [ ^ self ]. (self negative) ifTrue: [ ^ self negated gcd: value ]. (value negative) ifTrue: [ ^ self gcd: value negated ]. (value > self) ifTrue: [ ^ value gcd: self ]. ^ value gcd: (self rem: value) ] Methods Integer bitInvert "invert all bits in self" ^ self bitXor: -1 ] Methods Integer quo: value | r | ^ (self isShortInteger and: [value isShortInteger]) ifTrue: [ r <- <69 self value>. (r isNil) ifTrue: [ smalltalk error: 'quo: or rem: with argument 0'] ifFalse: [ r ]] ifFalse: [ ^ super quo: value ] ] Methods Integer > value ^ (self isShortInteger and: [value isShortInteger]) ifTrue: [ <63 self value> ] ifFalse: [ super > value ] ] Methods Integer / value | t b | value = 0 ifTrue: [ ^ smalltalk error: 'division by zero']. value isInteger ifTrue: [ b <- self gcd: value . t <- self quo: b. b <- value quo: b. b negative ifTrue: [ t <- t negated. b <- b negated ]. (b = 1) ifTrue: [ ^ t ]. ^ Fraction new; with: t over: b ] ifFalse: [ ^ super / value ] ] Methods Integer asDigit " return as character digit " (self >= 0) ifTrue: [ (self <= 9) ifTrue: [ ^ (self + $0 asInteger) asCharacter ]. (self < 36) ifTrue: [ ^ (self + $A asInteger - 10) asCharacter ] ]. ^ smalltalk error: 'illegal conversion, integer to digit' ] Methods Integer asFloat " should be redefined by any subclasses " self isShortInteger ifTrue: [ ^ <51 self> ] ]