diff --git a/src/main/java/com/annimon/ownlang/lib/Converters.java b/src/main/java/com/annimon/ownlang/lib/Converters.java index 9a91825..fbef1d5 100644 --- a/src/main/java/com/annimon/ownlang/lib/Converters.java +++ b/src/main/java/com/annimon/ownlang/lib/Converters.java @@ -1,5 +1,7 @@ package com.annimon.ownlang.lib; +import static com.annimon.ownlang.lib.ValueUtils.getFloatNumber; + /** * Wrapper functions and interfaces. */ @@ -41,6 +43,10 @@ public final class Converters { void apply(int i); } + public interface Int4ToVoidFunction { + void apply(int i1, int i2, int i3, int i4); + } + public interface FloatToVoidFunction { void apply(float f); } @@ -124,10 +130,21 @@ public final class Converters { }); } + public static FunctionValue int4ToVoid(Int4ToVoidFunction f) { + return new FunctionValue(args -> { + Arguments.check(4, args.length); + f.apply(args[0].asInt(), + args[1].asInt(), + args[2].asInt(), + args[3].asInt()); + return NumberValue.ZERO; + }); + } + public static FunctionValue floatToVoid(FloatToVoidFunction f) { return new FunctionValue(args -> { Arguments.check(1, args.length); - f.apply(getNumber(args[0]).floatValue()); + f.apply(getFloatNumber(args[0])); return NumberValue.ZERO; }); } @@ -135,10 +152,10 @@ public final class Converters { public static FunctionValue float4ToVoid(Float4ToVoidFunction f) { return new FunctionValue(args -> { Arguments.check(4, args.length); - f.apply(getNumber(args[0]).floatValue(), - getNumber(args[1]).floatValue(), - getNumber(args[2]).floatValue(), - getNumber(args[3]).floatValue()); + f.apply(getFloatNumber(args[0]), + getFloatNumber(args[1]), + getFloatNumber(args[2]), + getFloatNumber(args[3])); return NumberValue.ZERO; }); } @@ -175,9 +192,4 @@ public final class Converters { return NumberValue.ZERO; }); } - - public static Number getNumber(Value value) { - if (value.type() == Types.NUMBER) return ((NumberValue) value).raw(); - return value.asInt(); - } } diff --git a/src/main/java/com/annimon/ownlang/lib/ValueUtils.java b/src/main/java/com/annimon/ownlang/lib/ValueUtils.java index 90feac5..0e879fa 100644 --- a/src/main/java/com/annimon/ownlang/lib/ValueUtils.java +++ b/src/main/java/com/annimon/ownlang/lib/ValueUtils.java @@ -80,4 +80,14 @@ public final class ValueUtils { } return result; } + + public static Number getNumber(Value value) { + if (value.type() == Types.NUMBER) return ((NumberValue) value).raw(); + return value.asInt(); + } + + public static float getFloatNumber(Value value) { + if (value.type() == Types.NUMBER) return ((NumberValue) value).raw().floatValue(); + return (float) value.asNumber(); + } }