1
0
mirror of https://github.com/DanilaFe/abacus synced 2024-11-17 08:03:09 -08:00

Convert Applicable interfaces into Kotlin.

This commit is contained in:
Danila Fedorin 2017-08-25 16:07:23 -07:00
parent ca2681cc21
commit 5b1a48c02e
6 changed files with 30 additions and 26 deletions

View File

@ -1,5 +1,6 @@
package org.nwapw.abacus.function package org.nwapw.abacus.function
import org.nwapw.abacus.function.applicable.Applicable
import org.nwapw.abacus.number.NumberInterface import org.nwapw.abacus.number.NumberInterface
/** /**

View File

@ -1,5 +1,6 @@
package org.nwapw.abacus.function package org.nwapw.abacus.function
import org.nwapw.abacus.function.applicable.Applicable
import org.nwapw.abacus.number.NumberInterface import org.nwapw.abacus.number.NumberInterface
/** /**

View File

@ -1,5 +1,6 @@
package org.nwapw.abacus.function package org.nwapw.abacus.function
import org.nwapw.abacus.function.applicable.ReducerApplicable
import org.nwapw.abacus.number.NumberInterface import org.nwapw.abacus.number.NumberInterface
import org.nwapw.abacus.tree.TreeNode import org.nwapw.abacus.tree.TreeNode

View File

@ -1,5 +1,6 @@
package org.nwapw.abacus.function package org.nwapw.abacus.function
import org.nwapw.abacus.function.applicable.ReducerApplicable
import org.nwapw.abacus.number.NumberInterface import org.nwapw.abacus.number.NumberInterface
import javax.swing.tree.TreeNode import javax.swing.tree.TreeNode

View File

@ -1,27 +1,28 @@
package org.nwapw.abacus.function; package org.nwapw.abacus.function.applicable
/** /**
* A class that represents something that can be applied to one or more * A class that can be applied to arguments.
*
* Applicable is a class that represents something that can be applied to one or more
* arguments of the same type, and returns a single value from that application. * arguments of the same type, and returns a single value from that application.
* @param <T> the type of the parameters passed to this applicable. * @param <T> the type of the parameters passed to this applicable.
* @param <O> the return type of the applicable. * @param <O> the return type of the applicable.
*/ */
public interface Applicable<T, O> { interface Applicable<in T: Any, out O: Any> {
/** /**
* Checks if the given applicable can be used with the given parameters. * Checks if the given applicable can be used with the given parameters.
* @param params the parameter array to verify for compatibility. * @param params the parameter array to verify for compatibility.
* @return whether the array can be used with applyInternal. * @return whether the array can be used with applyInternal.
*/ */
boolean matchesParams(T[] params); fun matchesParams(params: Array<out T>): Boolean
/** /**
* Applies the applicable object to the given parameters, * Applies the applicable object to the given parameters,
* without checking for compatibility. * without checking for compatibility.
* @param params the parameters to apply to. * @param params the parameters to apply to.
* @return the result of the application. * @return the result of the application.
*/ */
O applyInternal(T[] params); fun applyInternal(params: Array<out T>): O?
/** /**
* If the parameters can be used with this applicable, returns * If the parameters can be used with this applicable, returns
@ -30,9 +31,9 @@ public interface Applicable<T, O> {
* @param params the parameters to apply to. * @param params the parameters to apply to.
* @return the result of the operation, or null if parameters do not match. * @return the result of the operation, or null if parameters do not match.
*/ */
default O apply(T... params){ fun apply(vararg params: T): O? {
if(!matchesParams(params)) return null; if(!matchesParams(params)) return null
return applyInternal(params); return applyInternal(params)
} }
} }

View File

@ -1,24 +1,24 @@
package org.nwapw.abacus.function; package org.nwapw.abacus.function.applicable
import org.nwapw.abacus.tree.Reducer; import org.nwapw.abacus.tree.Reducer
/** /**
* A slightly more specific Applicable that requires a reducer * Applicable that requires a reducer.
*
* ReducerApplicable slightly more specific Applicable that requires a reducer
* to be passed to it along with the parameters. * to be passed to it along with the parameters.
* @param <T> the type of the input arguments. * @param <T> the type of the input arguments.
* @param <O> the return type of the application. * @param <O> the return type of the application.
* @param <R> the required type of the reducer. * @param <R> the required type of the reducer.
*/ */
public interface ReducerApplicable<T, O, R> extends Applicable<T, O> { interface ReducerApplicable<in T: Any, out O: Any, in R: Any> : Applicable<T, O> {
@Override override fun applyInternal(params: Array<out T>): O? {
default O applyInternal(T[] params) { return null
return null;
} }
@Override override fun apply(vararg params: T): O? {
default O apply(T... params) { return null
return null;
} }
/** /**
@ -27,8 +27,7 @@ public interface ReducerApplicable<T, O, R> extends Applicable<T, O> {
* @param args the arguments to apply to. * @param args the arguments to apply to.
* @return the result of the application. * @return the result of the application.
*/ */
O applyWithReducerInternal(Reducer<R> reducer, T[] args); fun applyWithReducerInternal(reducer: Reducer<R>, params: Array<out T>): O?
/** /**
* Applies this applicable to the given arguments, and reducer, * Applies this applicable to the given arguments, and reducer,
* if the arguments and reducer are compatible with this applicable. * if the arguments and reducer are compatible with this applicable.
@ -36,9 +35,9 @@ public interface ReducerApplicable<T, O, R> extends Applicable<T, O> {
* @param args the arguments to apply to. * @param args the arguments to apply to.
* @return the result of the application, or null if the arguments are incompatible. * @return the result of the application, or null if the arguments are incompatible.
*/ */
default O applyWithReducer(Reducer<R> reducer, T...args) { fun applyWithReducer(reducer: Reducer<R>, vararg params: T): O? {
if(!matchesParams(args) || reducer == null) return null; if(!matchesParams(params)) return null
return applyWithReducerInternal(reducer, args); return applyWithReducerInternal(reducer, params)
} }
} }