Coverage Summary for Class: Arg2pPrologSolverFactory (it.unibo.tuprolog.argumentation.core.engine)
| Class |
Class, %
|
Method, %
|
Branch, %
|
Line, %
|
Instruction, %
|
| Arg2pPrologSolverFactory |
100%
(1/1)
|
80%
(4/5)
|
|
80%
(4/5)
|
77.4%
(48/62)
|
// Forked from 2p-kt's solve-prolog 3.0.2 (Apache License 2.0): see README.md in this package
package it.unibo.tuprolog.argumentation.core.engine
import it.unibo.tuprolog.argumentation.core.engine.stdlib.DefaultBuiltins
import it.unibo.tuprolog.solve.MutableSolver
import it.unibo.tuprolog.solve.Solver
import it.unibo.tuprolog.solve.SolverFactory
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.library.Library
import it.unibo.tuprolog.solve.library.Runtime
import it.unibo.tuprolog.theory.Theory
import it.unibo.tuprolog.unify.Unificator
import kotlin.js.JsExport
/**
* The [SolverFactory] of the engine of arg2p, the fork of 2P-Kt's ISO-standard, SLD-NF resolution engine
* (`:solve-prolog`) that inlines module calls and keeps the bindings of the goals left to solve (see README.md in this
* package). The solvers of arg2p are built with it (Arg2pSolverFactory); it is public for the tools building their own.
*
* Every [Solver]/[MutableSolver] produced here resolves goals with the explicit, inspectable finite-state
* machine documented under `it.unibo.tuprolog.argumentation.core.engine.fsm` (see [PrologExecutionContext] and
* [SolutionIterator] for the two pieces that make it tick), rather than via the host language's call stack.
*
* @see AbstractPrologSolver
*/
@Suppress("NON_EXPORTABLE_TYPE")
@JsExport
object Arg2pPrologSolverFactory : SolverFactory {
override val defaultBuiltins: Library
get() = DefaultBuiltins
override fun solverOf(
unificator: Unificator,
libraries: Runtime,
flags: FlagStore,
staticKb: Theory,
dynamicKb: Theory,
inputs: InputStore,
outputs: OutputStore,
): Solver = PrologSolver(unificator, libraries, flags, staticKb, dynamicKb, inputs, outputs)
override fun solverOf(
unificator: Unificator,
libraries: Runtime,
flags: FlagStore,
staticKb: Theory,
dynamicKb: Theory,
stdIn: InputChannel<String>,
stdOut: OutputChannel<String>,
stdErr: OutputChannel<String>,
warnings: OutputChannel<Warning>,
): Solver = PrologSolver(unificator, libraries, flags, staticKb, dynamicKb, stdIn, stdOut, stdErr, warnings)
override fun mutableSolverOf(
unificator: Unificator,
libraries: Runtime,
flags: FlagStore,
staticKb: Theory,
dynamicKb: Theory,
stdIn: InputChannel<String>,
stdOut: OutputChannel<String>,
stdErr: OutputChannel<String>,
warnings: OutputChannel<Warning>,
): MutableSolver = MutablePrologSolver(unificator, libraries, flags, staticKb, dynamicKb, stdIn, stdOut, stdErr, warnings)
override fun mutableSolverOf(
unificator: Unificator,
libraries: Runtime,
flags: FlagStore,
staticKb: Theory,
dynamicKb: Theory,
inputs: InputStore,
outputs: OutputStore,
): MutableSolver = MutablePrologSolver(unificator, libraries, flags, staticKb, dynamicKb, inputs, outputs)
}