-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathNumbers.java
82 lines (78 loc) · 3.49 KB
/
Numbers.java
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
/*
* Copyright (c) 2015-present, Parse, LLC.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
package com.parse;
/**
* Static utility methods pertaining to {@link Number} instances.
*/
class Numbers {
/**
* Add two {@link Number} instances.
*/
/* package */
static Number add(Number first, Number second) {
if (first instanceof Double || second instanceof Double) {
return first.doubleValue() + second.doubleValue();
} else if (first instanceof Float || second instanceof Float) {
return first.floatValue() + second.floatValue();
} else if (first instanceof Long || second instanceof Long) {
return first.longValue() + second.longValue();
} else if (first instanceof Integer || second instanceof Integer) {
return first.intValue() + second.intValue();
} else if (first instanceof Short || second instanceof Short) {
return first.shortValue() + second.shortValue();
} else if (first instanceof Byte || second instanceof Byte) {
return first.byteValue() + second.byteValue();
} else {
throw new RuntimeException("Unknown number type.");
}
}
/**
* Subtract two {@link Number} instances.
*/
/* package */
static Number subtract(Number first, Number second) {
if (first instanceof Double || second instanceof Double) {
return first.doubleValue() - second.doubleValue();
} else if (first instanceof Float || second instanceof Float) {
return first.floatValue() - second.floatValue();
} else if (first instanceof Long || second instanceof Long) {
return first.longValue() - second.longValue();
} else if (first instanceof Integer || second instanceof Integer) {
return first.intValue() - second.intValue();
} else if (first instanceof Short || second instanceof Short) {
return first.shortValue() - second.shortValue();
} else if (first instanceof Byte || second instanceof Byte) {
return first.byteValue() - second.byteValue();
} else {
throw new RuntimeException("Unknown number type.");
}
}
/**
* Compare two {@link Number} instances.
*/
/* package */
static int compare(Number first, Number second) {
if (first instanceof Double || second instanceof Double) {
return (int) Math.signum(first.doubleValue() - second.doubleValue());
} else if (first instanceof Float || second instanceof Float) {
return (int) Math.signum(first.floatValue() - second.floatValue());
} else if (first instanceof Long || second instanceof Long) {
long diff = first.longValue() - second.longValue();
return (diff < 0) ? -1 : ((diff > 0) ? 1 : 0);
} else if (first instanceof Integer || second instanceof Integer) {
return first.intValue() - second.intValue();
} else if (first instanceof Short || second instanceof Short) {
return first.shortValue() - second.shortValue();
} else if (first instanceof Byte || second instanceof Byte) {
return first.byteValue() - second.byteValue();
} else {
throw new RuntimeException("Unknown number type.");
}
}
}