package com.googlecode.totallylazy.numbers;
public final class ShortOperators implements Operators<Short> {
public static ShortOperators Instance = new ShortOperators();
private ShortOperators() {
}
@Override
public Number absolute(Short value) {
return isNegative(value) ? negate(value) : value ;
}
@Override
public Number negate(Short value) {
if (value == Short.MIN_VALUE) {
return -value;
}
return (short) (-value);
}
@Override
public Number increment(Short value) {
final int result = value + 1;
if (result > Short.MAX_VALUE) {
return result;
} else {
return (short) result;
}
}
@Override
public Number decrement(Short value) {
final int result = value - 1;
if (result < Short.MIN_VALUE) {
return result;
} else {
return (short) result;
}
}
@Override
public boolean isZero(Short value) {
return value == 0;
}
@Override
public boolean isPositive(Short value) {
return value > 0;
}
@Override
public boolean isNegative(Short value) {
return value < 0;
}
@Override
public boolean equalTo(Number x, Number y) {
return x.shortValue() == y.shortValue();
}
@Override
public boolean lessThan(Number x, Number y) {
return x.shortValue() < y.shortValue();
}
@Override
public Number add(Number x, Number y) {
final int result = x.shortValue() + y.shortValue();
if (result <= Short.MAX_VALUE && result >= Short.MIN_VALUE) {
return (short) result;
} else {
return result;
}
}
@Override
public Number multiply(Number x, Number y) {
final int result = x.intValue() * y.intValue();
if (result <= Short.MAX_VALUE && result >= Short.MIN_VALUE) {
return (short) result;
} else {
return result;
}
}
@Override
public Number divide(Number x, Number y) {
return IntegerOperators.Instance.divide(x, y);
}
@Override
public Number quotient(Number x, Number y) {
final int result = x.shortValue() / y.shortValue();
if (result <= Short.MAX_VALUE && result >= Short.MIN_VALUE) {
return (short) result;
} else {
return result;
}
}
@Override
public Number remainder(Number x, Number y) {
final int result = x.shortValue() % y.shortValue();
if (result <= Short.MAX_VALUE && result >= Short.MIN_VALUE) {
return (short) result;
} else {
return result;
}
}
@Override
public Class<Short> forClass() {
return Short.class;
}
@Override
public int priority() {
return -1;
}
}