Introduce some new standard library modules

This commit is contained in:
2020-03-14 17:07:04 +01:00
parent 8ee3195bef
commit 5dd703682a
13 changed files with 229 additions and 2 deletions

View File

@@ -0,0 +1,10 @@
package io.smnp.ext
import io.smnp.ext.function.ModuloFunction
import io.smnp.ext.function.RangeFunction
import org.pf4j.Extension
@Extension
class MathModule : NativeModuleProvider("smnp.math") {
override fun functions() = listOf(ModuloFunction(), RangeFunction())
}

View File

@@ -0,0 +1,16 @@
package io.smnp.ext.function
import io.smnp.callable.function.Function
import io.smnp.callable.function.FunctionDefinitionTool
import io.smnp.callable.signature.Signature.Companion.simple
import io.smnp.type.enumeration.DataType.INT
import io.smnp.type.matcher.Matcher.Companion.ofType
import io.smnp.type.model.Value
class ModuloFunction : Function("mod") {
override fun define(new: FunctionDefinitionTool) {
new function simple(ofType(INT), ofType(INT)) body { _, (a, b) ->
Value.int(a.value as Int % b.value as Int)
}
}
}

View File

@@ -0,0 +1,16 @@
package io.smnp.ext.function
import io.smnp.callable.function.Function
import io.smnp.callable.function.FunctionDefinitionTool
import io.smnp.callable.signature.Signature.Companion.simple
import io.smnp.type.enumeration.DataType.INT
import io.smnp.type.matcher.Matcher.Companion.ofType
import io.smnp.type.model.Value
class RangeFunction : Function("range") {
override fun define(new: FunctionDefinitionTool) {
new function simple(ofType(INT), ofType(INT)) body { _, (begin, end) ->
Value.list(IntRange(begin.value as Int, end.value as Int).map { Value.int(it) })
}
}
}