package com.googlecode.aviator.runtime.function.system;
import java.util.Map;
import com.googlecode.aviator.runtime.function.AbstractFunction;
import com.googlecode.aviator.runtime.type.AviatorLong;
import com.googlecode.aviator.runtime.type.AviatorObject;
/**
* Cast value to long
*
* @author dennis
* @Date 2011-5-18
* @since 1.1.1
*
*/
public class LongFunction extends AbstractFunction {
@Override
public AviatorObject call(Map<String, Object> env, AviatorObject arg1) {
switch (arg1.getAviatorType()) {
case Boolean:
return AviatorLong.valueOf(arg1.booleanValue(env) ? 1 : 0);
case JavaType:
Object obj = arg1.getValue(env);
if (obj instanceof Number) {
return AviatorLong.valueOf(((Number) obj).longValue());
}
else if (obj instanceof String) {
return AviatorLong.valueOf(Long.valueOf((String) obj));
}
else if (obj instanceof Character) {
return AviatorLong.valueOf(Long.valueOf(String.valueOf(obj)));
}
else {
throw new ClassCastException("Could not cast " + obj.getClass().getName() + " to long");
}
case String:
return AviatorLong.valueOf(Long.valueOf((String) arg1.getValue(env)));
case Long:
case Double:
return AviatorLong.valueOf(((Number) arg1.getValue(env)).longValue());
default:
throw new ClassCastException("Could not cast " + arg1 + " to long");
}
}
public String getName() {
return "long";
}
}