80 lines
3.2 KiB
Java
80 lines
3.2 KiB
Java
/*
|
|
* 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.
|
|
*/
|
|
/** package */ 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.");
|
|
}
|
|
}
|
|
}
|