From fa83c2072dddf4cdb594d7ce832e59373b5d5b43 Mon Sep 17 00:00:00 2001 From: Victor Date: Sun, 18 Sep 2016 11:46:09 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20getFloat=20=D0=B8=20=D0=B2=D1=8B=D0=BD=D0=B5?= =?UTF-8?q?=D1=81=D0=B5=D0=BD=20=D0=B2=20ValueUtils,=20=D0=B4=D0=BE=D0=B1?= =?UTF-8?q?=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=20int4ToVoid?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/annimon/ownlang/lib/Converters.java | 32 +++++++++++++------ .../com/annimon/ownlang/lib/ValueUtils.java | 10 ++++++ 2 files changed, 32 insertions(+), 10 deletions(-) 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(); + } }