/*
* Copyright (c) [2016] [ <ether.camp> ]
* This file is part of the ethereumJ library.
*
* The ethereumJ library is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* The ethereumJ library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with the ethereumJ library. If not, see <http://www.gnu.org/licenses/>.
*/
package org.ethereum.util;
import org.ethereum.core.Repository;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.math.RoundingMode;
public class BIUtil {
/**
* @param value - not null
* @return true - if the param is zero
*/
public static boolean isZero(BigInteger value){
return value.compareTo(BigInteger.ZERO) == 0;
}
/**
* @param valueA - not null
* @param valueB - not null
* @return true - if the valueA is equal to valueB is zero
*/
public static boolean isEqual(BigInteger valueA, BigInteger valueB){
return valueA.compareTo(valueB) == 0;
}
/**
* @param valueA - not null
* @param valueB - not null
* @return true - if the valueA is not equal to valueB is zero
*/
public static boolean isNotEqual(BigInteger valueA, BigInteger valueB){
return !isEqual(valueA, valueB);
}
/**
* @param valueA - not null
* @param valueB - not null
* @return true - if the valueA is less than valueB is zero
*/
public static boolean isLessThan(BigInteger valueA, BigInteger valueB){
return valueA.compareTo(valueB) < 0;
}
/**
* @param valueA - not null
* @param valueB - not null
* @return true - if the valueA is more than valueB is zero
*/
public static boolean isMoreThan(BigInteger valueA, BigInteger valueB){
return valueA.compareTo(valueB) > 0;
}
/**
* @param valueA - not null
* @param valueB - not null
* @return sum - valueA + valueB
*/
public static BigInteger sum(BigInteger valueA, BigInteger valueB){
return valueA.add(valueB);
}
/**
* @param data = not null
* @return new positive BigInteger
*/
public static BigInteger toBI(byte[] data){
return new BigInteger(1, data);
}
/**
* @param data = not null
* @return new positive BigInteger
*/
public static BigInteger toBI(long data){
return BigInteger.valueOf(data);
}
public static boolean isPositive(BigInteger value){
return value.signum() > 0;
}
public static boolean isCovers(BigInteger covers, BigInteger value){
return !isNotCovers(covers, value);
}
public static boolean isNotCovers(BigInteger covers, BigInteger value){
return covers.compareTo(value) < 0;
}
public static void transfer(Repository repository, byte[] fromAddr, byte[] toAddr, BigInteger value){
repository.addBalance(fromAddr, value.negate());
repository.addBalance(toAddr, value);
}
public static boolean exitLong(BigInteger value){
return (value.compareTo(new BigInteger(Long.MAX_VALUE + ""))) > -1;
}
public static boolean isIn20PercentRange(BigInteger first, BigInteger second) {
BigInteger five = BigInteger.valueOf(5);
BigInteger limit = first.add(first.divide(five));
return !isMoreThan(second, limit);
}
public static BigInteger max(BigInteger first, BigInteger second) {
return first.compareTo(second) < 0 ? second : first;
}
}