All Downloads are FREE. Search and download functionalities are using the official Maven repository.

commonMain.it.unibo.tuprolog.solve.SolverFactory.kt Maven / Gradle / Ivy

package it.unibo.tuprolog.solve

import it.unibo.tuprolog.solve.channel.InputChannel
import it.unibo.tuprolog.solve.channel.InputStore
import it.unibo.tuprolog.solve.channel.OutputChannel
import it.unibo.tuprolog.solve.channel.OutputStore
import it.unibo.tuprolog.solve.exception.Warning
import it.unibo.tuprolog.solve.flags.FlagStore
import it.unibo.tuprolog.solve.impl.SolverBuilderImpl
import it.unibo.tuprolog.solve.library.Library
import it.unibo.tuprolog.solve.library.Runtime
import it.unibo.tuprolog.theory.Theory
import it.unibo.tuprolog.unify.Unificator
import kotlin.js.JsName

interface SolverFactory {
    @JsName("newBuilder")
    fun newBuilder(): SolverBuilder = SolverBuilderImpl(this)

    @JsName("defaultRuntime")
    val defaultRuntime: Runtime
        get() = Runtime.empty()

    @JsName("defaultBuiltins")
    val defaultBuiltins: Library

    @JsName("defaultUnificator")
    val defaultUnificator: Unificator
        get() = Unificator.default

    @JsName("defaultFlags")
    val defaultFlags: FlagStore
        get() = FlagStore.DEFAULT

    @JsName("defaultStaticKb")
    val defaultStaticKb: Theory
        get() = Theory.emptyIndexed(defaultUnificator)

    @JsName("defaultDynamicKb")
    val defaultDynamicKb: Theory
        get() = Theory.emptyIndexed(defaultUnificator)

    @JsName("defaultInputChannel")
    val defaultInputChannel: InputChannel
        get() = InputChannel.stdIn()

    @JsName("defaultOutputChannel")
    val defaultOutputChannel: OutputChannel
        get() = OutputChannel.stdOut()

    @JsName("defaultErrorChannel")
    val defaultErrorChannel: OutputChannel
        get() = OutputChannel.stdErr()

    @JsName("defaultWarningsChannel")
    val defaultWarningsChannel: OutputChannel
        get() = OutputChannel.warn()

    @JsName("rawSolverOf")
    fun solverOf(
        unificator: Unificator = defaultUnificator,
        libraries: Runtime = defaultRuntime,
        flags: FlagStore = defaultFlags,
        staticKb: Theory = defaultStaticKb,
        dynamicKb: Theory = defaultDynamicKb,
        inputs: InputStore = InputStore.fromStandard(defaultInputChannel),
        outputs: OutputStore =
            OutputStore.fromStandard(
                defaultOutputChannel,
                defaultErrorChannel,
                defaultWarningsChannel,
            ),
    ): Solver

    @JsName("solverOf")
    fun solverOf(
        unificator: Unificator = defaultUnificator,
        libraries: Runtime = defaultRuntime,
        flags: FlagStore = defaultFlags,
        staticKb: Theory = defaultStaticKb,
        dynamicKb: Theory = defaultDynamicKb,
        stdIn: InputChannel = defaultInputChannel,
        stdOut: OutputChannel = defaultOutputChannel,
        stdErr: OutputChannel = defaultErrorChannel,
        warnings: OutputChannel = defaultWarningsChannel,
    ): Solver

    @JsName("solverWithDefaultBuiltinsAnd")
    fun solverWithDefaultBuiltins(
        unificator: Unificator = defaultUnificator,
        otherLibraries: Runtime = defaultRuntime,
        flags: FlagStore = defaultFlags,
        staticKb: Theory = defaultStaticKb,
        dynamicKb: Theory = defaultDynamicKb,
        stdIn: InputChannel = defaultInputChannel,
        stdOut: OutputChannel = defaultOutputChannel,
        stdErr: OutputChannel = defaultErrorChannel,
        warnings: OutputChannel = defaultWarningsChannel,
    ): Solver =
        solverOf(
            unificator,
            otherLibraries + defaultBuiltins,
            flags,
            staticKb,
            dynamicKb,
            stdIn,
            stdOut,
            stdErr,
            warnings,
        )

    @JsName("mutableSolverOf")
    fun mutableSolverOf(
        unificator: Unificator = defaultUnificator,
        libraries: Runtime = defaultRuntime,
        flags: FlagStore = defaultFlags,
        staticKb: Theory = defaultStaticKb,
        dynamicKb: Theory = defaultDynamicKb,
        stdIn: InputChannel = defaultInputChannel,
        stdOut: OutputChannel = defaultOutputChannel,
        stdErr: OutputChannel = defaultErrorChannel,
        warnings: OutputChannel = defaultWarningsChannel,
    ): MutableSolver

    @JsName("mutableSolverWithDefaultBuiltinsAnd")
    fun mutableSolverWithDefaultBuiltins(
        unificator: Unificator = defaultUnificator,
        otherLibraries: Runtime = defaultRuntime,
        flags: FlagStore = defaultFlags,
        staticKb: Theory = defaultStaticKb,
        dynamicKb: Theory = defaultDynamicKb,
        stdIn: InputChannel = defaultInputChannel,
        stdOut: OutputChannel = defaultOutputChannel,
        stdErr: OutputChannel = defaultErrorChannel,
        warnings: OutputChannel = defaultWarningsChannel,
    ): MutableSolver =
        mutableSolverOf(
            unificator,
            otherLibraries + defaultBuiltins,
            flags,
            staticKb,
            dynamicKb,
            stdIn,
            stdOut,
            stdErr,
            warnings,
        )

    @JsName("rawMutableSolverOf")
    fun mutableSolverOf(
        unificator: Unificator = defaultUnificator,
        libraries: Runtime = defaultRuntime,
        flags: FlagStore = defaultFlags,
        staticKb: Theory = defaultStaticKb,
        dynamicKb: Theory = defaultDynamicKb,
        inputs: InputStore = InputStore.fromStandard(defaultInputChannel),
        outputs: OutputStore =
            OutputStore.fromStandard(
                defaultOutputChannel,
                defaultErrorChannel,
                defaultWarningsChannel,
            ),
    ): MutableSolver
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy