package com.spun.util.parser;
import org.lambda.query.Query;
import com.spun.util.NumberUtils;
public class TemplateNumberUtils
{
public static TemplateNumberUtils INSTANCE = new TemplateNumberUtils();
/************************************************************************/
private TemplateNumberUtils()
{
}
public static boolean isZero(double d)
{
return isZero(d, 0.005);
}
/***********************************************************************/
public static boolean isZero(Number d)
{
return d == null || isZero(d.doubleValue(), 0.005);
}
/***********************************************************************/
public static int asInt(Number d)
{
return d == null ? 0 : d.intValue();
}
/***********************************************************************/
public static boolean isZero(double d, double delta)
{
return NumberUtils.equals(0, d, delta);
}
/***********************************************************************/
private int getScaling(double have, double max, double scale)
{
if (max == 0)
{
throw new Error("Maximum cannot be zero");
}
else
{
return (int)((have * scale) / max);
}
}
/***********************************************************************/
public int getScaling(Integer have, Integer max, Integer scale)
{
return getScaling(have.doubleValue(), max.doubleValue(), scale.doubleValue());
}
/***********************************************************************/
public static double doArithmetic(int arg1, String operation, int arg2)
{
return doArithmetic(new String[]{"" + arg1, operation, "" + arg2});
}
/***********************************************************************/
public static double doArithmetic(String[] params)
{
if (params == null || params.length == 0) { return 0.00; }
double totalNumber = 0;
double currentNumber = 0;
char operator = '+';
for (int i = 0; i < params.length; i++)
{
if (i % 2 == 0)
{
currentNumber = NumberUtils.load(params[i], 0.00);
switch (operator)
{
case '+' :
totalNumber = totalNumber + currentNumber;
break;
case '-' :
totalNumber = totalNumber - currentNumber;
break;
case '*' :
totalNumber = totalNumber * currentNumber;
break;
case '/' :
totalNumber = totalNumber / currentNumber;
break;
case '%' :
totalNumber = totalNumber % currentNumber;
break;
default :
throw new Error("Unknown arithmetic operator " + operator);
}
}
else
{
operator = params[i].charAt(0);
}
}
return totalNumber;
}
/************************************************************************/
/************************************************************************/
public static TemplateDouble max(Number... numbers)
{
return new TemplateDouble(Query.max(numbers));
}
public static TemplateDouble max(Number n1, Number n2, Number n3)
{
return max(new Number[]{n1,n2,n3});
}
}