package com.bergerkiller.bukkit.common.bases.mutable;
import com.bergerkiller.bukkit.common.utils.MathUtil;
public abstract class IntegerAbstract {
/**
* Gets the value
*
* @return value
*/
public abstract int get();
/**
* Sets the value
*
* @param value to set to
* @return this instance
*/
public abstract IntegerAbstract set(int value);
public int squared() {
final int value = get();
return value * value;
}
public int abs() {
return Math.abs(get());
}
/**
* Sets the value to 0.0
*
* @return this instance
*/
public IntegerAbstract setZero() {
return set(0);
}
public int chunk() {
return MathUtil.toChunk(get());
}
public IntegerAbstract clamp(int limit) {
return set(getClamped(limit));
}
public IntegerAbstract clamp(int min, int max) {
return set(getClamped(min, max));
}
public int getClamped(int limit) {
return MathUtil.clamp(get(), limit);
}
public int getClamped(int min, int max) {
return MathUtil.clamp(get(), min, max);
}
public IntegerAbstract add(int value) {
return set(get() + value);
}
public IntegerAbstract subtract(int value) {
return set(get() - value);
}
public IntegerAbstract multiply(int value) {
return set(get() * value);
}
public IntegerAbstract divide(int value) {
return set(get() / value);
}
/**
* Checks whether the modulus of the current value equals 0.
* This is the case when the current value is dividable by the modulus specified,
* and no remainder is left. For example:<br>
* - {12}.isMod(6) == True<br>
* - {11}.isMod(2) == False<br>
* - {0}.isMod(6) == True<br><br>
*
* This functionality can be used to perform something on an interval using a given time.
* For example, {timesecond}.isMod(60) would trigger whenever a new minute is passed.
*
* @param modulus to check
* @return True if dividable without remainder, False if not
*/
public boolean isMod(int modulus) {
return (get() % modulus) == 0;
}
public boolean equals(int value) {
return get() == value;
}
@Override
public boolean equals(Object value) {
if (value instanceof Number) {
return equals(((Number) value).intValue());
} else if (value instanceof DoubleAbstract) {
return equals(((IntegerAbstract) value).get());
} else {
return false;
}
}
@Override
public String toString() {
return Integer.toString(get());
}
}