package org.jerlang.stdlib.erl_internal; import org.jerlang.erts.erlang.Error; import org.jerlang.type.Atom; import org.jerlang.type.Boolean; import org.jerlang.type.Integer; import org.jerlang.type.List; import org.jerlang.type.Term; public class ErlInternalArithOp { private ErlInternalArithOp() { } public static Term dispatch(List params) { switch (params.length()) { case 2: Atom opName = params.head().toAtom(); params = params.tail(); Integer arity = params.head().toInteger(); return arith_op_2(opName, arity); default: throw Error.badarg; } } /** * Returns `true` if `opName/arity` is an arithmetic operator, otherwise `false`. * * http://www.erlang.org/doc/man/erl_internal.html#arith_op-2 */ public static Term arith_op_2(Atom opName, Integer arity) { switch (opName.toString() + "/" + arity) { case "+/1": case "-/1": case "*/2": case "//2": case "+/2": case "-/2": case "bnot/1": case "div/2": case "rem/2": case "band/2": case "bor/2": case "bxor/2": case "bsl/2": case "bsr/2": return Boolean.am_true; default: return Boolean.am_false; } } }