1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
package java.lang
import scala.scalajs.js
/* This is a hijacked class. Its instances are primitive numbers.
* Constructors are not emitted.
*/
final class Integer private () extends Number with Comparable[Integer] {
def this(value: scala.Int) = this()
def this(s: String) = this()
@inline def intValue(): scala.Int =
this.asInstanceOf[scala.Int]
@inline override def byteValue(): scala.Byte = intValue.toByte
@inline override def shortValue(): scala.Short = intValue.toShort
@inline def longValue(): scala.Long = intValue.toLong
@inline def floatValue(): scala.Float = intValue.toFloat
@inline def doubleValue(): scala.Double = intValue.toDouble
@inline override def equals(that: Any): scala.Boolean =
this eq that.asInstanceOf[AnyRef]
@inline override def hashCode(): Int =
intValue
@inline override def compareTo(that: Integer): Int =
Integer.compare(intValue, that.intValue)
@inline override def toString(): String =
Integer.toString(intValue)
}
object Integer {
final val TYPE = classOf[scala.Int]
final val MIN_VALUE = -2147483648
final val MAX_VALUE = 2147483647
final val SIZE = 32
@inline def valueOf(intValue: scala.Int): Integer = new Integer(intValue)
@inline def valueOf(s: String): Integer = valueOf(parseInt(s))
@inline def valueOf(s: String, radix: Int): Integer =
valueOf(parseInt(s, radix))
@inline def parseInt(s: String): scala.Int = parseInt(s, 10)
def parseInt(s: String, radix: scala.Int): scala.Int = {
def fail = throw new NumberFormatException(s"""For input string: "$s"""")
if (s == null || s.size == 0 ||
radix < Character.MIN_RADIX ||
radix > Character.MAX_RADIX)
fail
else {
var i = if (s(0) == '-' || s(0) == '+') 1 else 0
// JavaDoc says: We need at least one digit
if (s.size <= i) fail
else {
// Check each character for validity
while (i < s.size) {
if (Character.digit(s(i), radix) < 0) fail
i += 1
}
val res = js.parseInt(s, radix)
if (js.isNaN(res) || res > MAX_VALUE || res < MIN_VALUE)
fail
else
res.toInt
}
}
}
@inline def toString(i: scala.Int): String =
"" + i
@inline def compare(x: scala.Int, y: scala.Int): scala.Int =
if (x == y) 0 else if (x < y) -1 else 1
def bitCount(i: scala.Int): scala.Int = {
// See http://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetParallel
// The implicit casts to 32-bit ints due to binary ops make this work in JS too
val t1 = i - ((i >> 1) & 0x55555555)
val t2 = (t1 & 0x33333333) + ((t1 >> 2) & 0x33333333)
((t2 + (t2 >> 4) & 0xF0F0F0F) * 0x1010101) >> 24
}
def reverseBytes(i: scala.Int): scala.Int = {
val byte3 = i >>> 24
val byte2 = (i >>> 8) & 0xFF00
val byte1 = (i << 8) & 0xFF0000
val byte0 = (i << 24)
byte0 | byte1 | byte2 | byte3
}
def rotateLeft(i: scala.Int, distance: scala.Int): scala.Int =
(i << distance) | (i >>> -distance)
def rotateRight(i: scala.Int, distance: scala.Int): scala.Int =
(i >>> distance) | (i << -distance)
@inline def signum(i: scala.Int): scala.Int =
if (i == 0) 0 else if (i < 0) -1 else 1
def numberOfLeadingZeros(i: scala.Int): scala.Int = {
// See http://aggregate.org/MAGIC/#Leading%20Zero%20Count
var x = i
x |= (x >>> 1)
x |= (x >>> 2)
x |= (x >>> 4)
x |= (x >>> 8)
x |= (x >>> 16)
32 - bitCount(x)
}
def numberOfTrailingZeros(i: scala.Int): scala.Int =
// See http://aggregate.org/MAGIC/#Trailing%20Zero%20Count
bitCount((i & -i) - 1)
def toBinaryString(i: scala.Int): String = toStringBase(i, 2)
def toHexString(i: scala.Int): String = toStringBase(i, 16)
def toOctalString(i: scala.Int): String = toStringBase(i, 8)
@inline private[this] def toStringBase(i: scala.Int, base: scala.Int): String =
((i: js.prim.Number) >>> 0).toString(base)
}
|