add curry

This commit is contained in:
tursom 2021-10-14 11:26:18 +08:00
parent dc9f8e440f
commit 3612b367ff
7 changed files with 4926 additions and 1446 deletions

View File

@ -0,0 +1,808 @@
@file:Suppress("unused")
package cn.tursom.core
import com.ddbes.common.monitor.annotation.POJO
import com.ddbes.kotlin.datastruck.*
import com.google.gson.Gson
import com.google.gson.GsonBuilder
import org.aspectj.lang.JoinPoint
import org.aspectj.lang.Signature
import org.aspectj.lang.reflect.MethodSignature
import org.slf4j.Logger
import org.slf4j.event.Level
import org.springframework.web.context.request.RequestAttributes
import org.springframework.web.context.request.RequestContextHolder
import sun.reflect.Reflection
import java.io.ByteArrayOutputStream
import java.io.ObjectOutputStream
import java.lang.reflect.Field
import java.lang.reflect.Method
import java.lang.reflect.Proxy
import java.net.InetAddress
import java.net.UnknownHostException
import java.security.MessageDigest
import java.security.NoSuchAlgorithmException
import java.text.SimpleDateFormat
import java.util.*
import java.util.concurrent.Executor
import javax.servlet.http.HttpServletRequest
import kotlin.contracts.ExperimentalContracts
import kotlin.contracts.contract
import kotlin.coroutines.resume
import kotlin.coroutines.resumeWithException
import kotlin.coroutines.suspendCoroutine
import kotlin.experimental.and
import kotlin.jvm.internal.PropertyReference
import kotlin.random.Random
import kotlin.reflect.KClass
import kotlin.reflect.KProperty
import kotlin.reflect.KProperty1
import kotlin.reflect.full.companionObjectInstance
import kotlin.reflect.full.memberProperties
import kotlin.reflect.full.superclasses
object Utils {
const val dollar = '$'
val random = Random(System.currentTimeMillis())
@Suppress("unused", "SpellCheckingInspection")
val gson: Gson by lazy {
GsonBuilder()
.registerTypeAdapterFactory(GsonDataTypeAdaptor.FACTORY)
.registerTypeAdapterFactory(EnumTypeAdapterFactory)
.create()
}
@Suppress("unused", "SpellCheckingInspection")
val prettyGson: Gson by lazy {
GsonBuilder()
.registerTypeAdapterFactory(GsonDataTypeAdaptor.FACTORY)
.registerTypeAdapterFactory(EnumTypeAdapterFactory)
.setPrettyPrinting()
.create()
}
internal val UPPER_HEX_ARRAY = "0123456789ABCDEF".toCharArray()
internal val LOWER_HEX_ARRAY = "0123456789abcdef".toCharArray()
val md5 by lazy { MessageDigest.getInstance("MD5")!! }
val sha256 by lazy { MessageDigest.getInstance("SHA-256")!! }
val sha by lazy { MessageDigest.getInstance("SHA")!! }
val sha1 by lazy { MessageDigest.getInstance("SHA-1")!! }
val sha384 by lazy { MessageDigest.getInstance("SHA-384")!! }
val sha512 by lazy { MessageDigest.getInstance("SHA-512")!! }
internal val DIGITS = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".toCharArray()
val receiverField: Field by lazy {
kotlin.jvm.internal.CallableReference::class.java.getDeclaredField("receiver").apply { isAccessible = true }
}
val ownerField: Field by lazy {
kotlin.jvm.internal.CallableReference::class.java.getDeclaredField("owner").apply { isAccessible = true }
}
private val bufferThreadLocal = SimpThreadLocal { ByteArray(8192) }
val threadLocalBuffer get() = bufferThreadLocal.get()
}
fun <T> T.asResult(): Result<T> = Result.typedSuccess(this)
@OptIn(UncheckedCast::class)
val JoinPoint.method: Method
get() = signature.cast<MethodSignature>().method
@OptIn(UncheckedCast::class)
val Signature.method: Method
get() = cast<MethodSignature>().method
@OptIn(UncheckedCast::class)
fun getRequest(): HttpServletRequest = RequestContextHolder
.getRequestAttributes()
?.resolveReference(RequestAttributes.REFERENCE_REQUEST)
.cast()
private const val UNKNOWN = "unknown"
private const val LOCALHOST = "127.0.0.1"
fun getIpAddr(request: HttpServletRequest): String? {
var ipAddress: String?
try {
ipAddress = request.getHeader("x-forwarded-for")
if (ipAddress == null || ipAddress.isEmpty() || UNKNOWN.equals(ipAddress, true)) {
ipAddress = request.getHeader("Proxy-Client-IP")
}
if (ipAddress == null || ipAddress.isEmpty() || UNKNOWN.equals(ipAddress, true)) {
ipAddress = request.getHeader("WL-Proxy-Client-IP")
}
if (ipAddress == null || ipAddress.isEmpty() || UNKNOWN.equals(ipAddress, true)) {
ipAddress = request.remoteAddr
if (LOCALHOST == ipAddress) {
var inet: InetAddress? = null
try {
inet = InetAddress.getLocalHost()
} catch (e: UnknownHostException) {
e.printStackTrace()
}
ipAddress = inet!!.hostAddress
}
}
// 对于通过多个代理的情况第一个IP为客户端真实IP,多个IP按照','分割
// "***.***.***.***".length()
if (ipAddress != null && ipAddress.length > 15) {
if (ipAddress.indexOf(",") > 0) {
ipAddress = ipAddress.substring(0, ipAddress.indexOf(","))
}
}
} catch (e: Exception) {
ipAddress = ""
}
return ipAddress
}
fun String.hexStringToByteArray(): ByteArray {
val len = length
val data = ByteArray(len / 2)
var i = 0
while (i < len) {
data[i / 2] = (Character.digit(this[i], 16) shl 4 or Character.digit(this[i + 1], 16)).toByte()
i += 2
}
return data
}
fun ByteArray.toHexString(upper: Boolean = true): String = if (upper) toUpperHexString() else toLowerHexString()
fun ByteArray.toUpperHexString(): String {
val hexChars = CharArray(size * 2)
for (i in indices) {
val b = this[i]
hexChars[i shl 1] = Utils.UPPER_HEX_ARRAY[b.toInt() ushr 4 and 0x0F]
hexChars[(i shl 1) + 1] = Utils.UPPER_HEX_ARRAY[(b and 0x0F).toInt()]
}
return String(hexChars)
}
fun ByteArray.toLowerHexString(): String {
val hexChars = CharArray(size * 2)
for (i in indices) {
val b = this[i]
hexChars[i shl 1] = Utils.LOWER_HEX_ARRAY[b.toInt() ushr 4 and 0x0F]
hexChars[(i shl 1) + 1] = Utils.LOWER_HEX_ARRAY[(b and 0x0F).toInt()]
}
return String(hexChars)
}
inline fun <T, R : Any> Array<T>.toSetNotNull(transform: (T) -> R?): Set<R> {
return LinkedHashSet<R>().apply { this@toSetNotNull.forEach { add(transform(it) ?: return@forEach) } }
}
inline fun <T, R : Any> Iterable<T>.toSetNotNull(transform: (T) -> R?): Set<R> {
return LinkedHashSet<R>().apply { this@toSetNotNull.forEach { add(transform(it) ?: return@forEach) } }
}
@RequiresOptIn(level = RequiresOptIn.Level.WARNING)
@Retention(AnnotationRetention.BINARY)
//@Target(AnnotationTarget.FIELD, AnnotationTarget.PROPERTY, AnnotationTarget.FUNCTION, AnnotationTarget.CLASS)
annotation class UncheckedCast
@UncheckedCast
@Suppress("NOTHING_TO_INLINE", "UNCHECKED_CAST")
inline fun <T> Any?.cast() = this as T
@Suppress("NOTHING_TO_INLINE", "UNCHECKED_CAST")
inline fun <T> Any?.uncheckedCast() = this as T
@Suppress("NOTHING_TO_INLINE", "UNCHECKED_CAST")
inline fun <reified T> Any?.castOrNull() = if (this is T) this else null
inline fun <T> T?.checkNull(ifNull: () -> Exception): T {
if (this == null) {
throw ifNull()
} else {
return this
}
}
fun String.emptyToNull() = ifEmpty { null }
inline fun <reified T> getClazz() = T::class.java
fun Class<*>.isInheritanceFrom(parent: Class<*>) = parent.isAssignableFrom(this)
operator fun <T> (() -> T).unaryPlus() = object : () -> T {
override operator fun invoke() = this@unaryPlus()
override fun toString(): String = this@unaryPlus().toString()
}
fun Logger.isEnabled(level: Level) = when (level) {
Level.ERROR -> isErrorEnabled
Level.WARN -> isWarnEnabled
Level.INFO -> isInfoEnabled
Level.DEBUG -> isDebugEnabled
Level.TRACE -> isTraceEnabled
}
fun Logger.log(level: Level, msg: String, args: Array<*>) = when (level) {
Level.ERROR -> error(msg, *args)
Level.WARN -> warn(msg, *args)
Level.INFO -> info(msg, *args)
Level.DEBUG -> debug(msg, *args)
Level.TRACE -> trace(msg, *args)
}
@JvmName("friendlyLog")
fun Logger.log(level: Level, msg: String, vararg args: Any?) = when (level) {
Level.ERROR -> error(msg, *args)
Level.WARN -> warn(msg, *args)
Level.INFO -> info(msg, *args)
Level.DEBUG -> debug(msg, *args)
Level.TRACE -> trace(msg, *args)
}
fun String.toLowerCase(vararg indexes: Int): String {
val charArray = toCharArray()
indexes.forEach { index ->
charArray[index] = charArray[index].lowercaseChar()
}
return String(charArray)
}
fun String.toUpperCase(vararg indexes: Int): String {
val charArray = toCharArray()
indexes.forEach { index ->
charArray[index] = charArray[index].uppercaseChar()
}
return String(charArray)
}
fun String.toLowerCase(indexes: IntRange): String {
val charArray = toCharArray()
indexes.forEach { index ->
charArray[index] = charArray[index].lowercaseChar()
}
return String(charArray)
}
fun String.toUpperCase(indexes: IntRange): String {
val charArray = toCharArray()
indexes.forEach { index ->
charArray[index] = charArray[index].uppercaseChar()
}
return String(charArray)
}
fun ByteArray.md5(): ByteArray {
return Utils.md5.digest(this)
}
fun String.md5(): String = toByteArray().md5().toHexString()
fun ByteArray.sha256(): ByteArray {
return Utils.sha256.digest(this)
}
fun String.sha256(): String = toByteArray().sha256().toHexString()
fun ByteArray.sha(): ByteArray = Utils.sha.digest(this)
fun String.sha(): String = toByteArray().sha().toHexString()
fun ByteArray.sha1(): ByteArray = Utils.sha1.digest(this)
fun String.sha1(): String = toByteArray().sha1().toHexString()
fun ByteArray.sha384(): ByteArray = Utils.sha384.digest(this)
fun String.sha384(): String = toByteArray().sha384().toHexString()
fun ByteArray.sha512(): ByteArray = Utils.sha512.digest(this)
fun String.sha512(): String = toByteArray().sha512().toHexString()
fun String.fromHexString(): ByteArray {
val source = toLowerCase()
val data = ByteArray(length / 2)
for (i in 0 until length / 2) {
data[i] =
((Utils.UPPER_HEX_ARRAY.indexOf(source[i * 2]) shl 4) + Utils.UPPER_HEX_ARRAY.indexOf(
source[i * 2 + 1]
)).toByte()
}
return data
}
fun ByteArray.toUTF8String() = String(this, Charsets.UTF_8)
fun String.base64() = this.toByteArray().base64().toUTF8String()
fun ByteArray.base64(): ByteArray {
return Base64.getEncoder().encode(this)
}
fun String.base64decode() = Base64.getDecoder().decode(this).toUTF8String()
fun ByteArray.base64decode(): ByteArray = Base64.getDecoder().decode(this)
fun String.digest(type: String) = toByteArray().digest(type)?.toHexString()
fun ByteArray.digest(type: String) = try {
val instance = MessageDigest.getInstance(type)
instance.digest(this)
} catch (e: NoSuchAlgorithmException) {
e.printStackTrace()
null
}
fun Logger.logCaller() = logCaller(Level.DEBUG)
fun Logger.logCaller(level: Level) {
if (isEnabled(level)) {
val e = Throwable()
val stackTraceElement = e.stackTrace[1]
log(
level,
"calling {}.{}({}:{})",
stackTraceElement.className,
stackTraceElement.methodName,
stackTraceElement.fileName,
stackTraceElement.lineNumber
)
}
}
fun <A : Annotation, V : Any> A.changeAnnotationValue(field: KProperty1<A, V>, value: V): Boolean {
return try {
val h = Proxy.getInvocationHandler(this)
val memberValuesField = h.javaClass.getDeclaredField("memberValues")
memberValuesField.isAccessible = true
@OptIn(UncheckedCast::class)
val memberValues = memberValuesField[h].cast<MutableMap<String, Any>>()
memberValues[field.name] = value
true
} catch (e: Exception) {
false
}
}
/**
* 向数据库提交一项任务并获取返回值
*/
suspend fun <T> Executor.runWith(action: () -> T): T = suspendCoroutine { cont ->
execute {
try {
cont.resume(action())
} catch (e: Exception) {
cont.resumeWithException(e)
}
}
}
inline fun <reified T : Any> Gson.fromJson(json: String): T = fromJson(json, T::class.java)
inline fun usingTime(action: () -> Unit): Long {
val t1 = System.currentTimeMillis()
action()
val t2 = System.currentTimeMillis()
return t2 - t1
}
inline fun usingNanoTime(action: () -> Unit): Long {
val t1 = System.nanoTime()
action()
val t2 = System.nanoTime()
return t2 - t1
}
inline fun Class<*>.forAllFields(action: (Field) -> Unit) {
allFieldsSequence.forEach(action)
}
val Class<*>.allFields: List<Field>
get() {
val fieldList = ArrayList<Field>()
forAllFields(fieldList::add)
return fieldList
}
val Class<*>.allFieldsSequence: Sequence<Field>
get() = sequence {
var clazz = this@allFieldsSequence
while (clazz != Any::class.java) {
clazz.declaredFields.forEach { field ->
yield(field)
}
clazz = clazz.superclass ?: break
}
}
fun Class<*>.getFieldForAll(name: String): Field? {
forAllFields {
if (it.name == name) return it
}
return null
}
inline fun Class<*>.forAllMethods(action: (Method) -> Unit) {
allMethodsSequence.forEach(action)
}
fun Class<*>.getMethodForAll(name: String, vararg parameterTypes: Class<*>?): Method? {
forAllMethods {
if (it.name == name && parameterTypes.contentEquals(it.parameterTypes)) return it
}
return null
}
val Class<*>.allMethods: List<Method>
get() {
val fieldList = ArrayList<Method>()
forAllMethods(fieldList::add)
return fieldList
}
val Class<*>.allMethodsSequence: Sequence<Method>
get() = sequence {
var clazz = this@allMethodsSequence
while (clazz != Any::class.java) {
clazz.declaredMethods.forEach {
yield(it)
}
clazz = clazz.superclass ?: return@sequence
}
clazz.declaredMethods.forEach {
yield(it)
}
}
/**
* 获取一个 KProperty<*> 对应的对象
*/
val KProperty<*>.receiver: Any?
get() = if (this is PropertyReference) {
boundReceiver
} else try {
Utils.receiverField.get(this)
} catch (e: Exception) {
null
} ?: javaClass.getFieldForAll("receiver")?.let {
it.isAccessible = true
it.get(this)
}
val KProperty<*>.owner: Class<*>?
get() = try {
@OptIn(UncheckedCast::class)
Utils.ownerField.get(this)?.cast<Class<*>>()
} catch (e: Exception) {
null
} ?: javaClass.getFieldForAll("owner")?.let {
it.isAccessible = true
it.get(this)?.castOrNull()
}
tailrec fun Long.base62(sBuilder: StringBuilder = StringBuilder()): String {
return if (this == 0L) {
sBuilder.reverse().toString()
} else {
val remainder = (this % 62).toInt()
sBuilder.append(Utils.DIGITS[remainder])
(this / 62).base62(sBuilder)
}
}
fun String.base62Decode(): Long {
var sum: Long = 0
val len = length
var base = 1L
for (i in 0 until len) {
sum += Utils.DIGITS.indexOf(this[len - i - 1]) * base
base *= 62
}
return sum
}
fun Any.toJson(): String = Utils.gson.toJson(this)
fun Any.toPrettyJson(): String = Utils.prettyGson.toJson(this)
inline fun <reified T : Any> String.fromJson(): T = Utils.gson.fromJson(this, T::class.java)
fun Any.serialize(): ByteArray {
val outputStream = ByteArrayOutputStream()
ObjectOutputStream(outputStream).writeObject(this)
return outputStream.toByteArray()
}
operator fun <E> List<E>.get(startIndex: Int = 0, endIndex: Int = size, step: Int = 1): List<E> {
if (step <= 0) throw IllegalArgumentException("step($step) is negative or zero")
val fromIndex = when {
startIndex < 0 -> size + startIndex
startIndex >= size -> size
else -> startIndex
}
val toIndex = when {
endIndex < 0 -> size + endIndex + 1
endIndex >= size -> size
else -> endIndex
}
var targetList = if (fromIndex > toIndex) ReversedList(subList(toIndex, fromIndex)) else subList(fromIndex, toIndex)
if (step != 1) targetList = targetList step step
return targetList
}
operator fun <E> List<E>.get(intProgression: IntProgression): List<E> {
val first = intProgression.first
val last = intProgression.last
val step = intProgression.step
return when {
step == 0 -> get(first, last + if (last < 0) 0 else 1, 1)
step < 0 -> get(first + if (last > 0 && first >= 0) 1 else 0, last, -step)
else -> get(first, last + if (last < 0) 0 else 1, step)
}
}
infix fun <E> List<E>.step(step: Int): List<E> = StepList(this, step)
inline fun <C : R, R : CharSequence> C.ifNotEmpty(defaultValue: () -> R): R =
if (isNotEmpty()) defaultValue() else this
inline fun <C : R, R : CharSequence> C.ifNotBlank(defaultValue: () -> R): R =
if (isNotBlank()) defaultValue() else this
@JvmName("ifNotEmptyNullable")
inline fun <C : R, R : CharSequence> C.ifNotEmpty(defaultValue: () -> R?): R? =
if (isNotEmpty()) defaultValue() else this
@JvmName("ifNotBlankNullable")
inline fun <C : R, R : CharSequence> C.ifNotBlank(defaultValue: () -> R?): R? =
if (isNotBlank()) defaultValue() else this
/**
* 使用 condition 做条件判断如果返回 true 则使用 then 生成结果否则返回自身
*/
inline fun <R, T : R> T.ifThen(condition: T.() -> Boolean, then: T.() -> R): R = if (condition()) then() else this
inline infix fun Boolean.ifThen(then: () -> Unit): Boolean {
if (this) then()
return this
}
inline infix fun Boolean.ifNotThen(then: () -> Unit): Boolean {
if (this.not()) then()
return this
}
inline fun <T> Any.wait(action: () -> T) = synchronized(this) {
@Suppress("PLATFORM_CLASS_MAPPED_TO_KOTLIN")
(this as Object).wait()
action()
}
inline fun <T> Any.notify(action: () -> T) = synchronized(this) {
val t = action()
@Suppress("PLATFORM_CLASS_MAPPED_TO_KOTLIN")
(this as Object).notify()
t
}
inline fun <T> Any.notifyAll(action: () -> T) = synchronized(this) {
val t = action()
@Suppress("PLATFORM_CLASS_MAPPED_TO_KOTLIN")
(this as Object).notifyAll()
t
}
inline val KClass<*>.companionObjectInstanceOrNull: Any?
get() = try {
companionObjectInstance
} catch (e: Exception) {
null
}
@UncheckedCast
inline val <K : Any, V> Map<K?, V>.notNullKey
get() = cast<Map<K, V>>()
@UncheckedCast
inline val <K, V : Any> Map<K, V?>.notNullValue
get() = cast<Map<K, V>>()
@UncheckedCast
inline val <K : Any, V : Any> Map<K?, V?>.notNullEntry
get() = cast<Map<K, V>>()
@OptIn(UncheckedCast::class)
inline val <K : Any, V> Map<K?, V>.filterNullKey
get() = filter { it.key != null }.notNullKey
@OptIn(UncheckedCast::class)
inline val <K, V : Any> Map<K, V?>.filterNullValue
get() = filter { it.value != null }.notNullValue
val <T : Any> KClass<T>.allMemberPropertiesSequence: Sequence<KProperty1<T, *>>
get() = sequence {
yieldAll(memberProperties)
var superClass = superclasses.firstOrNull {
!it.java.isInterface
}
while (superClass != null) {
yieldAll(superClass.memberProperties.uncheckedCast<Collection<KProperty1<T, *>>>())
superClass = superClass.superclasses.firstOrNull {
!it.java.isInterface
}
}
}
val <T : Any> KClass<T>.allMemberProperties: List<KProperty1<T, *>>
get() = allMemberPropertiesSequence.toList()
fun String.toStartWith(prefix: String) = if (startsWith(prefix)) this else prefix + this
fun String.toStartWith(prefix: Char) = if (startsWith(prefix)) this else prefix + this
fun mongoLegal(value: Any?) = when {
value == null -> true
value.javaClass.getAnnotation(POJO::class.java) != null -> true
//value is BindingResult -> false
value is Enum<*> -> true
value is Number -> true
value is Boolean -> true
value is Char -> true
value is String -> true
//value is Serializable -> true
value.javaClass.kotlin.isData -> true
value.javaClass.name.endsWith("DTO") -> true
value.javaClass.name.endsWith("VO") -> true
else -> false
}
fun getCallerClass(thisClassName: List<String>): Class<*>? {
var clazz: Class<*>?
var callStackDepth = 1
try {
do {
clazz = getCallerClass(callStackDepth++)
if (clazz?.name !in thisClassName) {
break
}
} while (clazz != null)
} catch (e: Throwable) {
val stackTrace = Throwable().stackTrace
callStackDepth = 1
do {
clazz = Class.forName(stackTrace[callStackDepth++].className)
if (clazz?.name !in thisClassName) {
break
}
} while (callStackDepth < stackTrace.size)
}
return clazz
}
fun getCallerClassName(thisClassName: List<String>): String? {
return getCallerClass(thisClassName + "com.ddbes.kotlin.util.UtilsKt")?.name
}
fun getCallerClass(callStackDepth: Int): Class<*>? {
@Suppress("DEPRECATION")
return Reflection.getCallerClass(callStackDepth)
}
fun getCallerClassName(callStackDepth: Int): String? {
return getCallerClass(callStackDepth)?.name
}
@OptIn(ExperimentalContracts::class)
fun CharSequence?.isNotNullOrEmpty(): Boolean {
contract {
returns(true) implies (this@isNotNullOrEmpty != null)
}
return this != null && this.isNotEmpty()
}
@OptIn(ExperimentalContracts::class)
fun Collection<*>?.isNotNullOrEmpty(): Boolean {
contract {
returns(true) implies (this@isNotNullOrEmpty != null)
}
return this != null && this.isNotEmpty()
}
fun String.ifEndWith(suffix: String, ignoreCase: Boolean = false, defaultValue: String.() -> String) =
if (endsWith(suffix, ignoreCase)) {
this.defaultValue()
} else {
this
}
inline operator fun <K, V> MutableMap<K, V>.get(key: K, ifNull: (K) -> V): V {
var v = get(key)
return if (v == null) {
v = ifNull(key)
set(key, v)
v
} else {
v
}
}
fun StringBuilder.removeLastChars(count: Int) {
setLength(length - count)
}
inline fun <T> tryOrNull(getter: () -> T) = try {
getter()
} catch (e: Exception) {
null
}
fun String.trimBase64(): String {
var end = length
while (this[end - 1] == '=') {
end--
}
return substring(0, end)
}
fun String.resumeBase64Trim(): String {
val i = length % 4
return if (i != 0) {
this + String(CharArray(4 - i) { '=' })
} else {
this
}
}
fun StringBuilder(vararg strings: String): StringBuilder {
val builder = kotlin.text.StringBuilder(strings.sumOf { it.length })
builder.append(value = strings)
return builder
}
inline fun <T> Iterable<T>.forEachPart(size: UInt, action: (List<T>) -> Unit) {
val list = ArrayList<T>(size.toInt() + 10)
forEach {
list.add(it)
if (list.size >= size.toInt()) {
action(list)
list.clear()
}
}
if (list.isNotEmpty()) {
action(list)
}
}
inline fun <T> Collection<T>.forEachPart(size: UInt, action: (List<T>) -> Unit) {
if (isEmpty()) return
(this as Iterable<T>).forEachPart(size, action)
}
inline fun <T> Queue<T>.forEachRemainingPart(size: UInt, action: (List<T>) -> Unit) {
if (isEmpty()) return
val list = ArrayList<T>(size.toInt() + 10)
var element = poll()
while (element != null) {
list.add(element)
element = poll()
if (list.size >= size.toInt()) {
action(list)
list.clear()
}
}
if (list.isNotEmpty()) {
action(list)
}
}
fun SimpleDateFormat.now() = format(Date())!!
val currentTimeMillis get() = System.currentTimeMillis()
inline operator fun <reified T> Array<out T>.plus(other: Array<out T>): Array<T> {
val array = arrayOfNulls<T>(size + other.size)
System.arraycopy(this, 0, array, 0, size)
System.arraycopy(other, 0, array, size, other.size)
return array.uncheckedCast()
}

View File

@ -7,6 +7,7 @@ plugins {
dependencies {
implementation(project(":"))
implementation(project(":ts-core"))
testImplementation(group = "junit", name = "junit", version = "4.13")
}

View File

@ -1,114 +0,0 @@
package cn.tursom.core.curry
fun <T1, R> curry(action: (a1: T1) -> R) = Curry1(action)
fun <T1, T2, R> curry(action: (a1: T1, a2: T2) -> R) = Curry2 { a1: T1, a2: T2 ->
action(a1, a2)
}
fun <T1, T2, T3, R> curry(action: (a1: T1, a2: T2, a3: T3) -> R) = Curry3 { a1: T1, a2: T2, a3: T3 ->
action(a1, a2, a3)
}
fun <T1, T2, T3, T4, R> curry(action: (T1, T2, T3, T4) -> R) = Curry4 { a1: T1, a2: T2, a3: T3, a4: T4 ->
action(a1, a2, a3, a4)
}
fun <T1, T2, T3, T4, T5, R> curry(action: (T1, T2, T3, T4, T5) -> R) =
Curry5 { a1: T1, a2: T2, a3: T3, a4: T4, a5: T5 ->
action(a1, a2, a3, a4, a5)
}
fun <T1, T2, T3, T4, T5, T6, R> curry(action: (T1, T2, T3, T4, T5, T6) -> R) =
Curry6 { a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6 ->
action(a1, a2, a3, a4, a5, a6)
}
fun <T1, T2, T3, T4, T5, T6, T7, R> curry(action: (T1, T2, T3, T4, T5, T6, T7) -> R) =
Curry7 { a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7 ->
action(a1, a2, a3, a4, a5, a6, a7)
}
fun <T1, T2, T3, T4, T5, T6, T7, T8, R> curry(action: (T1, T2, T3, T4, T5, T6, T7, T8) -> R) =
Curry8 { a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8 ->
action(a1, a2, a3, a4, a5, a6, a7, a8)
}
fun <T1, T2, T3, T4, T5, T6, T7, T8, T9, R> curry(action: (T1, T2, T3, T4, T5, T6, T7, T8, T9) -> R) =
Curry9 { a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9 ->
action(a1, a2, a3, a4, a5, a6, a7, a8, a9)
}
fun <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, R> curry(action: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) -> R) =
Curry10 { a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10 ->
action(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
}
fun <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, R> curry(
action: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) -> R
) =
Curry11 { a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11 ->
action(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11)
}
fun <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, R> curry(
action: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12) -> R
) = Curry12 { a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12 ->
action(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12)
}
fun <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, R> curry(
action: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) -> R
) = Curry13 { a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12,
a13: T13 ->
action(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13)
}
fun <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, R> curry(
action: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14) -> R
) =
Curry14 { a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12, a13: T13, a14: T14 ->
action(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14)
}
fun <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, R> curry(
action: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15) -> R
) = Curry15 { a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12,
a13: T13, a14: T14, a15: T15 ->
action(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15)
}
fun <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, R> curry(
action: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16) -> R
) = Curry16 { a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12,
a13: T13, a14: T14, a15: T15, a16: T16 ->
action(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16)
}
fun <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, R> curry(
action: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17) -> R
) = Curry17 { a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12,
a13: T13, a14: T14, a15: T15, a16: T16, a17: T17 ->
action(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17)
}
fun <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, R> curry(
action: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18) -> R
) = Curry18 { a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12,
a13: T13, a14: T14, a15: T15, a16: T16, a17: T17, a18: T18 ->
action(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18)
}
fun <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, R> curry(
action: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19) -> R
) = Curry19 { a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12,
a13: T13, a14: T14, a15: T15, a16: T16, a17: T17, a18: T18, a19: T19 ->
action(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19)
}
fun <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, R> curry(
action: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20) -> R
) = Curry20 { a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12,
a13: T13, a14: T14, a15: T15, a16: T16, a17: T17, a18: T18, a19: T19, a20: T20 ->
action(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20)
}

View File

@ -1,234 +0,0 @@
//package cn.tursom.core.curry
//
//import com.ddbes.kotlin.util.uncheckedCast
//
//operator fun <T1, T2, R> Curry1<T1, Curry1<T2, R>>.invoke(a1: T1, a2: T2): R {
// return if (this is Curry2) {
// uncheckedCast<Curry2<T1, T2, R>>()(a1, a2)
// } else {
// invoke(a1)(a2)
// }
//}
//
//operator fun <T1, T2, T3, R> Curry1<T1, Curry1<T2, Curry1<T3, R>>>.invoke(a1: T1, a2: T2, a3: T3): R {
// return if (this is Curry3) {
// uncheckedCast<Curry3<T1, T2, T3, R>>()(a1, a2, a3)
// } else {
// invoke(a1)(a2)(a3)
// }
//}
//
//operator fun <T1, T2, T3, T4, R> Curry1<T1, Curry1<T2, Curry1<T3, Curry1<T4, R>>>>.invoke(
// a1: T1, a2: T2, a3: T3, a4: T4
//): R {
// return if (this is Curry4) {
// uncheckedCast<Curry4<T1, T2, T3, T4, R>>()(a1, a2, a3, a4)
// } else {
// invoke(a1)(a2)(a3)(a4)
// }
//}
//
//operator fun <T1, T2, T3, T4, T5, R> Curry1<T1, Curry1<T2, Curry1<T3, Curry1<T4, Curry1<T5, R>>>>>.invoke(
// a1: T1, a2: T2, a3: T3, a4: T4, a5: T5
//): R {
// return if (this is Curry5) {
// uncheckedCast<Curry5<T1, T2, T3, T4, T5, R>>()(a1, a2, a3, a4, a5)
// } else {
// invoke(a1)(a2)(a3)(a4)(a5)
// }
//}
//
//operator fun <T1, T2, T3, T4, T5, T6, R>
// Curry1<T1, Curry1<T2, Curry1<T3, Curry1<T4, Curry1<T5, Curry1<T6, R>>>>>>.invoke(
// a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6
//): R {
// return if (this is Curry6) {
// uncheckedCast<Curry6<T1, T2, T3, T4, T5, T6, R>>()(a1, a2, a3, a4, a5, a6)
// } else {
// invoke(a1)(a2)(a3)(a4)(a5)(a6)
// }
//}
//
//operator fun <T1, T2, T3, T4, T5, T6, T7, R>
// Curry1<T1, Curry1<T2, Curry1<T3, Curry1<T4, Curry1<T5, Curry1<T6, Curry1<T7, R>>>>>>>.invoke(
// a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7
//): R {
// return if (this is Curry7) {
// uncheckedCast<Curry7<T1, T2, T3, T4, T5, T6, T7, R>>()(a1, a2, a3, a4, a5, a6, a7)
// } else {
// invoke(a1)(a2)(a3)(a4)(a5)(a6)(a7)
// }
//}
//
//operator fun <T1, T2, T3, T4, T5, T6, T7, T8, R>
// Curry1<T1, Curry1<T2, Curry1<T3, Curry1<T4, Curry1<T5, Curry1<T6, Curry1<T7, Curry1<T8, R>>>>>>>>.invoke(
// a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8
//): R {
// return if (this is Curry8) {
// uncheckedCast<Curry8<T1, T2, T3, T4, T5, T6, T7, T8, R>>()(a1, a2, a3, a4, a5, a6, a7, a8)
// } else {
// invoke(a1)(a2)(a3)(a4)(a5)(a6)(a7)(a8)
// }
//}
//
//operator fun <T1, T2, T3, T4, T5, T6, T7, T8, T9, R>
// Curry1<T1, Curry1<T2, Curry1<T3, Curry1<T4, Curry1<T5, Curry1<T6, Curry1<T7, Curry1<T8, Curry1<T9, R>>>>>>>>>.invoke(
// a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9
//): R {
// return if (this is Curry9) {
// uncheckedCast<Curry9<T1, T2, T3, T4, T5, T6, T7, T8, T9, R>>()(a1, a2, a3, a4, a5, a6, a7, a8, a9)
// } else {
// invoke(a1)(a2)(a3)(a4)(a5)(a6)(a7)(a8)(a9)
// }
//}
//
//operator fun <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, R>
// Curry1<T1, Curry1<T2, Curry1<T3, Curry1<T4, Curry1<T5, Curry1<T6, Curry1<T7, Curry1<T8, Curry1<T9, Curry1<T10, R>>>>>>>>>>.invoke(
// a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10
//): R {
// return if (this is Curry10) {
// uncheckedCast<Curry10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, R>>()(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
// } else {
// invoke(a1)(a2)(a3)(a4)(a5)(a6)(a7)(a8)(a9)(a10)
// }
//}
//
//operator fun <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, R>
// Curry1<T1, Curry1<T2, Curry1<T3, Curry1<T4, Curry1<T5, Curry1<T6, Curry1<T7, Curry1<T8, Curry1<T9, Curry1<T10,
// Curry1<T11, R>>>>>>>>>>>.invoke(
// a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11
//): R {
// return if (this is Curry11) {
// uncheckedCast<Curry11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, R>>()(
// a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11)
// } else {
// invoke(a1)(a2)(a3)(a4)(a5)(a6)(a7)(a8)(a9)(a10)(a11)
// }
//}
//
//operator fun <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, R>
// Curry1<T1, Curry1<T2, Curry1<T3, Curry1<T4, Curry1<T5, Curry1<T6, Curry1<T7, Curry1<T8, Curry1<T9, Curry1<T10,
// Curry1<T11, Curry1<T12, R>>>>>>>>>>>>.invoke(
// a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12
//): R {
// return if (this is Curry12) {
// uncheckedCast<Curry12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, R>>()(
// a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12)
// } else {
// invoke(a1)(a2)(a3)(a4)(a5)(a6)(a7)(a8)(a9)(a10)(a11)(a12)
// }
//}
//
//operator fun <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, R>
// Curry1<T1, Curry1<T2, Curry1<T3, Curry1<T4, Curry1<T5, Curry1<T6, Curry1<T7, Curry1<T8, Curry1<T9, Curry1<T10,
// Curry1<T11, Curry1<T12, Curry1<T13, R>>>>>>>>>>>>>.invoke(
// a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12, a13: T13
//): R {
// return if (this is Curry13) {
// uncheckedCast<Curry13<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, R>>()(
// a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13)
// } else {
// invoke(a1)(a2)(a3)(a4)(a5)(a6)(a7)(a8)(a9)(a10)(a11)(a12)(a13)
// }
//}
//
//operator fun <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, R>
// Curry1<T1, Curry1<T2, Curry1<T3, Curry1<T4, Curry1<T5, Curry1<T6, Curry1<T7, Curry1<T8, Curry1<T9, Curry1<T10,
// Curry1<T11, Curry1<T12, Curry1<T13, Curry1<T14, R>>>>>>>>>>>>>>.invoke(
// a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12, a13: T13,
// a14: T14
//): R {
// return if (this is Curry14) {
// uncheckedCast<Curry14<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, R>>()(
// a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14)
// } else {
// invoke(a1)(a2)(a3)(a4)(a5)(a6)(a7)(a8)(a9)(a10)(a11)(a12)(a13)(a14)
// }
//}
//
//operator fun <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, R>
// Curry1<T1, Curry1<T2, Curry1<T3, Curry1<T4, Curry1<T5, Curry1<T6, Curry1<T7, Curry1<T8, Curry1<T9, Curry1<T10,
// Curry1<T11, Curry1<T12, Curry1<T13, Curry1<T14, Curry1<T15, R>>>>>>>>>>>>>>>.invoke(
// a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12, a13: T13,
// a14: T14, a15: T15
//): R {
// return if (this is Curry15) {
// uncheckedCast<Curry15<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, R>>()(
// a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15)
// } else {
// invoke(a1)(a2)(a3)(a4)(a5)(a6)(a7)(a8)(a9)(a10)(a11)(a12)(a13)(a14)(a15)
// }
//}
//
//operator fun <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, R>
// Curry1<T1, Curry1<T2, Curry1<T3, Curry1<T4, Curry1<T5, Curry1<T6, Curry1<T7, Curry1<T8, Curry1<T9, Curry1<T10,
// Curry1<T11, Curry1<T12, Curry1<T13, Curry1<T14, Curry1<T15, Curry1<T16, R>>>>>>>>>>>>>>>>.invoke(
// a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12, a13: T13,
// a14: T14, a15: T15, a16: T16
//): R {
// return if (this is Curry16) {
// uncheckedCast<Curry16<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, R>>()(
// a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16)
// } else {
// invoke(a1)(a2)(a3)(a4)(a5)(a6)(a7)(a8)(a9)(a10)(a11)(a12)(a13)(a14)(a15)(a16)
// }
//}
//
//operator fun <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, R>
// Curry1<T1, Curry1<T2, Curry1<T3, Curry1<T4, Curry1<T5, Curry1<T6, Curry1<T7, Curry1<T8, Curry1<T9, Curry1<T10,
// Curry1<T11, Curry1<T12, Curry1<T13, Curry1<T14, Curry1<T15, Curry1<T16, Curry1<T17, R>>>>>>>>>>>>>>>>>.invoke(
// a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12, a13: T13,
// a14: T14, a15: T15, a16: T16, a17: T17
//): R {
// return if (this is Curry17) {
// uncheckedCast<Curry17<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, R>>()(
// a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17)
// } else {
// invoke(a1)(a2)(a3)(a4)(a5)(a6)(a7)(a8)(a9)(a10)(a11)(a12)(a13)(a14)(a15)(a16)(a17)
// }
//}
//
//operator fun <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, R>
// Curry1<T1, Curry1<T2, Curry1<T3, Curry1<T4, Curry1<T5, Curry1<T6, Curry1<T7, Curry1<T8, Curry1<T9, Curry1<T10,
// Curry1<T11, Curry1<T12, Curry1<T13, Curry1<T14, Curry1<T15, Curry1<T16, Curry1<T17, Curry1<T18,
// R>>>>>>>>>>>>>>>>>>.invoke(
// a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12, a13: T13,
// a14: T14, a15: T15, a16: T16, a17: T17, a18: T18
//): R {
// return if (this is Curry18) {
// uncheckedCast<Curry18<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, R>>()(
// a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18)
// } else {
// invoke(a1)(a2)(a3)(a4)(a5)(a6)(a7)(a8)(a9)(a10)(a11)(a12)(a13)(a14)(a15)(a16)(a17)(a18)
// }
//}
//
//operator fun <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, R>
// Curry1<T1, Curry1<T2, Curry1<T3, Curry1<T4, Curry1<T5, Curry1<T6, Curry1<T7, Curry1<T8, Curry1<T9, Curry1<T10,
// Curry1<T11, Curry1<T12, Curry1<T13, Curry1<T14, Curry1<T15, Curry1<T16, Curry1<T17, Curry1<T18, Curry1<T19,
// R>>>>>>>>>>>>>>>>>>>.invoke(
// a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12, a13: T13,
// a14: T14, a15: T15, a16: T16, a17: T17, a18: T18, a19: T19
//): R {
// return if (this is Curry19) {
// uncheckedCast<Curry19<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, R>>()(
// a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19)
// } else {
// invoke(a1)(a2)(a3)(a4)(a5)(a6)(a7)(a8)(a9)(a10)(a11)(a12)(a13)(a14)(a15)(a16)(a17)(a18)(a19)
// }
//}
//
//operator fun <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, R>
// Curry1<T1, Curry1<T2, Curry1<T3, Curry1<T4, Curry1<T5, Curry1<T6, Curry1<T7, Curry1<T8, Curry1<T9, Curry1<T10,
// Curry1<T11, Curry1<T12, Curry1<T13, Curry1<T14, Curry1<T15, Curry1<T16, Curry1<T17, Curry1<T18, Curry1<T19,
// Curry1<T20, R>>>>>>>>>>>>>>>>>>>>.invoke(
// a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12, a13: T13,
// a14: T14, a15: T15, a16: T16, a17: T17, a18: T18, a19: T19, a20: T20
//): R {
// return if (this is Curry20) {
// uncheckedCast<Curry20<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, R>>()(
// a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20)
// } else {
// invoke(a1)(a2)(a3)(a4)(a5)(a6)(a7)(a8)(a9)(a10)(a11)(a12)(a13)(a14)(a15)(a16)(a17)(a18)(a19)(a20)
// }
//}

View File

@ -1,883 +0,0 @@
package cn.tursom.core.curry
open class Curry1<T1, R>(
val action1: (a1: T1) -> R,
) {
open operator fun invoke(a1: T1) = action1(a1)
}
open class Curry2<T1, T2, R>(
val action2: (a1: T1, a2: T2) -> R,
) : Curry1<T1, Curry1<T2, R>>({ a1 ->
Curry1 { a2 ->
action2(a1, a2)
}
}) {
open operator fun invoke(a1: T1, a2: T2): R {
return action2(a1, a2)
}
}
open class Curry3<T1, T2, T3, R>(
val action3: (a1: T1, a2: T2, a3: T3) -> R,
) : Curry2<T1, T2, Curry1<T3, R>>({ a1, a2 ->
Curry1 { a3 ->
action3(a1, a2, a3)
}
}) {
override operator fun invoke(a1: T1): Curry2<T2, T3, R> = Curry2 { a2, a3 ->
action3(a1, a2, a3)
}
open operator fun invoke(a1: T1, a2: T2, a3: T3): R = action3(a1, a2, a3)
}
open class Curry4<T1, T2, T3, T4, R>(
val action4: (a1: T1, a2: T2, a3: T3, a4: T4) -> R,
) : Curry3<T1, T2, T3, Curry1<T4, R>>({ a1, a2, a3 ->
Curry1 { a4 ->
action4(a1, a2, a3, a4)
}
}) {
override operator fun invoke(a1: T1): Curry3<T2, T3, T4, R> = Curry3 { a2, a3, a4 ->
action4(a1, a2, a3, a4)
}
override operator fun invoke(a1: T1, a2: T2): Curry2<T3, T4, R> = Curry2 { a3, a4 ->
action4(a1, a2, a3, a4)
}
open operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4): R = action4(a1, a2, a3, a4)
}
open class Curry5<T1, T2, T3, T4, T5, R>(
val action5: (a1: T1, a2: T2, a3: T3, a4: T4, a5: T5) -> R,
) : Curry4<T1, T2, T3, T4, Curry1<T5, R>>({ a1, a2, a3, a4 ->
Curry1 { a5 ->
action5(a1, a2, a3, a4, a5)
}
}) {
override operator fun invoke(a1: T1): Curry4<T2, T3, T4, T5, R> = Curry4 { a2, a3, a4, a5 ->
action5(a1, a2, a3, a4, a5)
}
override operator fun invoke(a1: T1, a2: T2): Curry3<T3, T4, T5, R> = Curry3 { a3, a4, a5 ->
action5(a1, a2, a3, a4, a5)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3): Curry2<T4, T5, R> = Curry2 { a4, a5 ->
action5(a1, a2, a3, a4, a5)
}
open operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5): R = action5(a1, a2, a3, a4, a5)
}
open class Curry6<T1, T2, T3, T4, T5, T6, R>(
val action6: (a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6) -> R,
) : Curry5<T1, T2, T3, T4, T5, Curry1<T6, R>>({ a1, a2, a3, a4, a5 ->
Curry1 { a6 ->
action6(a1, a2, a3, a4, a5, a6)
}
}) {
override operator fun invoke(a1: T1): Curry5<T2, T3, T4, T5, T6, R> = Curry5 { a2, a3, a4, a5, a6 ->
action6(a1, a2, a3, a4, a5, a6)
}
override operator fun invoke(a1: T1, a2: T2): Curry4<T3, T4, T5, T6, R> = Curry4 { a3, a4, a5, a6 ->
action6(a1, a2, a3, a4, a5, a6)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3): Curry3<T4, T5, T6, R> = Curry3 { a4, a5, a6 ->
action6(a1, a2, a3, a4, a5, a6)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4): Curry2<T5, T6, R> = Curry2 { a5, a6 ->
action6(a1, a2, a3, a4, a5, a6)
}
open operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6): R = action6(a1, a2, a3, a4, a5, a6)
}
open class Curry7<T1, T2, T3, T4, T5, T6, T7, R>(
val action7: (a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7) -> R,
) : Curry6<T1, T2, T3, T4, T5, T6, Curry1<T7, R>>({ a1, a2, a3, a4, a5, a6 ->
Curry1 { a7 ->
action7(a1, a2, a3, a4, a5, a6, a7)
}
}) {
override operator fun invoke(a1: T1): Curry6<T2, T3, T4, T5, T6, T7, R> = Curry6 { a2, a3, a4, a5, a6, a7 ->
action7(a1, a2, a3, a4, a5, a6, a7)
}
override operator fun invoke(a1: T1, a2: T2): Curry5<T3, T4, T5, T6, T7, R> = Curry5 { a3, a4, a5, a6, a7 ->
action7(a1, a2, a3, a4, a5, a6, a7)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3): Curry4<T4, T5, T6, T7, R> = Curry4 { a4, a5, a6, a7 ->
action7(a1, a2, a3, a4, a5, a6, a7)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4): Curry3<T5, T6, T7, R> = Curry3 { a5, a6, a7 ->
action7(a1, a2, a3, a4, a5, a6, a7)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5): Curry2<T6, T7, R> = Curry2 { a6, a7 ->
action7(a1, a2, a3, a4, a5, a6, a7)
}
open operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7): R = action7(a1, a2, a3, a4, a5, a6, a7)
}
open class Curry8<T1, T2, T3, T4, T5, T6, T7, T8, R>(
val action8: (a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8) -> R,
) : Curry7<T1, T2, T3, T4, T5, T6, T7, Curry1<T8, R>>({ a1, a2, a3, a4, a5, a6, a7 ->
Curry1 { a8 ->
action8(a1, a2, a3, a4, a5, a6, a7, a8)
}
}) {
override operator fun invoke(a1: T1): Curry7<T2, T3, T4, T5, T6, T7, T8, R> = Curry7 { a2, a3, a4, a5, a6, a7, a8 ->
action8(a1, a2, a3, a4, a5, a6, a7, a8)
}
override operator fun invoke(a1: T1, a2: T2): Curry6<T3, T4, T5, T6, T7, T8, R> = Curry6 { a3, a4, a5, a6, a7, a8 ->
action8(a1, a2, a3, a4, a5, a6, a7, a8)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3): Curry5<T4, T5, T6, T7, T8, R> = Curry5 { a4, a5, a6, a7, a8 ->
action8(a1, a2, a3, a4, a5, a6, a7, a8)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4): Curry4<T5, T6, T7, T8, R> = Curry4 { a5, a6, a7, a8 ->
action8(a1, a2, a3, a4, a5, a6, a7, a8)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5): Curry3<T6, T7, T8, R> = Curry3 { a6, a7, a8 ->
action8(a1, a2, a3, a4, a5, a6, a7, a8)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6): Curry2<T7, T8, R> = Curry2 { a7, a8 ->
action8(a1, a2, a3, a4, a5, a6, a7, a8)
}
open operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8): R = action8(a1, a2, a3, a4, a5, a6, a7, a8)
}
open class Curry9<T1, T2, T3, T4, T5, T6, T7, T8, T9, R>(
val action9: (a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9) -> R,
) : Curry8<T1, T2, T3, T4, T5, T6, T7, T8, Curry1<T9, R>>({ a1, a2, a3, a4, a5, a6, a7, a8 ->
Curry1 { a9 ->
action9(a1, a2, a3, a4, a5, a6, a7, a8, a9)
}
}) {
override operator fun invoke(a1: T1): Curry8<T2, T3, T4, T5, T6, T7, T8, T9, R> = Curry8 { a2, a3, a4, a5, a6, a7, a8, a9 ->
action9(a1, a2, a3, a4, a5, a6, a7, a8, a9)
}
override operator fun invoke(a1: T1, a2: T2): Curry7<T3, T4, T5, T6, T7, T8, T9, R> = Curry7 { a3, a4, a5, a6, a7, a8, a9 ->
action9(a1, a2, a3, a4, a5, a6, a7, a8, a9)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3): Curry6<T4, T5, T6, T7, T8, T9, R> = Curry6 { a4, a5, a6, a7, a8, a9 ->
action9(a1, a2, a3, a4, a5, a6, a7, a8, a9)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4): Curry5<T5, T6, T7, T8, T9, R> = Curry5 { a5, a6, a7, a8, a9 ->
action9(a1, a2, a3, a4, a5, a6, a7, a8, a9)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5): Curry4<T6, T7, T8, T9, R> = Curry4 { a6, a7, a8, a9 ->
action9(a1, a2, a3, a4, a5, a6, a7, a8, a9)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6): Curry3<T7, T8, T9, R> = Curry3 { a7, a8, a9 ->
action9(a1, a2, a3, a4, a5, a6, a7, a8, a9)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7): Curry2<T8, T9, R> = Curry2 { a8, a9 ->
action9(a1, a2, a3, a4, a5, a6, a7, a8, a9)
}
open operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9): R = action9(a1, a2, a3, a4, a5, a6, a7, a8, a9)
}
open class Curry10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, R>(
val action10: (a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10) -> R,
) : Curry9<T1, T2, T3, T4, T5, T6, T7, T8, T9, Curry1<T10, R>>({ a1, a2, a3, a4, a5, a6, a7, a8, a9 ->
Curry1 { a10 ->
action10(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
}
}) {
override operator fun invoke(a1: T1): Curry9<T2, T3, T4, T5, T6, T7, T8, T9, T10, R> = Curry9 { a2, a3, a4, a5, a6, a7, a8, a9, a10 ->
action10(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
}
override operator fun invoke(a1: T1, a2: T2): Curry8<T3, T4, T5, T6, T7, T8, T9, T10, R> = Curry8 { a3, a4, a5, a6, a7, a8, a9, a10 ->
action10(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3): Curry7<T4, T5, T6, T7, T8, T9, T10, R> = Curry7 { a4, a5, a6, a7, a8, a9, a10 ->
action10(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4): Curry6<T5, T6, T7, T8, T9, T10, R> = Curry6 { a5, a6, a7, a8, a9, a10 ->
action10(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5): Curry5<T6, T7, T8, T9, T10, R> = Curry5 { a6, a7, a8, a9, a10 ->
action10(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6): Curry4<T7, T8, T9, T10, R> = Curry4 { a7, a8, a9, a10 ->
action10(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7): Curry3<T8, T9, T10, R> = Curry3 { a8, a9, a10 ->
action10(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8): Curry2<T9, T10, R> = Curry2 { a9, a10 ->
action10(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
}
open operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10): R = action10(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
}
open class Curry11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, R>(
val action11: (a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11) -> R,
) : Curry10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, Curry1<T11, R>>({ a1, a2, a3, a4, a5, a6, a7, a8, a9, a10 ->
Curry1 { a11 ->
action11(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11)
}
}) {
override operator fun invoke(a1: T1): Curry10<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, R> = Curry10 { a2, a3, a4, a5, a6, a7, a8, a9, a10, a11 ->
action11(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11)
}
override operator fun invoke(a1: T1, a2: T2): Curry9<T3, T4, T5, T6, T7, T8, T9, T10, T11, R> = Curry9 { a3, a4, a5, a6, a7, a8, a9, a10, a11 ->
action11(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3): Curry8<T4, T5, T6, T7, T8, T9, T10, T11, R> = Curry8 { a4, a5, a6, a7, a8, a9, a10, a11 ->
action11(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4): Curry7<T5, T6, T7, T8, T9, T10, T11, R> = Curry7 { a5, a6, a7, a8, a9, a10, a11 ->
action11(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5): Curry6<T6, T7, T8, T9, T10, T11, R> = Curry6 { a6, a7, a8, a9, a10, a11 ->
action11(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6): Curry5<T7, T8, T9, T10, T11, R> = Curry5 { a7, a8, a9, a10, a11 ->
action11(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7): Curry4<T8, T9, T10, T11, R> = Curry4 { a8, a9, a10, a11 ->
action11(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8): Curry3<T9, T10, T11, R> = Curry3 { a9, a10, a11 ->
action11(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9): Curry2<T10, T11, R> = Curry2 { a10, a11 ->
action11(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11)
}
open operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11): R = action11(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11)
}
open class Curry12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, R>(
val action12: (a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12) -> R,
) : Curry11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, Curry1<T12, R>>({ a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11 ->
Curry1 { a12 ->
action12(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12)
}
}) {
override operator fun invoke(a1: T1): Curry11<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, R> = Curry11 { a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12 ->
action12(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12)
}
override operator fun invoke(a1: T1, a2: T2): Curry10<T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, R> = Curry10 { a3, a4, a5, a6, a7, a8, a9, a10, a11, a12 ->
action12(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3): Curry9<T4, T5, T6, T7, T8, T9, T10, T11, T12, R> = Curry9 { a4, a5, a6, a7, a8, a9, a10, a11, a12 ->
action12(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4): Curry8<T5, T6, T7, T8, T9, T10, T11, T12, R> = Curry8 { a5, a6, a7, a8, a9, a10, a11, a12 ->
action12(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5): Curry7<T6, T7, T8, T9, T10, T11, T12, R> = Curry7 { a6, a7, a8, a9, a10, a11, a12 ->
action12(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6): Curry6<T7, T8, T9, T10, T11, T12, R> = Curry6 { a7, a8, a9, a10, a11, a12 ->
action12(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7): Curry5<T8, T9, T10, T11, T12, R> = Curry5 { a8, a9, a10, a11, a12 ->
action12(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8): Curry4<T9, T10, T11, T12, R> = Curry4 { a9, a10, a11, a12 ->
action12(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9): Curry3<T10, T11, T12, R> = Curry3 { a10, a11, a12 ->
action12(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10): Curry2<T11, T12, R> = Curry2 { a11, a12 ->
action12(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12)
}
open operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12): R = action12(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12)
}
open class Curry13<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, R>(
val action13: (a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12, a13: T13) -> R,
) : Curry12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, Curry1<T13, R>>({ a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12 ->
Curry1 { a13 ->
action13(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13)
}
}) {
override operator fun invoke(a1: T1): Curry12<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, R> = Curry12 { a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13 ->
action13(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13)
}
override operator fun invoke(a1: T1, a2: T2): Curry11<T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, R> = Curry11 { a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13 ->
action13(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3): Curry10<T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, R> = Curry10 { a4, a5, a6, a7, a8, a9, a10, a11, a12, a13 ->
action13(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4): Curry9<T5, T6, T7, T8, T9, T10, T11, T12, T13, R> = Curry9 { a5, a6, a7, a8, a9, a10, a11, a12, a13 ->
action13(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5): Curry8<T6, T7, T8, T9, T10, T11, T12, T13, R> = Curry8 { a6, a7, a8, a9, a10, a11, a12, a13 ->
action13(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6): Curry7<T7, T8, T9, T10, T11, T12, T13, R> = Curry7 { a7, a8, a9, a10, a11, a12, a13 ->
action13(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7): Curry6<T8, T9, T10, T11, T12, T13, R> = Curry6 { a8, a9, a10, a11, a12, a13 ->
action13(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8): Curry5<T9, T10, T11, T12, T13, R> = Curry5 { a9, a10, a11, a12, a13 ->
action13(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9): Curry4<T10, T11, T12, T13, R> = Curry4 { a10, a11, a12, a13 ->
action13(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10): Curry3<T11, T12, T13, R> = Curry3 { a11, a12, a13 ->
action13(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11): Curry2<T12, T13, R> = Curry2 { a12, a13 ->
action13(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13)
}
open operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12, a13: T13): R = action13(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13)
}
open class Curry14<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, R>(
val action14: (a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12, a13: T13, a14: T14) -> R,
) : Curry13<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, Curry1<T14, R>>({ a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13 ->
Curry1 { a14 ->
action14(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14)
}
}) {
override operator fun invoke(a1: T1): Curry13<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, R> = Curry13 { a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14 ->
action14(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14)
}
override operator fun invoke(a1: T1, a2: T2): Curry12<T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, R> = Curry12 { a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14 ->
action14(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3): Curry11<T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, R> = Curry11 { a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14 ->
action14(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4): Curry10<T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, R> = Curry10 { a5, a6, a7, a8, a9, a10, a11, a12, a13, a14 ->
action14(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5): Curry9<T6, T7, T8, T9, T10, T11, T12, T13, T14, R> = Curry9 { a6, a7, a8, a9, a10, a11, a12, a13, a14 ->
action14(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6): Curry8<T7, T8, T9, T10, T11, T12, T13, T14, R> = Curry8 { a7, a8, a9, a10, a11, a12, a13, a14 ->
action14(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7): Curry7<T8, T9, T10, T11, T12, T13, T14, R> = Curry7 { a8, a9, a10, a11, a12, a13, a14 ->
action14(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8): Curry6<T9, T10, T11, T12, T13, T14, R> = Curry6 { a9, a10, a11, a12, a13, a14 ->
action14(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9): Curry5<T10, T11, T12, T13, T14, R> = Curry5 { a10, a11, a12, a13, a14 ->
action14(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10): Curry4<T11, T12, T13, T14, R> = Curry4 { a11, a12, a13, a14 ->
action14(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11): Curry3<T12, T13, T14, R> = Curry3 { a12, a13, a14 ->
action14(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12): Curry2<T13, T14, R> = Curry2 { a13, a14 ->
action14(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14)
}
open operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12, a13: T13, a14: T14): R = action14(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14)
}
open class Curry15<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, R>(
val action15: (a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12, a13: T13, a14: T14, a15: T15) -> R,
) : Curry14<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, Curry1<T15, R>>({ a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14 ->
Curry1 { a15 ->
action15(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15)
}
}) {
override operator fun invoke(a1: T1): Curry14<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, R> = Curry14 { a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15 ->
action15(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15)
}
override operator fun invoke(a1: T1, a2: T2): Curry13<T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, R> = Curry13 { a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15 ->
action15(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3): Curry12<T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, R> = Curry12 { a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15 ->
action15(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4): Curry11<T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, R> = Curry11 { a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15 ->
action15(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5): Curry10<T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, R> = Curry10 { a6, a7, a8, a9, a10, a11, a12, a13, a14, a15 ->
action15(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6): Curry9<T7, T8, T9, T10, T11, T12, T13, T14, T15, R> = Curry9 { a7, a8, a9, a10, a11, a12, a13, a14, a15 ->
action15(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7): Curry8<T8, T9, T10, T11, T12, T13, T14, T15, R> = Curry8 { a8, a9, a10, a11, a12, a13, a14, a15 ->
action15(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8): Curry7<T9, T10, T11, T12, T13, T14, T15, R> = Curry7 { a9, a10, a11, a12, a13, a14, a15 ->
action15(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9): Curry6<T10, T11, T12, T13, T14, T15, R> = Curry6 { a10, a11, a12, a13, a14, a15 ->
action15(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10): Curry5<T11, T12, T13, T14, T15, R> = Curry5 { a11, a12, a13, a14, a15 ->
action15(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11): Curry4<T12, T13, T14, T15, R> = Curry4 { a12, a13, a14, a15 ->
action15(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12): Curry3<T13, T14, T15, R> = Curry3 { a13, a14, a15 ->
action15(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12, a13: T13): Curry2<T14, T15, R> = Curry2 { a14, a15 ->
action15(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15)
}
open operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12, a13: T13, a14: T14, a15: T15): R = action15(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15)
}
open class Curry16<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, R>(
val action16: (a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12, a13: T13, a14: T14, a15: T15, a16: T16) -> R,
) : Curry15<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, Curry1<T16, R>>({ a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15 ->
Curry1 { a16 ->
action16(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16)
}
}) {
override operator fun invoke(a1: T1): Curry15<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, R> = Curry15 { a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16 ->
action16(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16)
}
override operator fun invoke(a1: T1, a2: T2): Curry14<T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, R> = Curry14 { a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16 ->
action16(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3): Curry13<T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, R> = Curry13 { a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16 ->
action16(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4): Curry12<T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, R> = Curry12 { a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16 ->
action16(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5): Curry11<T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, R> = Curry11 { a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16 ->
action16(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6): Curry10<T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, R> = Curry10 { a7, a8, a9, a10, a11, a12, a13, a14, a15, a16 ->
action16(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7): Curry9<T8, T9, T10, T11, T12, T13, T14, T15, T16, R> = Curry9 { a8, a9, a10, a11, a12, a13, a14, a15, a16 ->
action16(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8): Curry8<T9, T10, T11, T12, T13, T14, T15, T16, R> = Curry8 { a9, a10, a11, a12, a13, a14, a15, a16 ->
action16(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9): Curry7<T10, T11, T12, T13, T14, T15, T16, R> = Curry7 { a10, a11, a12, a13, a14, a15, a16 ->
action16(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10): Curry6<T11, T12, T13, T14, T15, T16, R> = Curry6 { a11, a12, a13, a14, a15, a16 ->
action16(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11): Curry5<T12, T13, T14, T15, T16, R> = Curry5 { a12, a13, a14, a15, a16 ->
action16(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12): Curry4<T13, T14, T15, T16, R> = Curry4 { a13, a14, a15, a16 ->
action16(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12, a13: T13): Curry3<T14, T15, T16, R> = Curry3 { a14, a15, a16 ->
action16(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12, a13: T13, a14: T14): Curry2<T15, T16, R> = Curry2 { a15, a16 ->
action16(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16)
}
open operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12, a13: T13, a14: T14, a15: T15, a16: T16): R = action16(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16)
}
open class Curry17<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, R>(
val action17: (a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12, a13: T13, a14: T14, a15: T15, a16: T16, a17: T17) -> R,
) : Curry16<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, Curry1<T17, R>>({ a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16 ->
Curry1 { a17 ->
action17(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17)
}
}) {
override operator fun invoke(a1: T1): Curry16<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, R> = Curry16 { a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17 ->
action17(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17)
}
override operator fun invoke(a1: T1, a2: T2): Curry15<T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, R> = Curry15 { a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17 ->
action17(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3): Curry14<T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, R> = Curry14 { a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17 ->
action17(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4): Curry13<T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, R> = Curry13 { a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17 ->
action17(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5): Curry12<T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, R> = Curry12 { a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17 ->
action17(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6): Curry11<T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, R> = Curry11 { a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17 ->
action17(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7): Curry10<T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, R> = Curry10 { a8, a9, a10, a11, a12, a13, a14, a15, a16, a17 ->
action17(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8): Curry9<T9, T10, T11, T12, T13, T14, T15, T16, T17, R> = Curry9 { a9, a10, a11, a12, a13, a14, a15, a16, a17 ->
action17(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9): Curry8<T10, T11, T12, T13, T14, T15, T16, T17, R> = Curry8 { a10, a11, a12, a13, a14, a15, a16, a17 ->
action17(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10): Curry7<T11, T12, T13, T14, T15, T16, T17, R> = Curry7 { a11, a12, a13, a14, a15, a16, a17 ->
action17(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11): Curry6<T12, T13, T14, T15, T16, T17, R> = Curry6 { a12, a13, a14, a15, a16, a17 ->
action17(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12): Curry5<T13, T14, T15, T16, T17, R> = Curry5 { a13, a14, a15, a16, a17 ->
action17(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12, a13: T13): Curry4<T14, T15, T16, T17, R> = Curry4 { a14, a15, a16, a17 ->
action17(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12, a13: T13, a14: T14): Curry3<T15, T16, T17, R> = Curry3 { a15, a16, a17 ->
action17(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12, a13: T13, a14: T14, a15: T15): Curry2<T16, T17, R> = Curry2 { a16, a17 ->
action17(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17)
}
open operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12, a13: T13, a14: T14, a15: T15, a16: T16, a17: T17): R = action17(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17)
}
open class Curry18<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, R>(
val action18: (a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12, a13: T13, a14: T14, a15: T15, a16: T16, a17: T17, a18: T18) -> R,
) : Curry17<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, Curry1<T18, R>>({ a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17 ->
Curry1 { a18 ->
action18(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18)
}
}) {
override operator fun invoke(a1: T1): Curry17<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, R> = Curry17 { a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18 ->
action18(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18)
}
override operator fun invoke(a1: T1, a2: T2): Curry16<T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, R> = Curry16 { a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18 ->
action18(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3): Curry15<T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, R> = Curry15 { a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18 ->
action18(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4): Curry14<T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, R> = Curry14 { a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18 ->
action18(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5): Curry13<T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, R> = Curry13 { a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18 ->
action18(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6): Curry12<T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, R> = Curry12 { a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18 ->
action18(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7): Curry11<T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, R> = Curry11 { a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18 ->
action18(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8): Curry10<T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, R> = Curry10 { a9, a10, a11, a12, a13, a14, a15, a16, a17, a18 ->
action18(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9): Curry9<T10, T11, T12, T13, T14, T15, T16, T17, T18, R> = Curry9 { a10, a11, a12, a13, a14, a15, a16, a17, a18 ->
action18(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10): Curry8<T11, T12, T13, T14, T15, T16, T17, T18, R> = Curry8 { a11, a12, a13, a14, a15, a16, a17, a18 ->
action18(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11): Curry7<T12, T13, T14, T15, T16, T17, T18, R> = Curry7 { a12, a13, a14, a15, a16, a17, a18 ->
action18(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12): Curry6<T13, T14, T15, T16, T17, T18, R> = Curry6 { a13, a14, a15, a16, a17, a18 ->
action18(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12, a13: T13): Curry5<T14, T15, T16, T17, T18, R> = Curry5 { a14, a15, a16, a17, a18 ->
action18(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12, a13: T13, a14: T14): Curry4<T15, T16, T17, T18, R> = Curry4 { a15, a16, a17, a18 ->
action18(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12, a13: T13, a14: T14, a15: T15): Curry3<T16, T17, T18, R> = Curry3 { a16, a17, a18 ->
action18(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12, a13: T13, a14: T14, a15: T15, a16: T16): Curry2<T17, T18, R> = Curry2 { a17, a18 ->
action18(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18)
}
open operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12, a13: T13, a14: T14, a15: T15, a16: T16, a17: T17, a18: T18): R = action18(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18)
}
open class Curry19<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, R>(
val action19: (a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12, a13: T13, a14: T14, a15: T15, a16: T16, a17: T17, a18: T18, a19: T19) -> R,
) : Curry18<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, Curry1<T19, R>>({ a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18 ->
Curry1 { a19 ->
action19(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19)
}
}) {
override operator fun invoke(a1: T1): Curry18<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, R> = Curry18 { a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19 ->
action19(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19)
}
override operator fun invoke(a1: T1, a2: T2): Curry17<T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, R> = Curry17 { a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19 ->
action19(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3): Curry16<T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, R> = Curry16 { a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19 ->
action19(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4): Curry15<T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, R> = Curry15 { a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19 ->
action19(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5): Curry14<T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, R> = Curry14 { a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19 ->
action19(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6): Curry13<T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, R> = Curry13 { a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19 ->
action19(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7): Curry12<T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, R> = Curry12 { a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19 ->
action19(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8): Curry11<T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, R> = Curry11 { a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19 ->
action19(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9): Curry10<T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, R> = Curry10 { a10, a11, a12, a13, a14, a15, a16, a17, a18, a19 ->
action19(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10): Curry9<T11, T12, T13, T14, T15, T16, T17, T18, T19, R> = Curry9 { a11, a12, a13, a14, a15, a16, a17, a18, a19 ->
action19(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11): Curry8<T12, T13, T14, T15, T16, T17, T18, T19, R> = Curry8 { a12, a13, a14, a15, a16, a17, a18, a19 ->
action19(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12): Curry7<T13, T14, T15, T16, T17, T18, T19, R> = Curry7 { a13, a14, a15, a16, a17, a18, a19 ->
action19(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12, a13: T13): Curry6<T14, T15, T16, T17, T18, T19, R> = Curry6 { a14, a15, a16, a17, a18, a19 ->
action19(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12, a13: T13, a14: T14): Curry5<T15, T16, T17, T18, T19, R> = Curry5 { a15, a16, a17, a18, a19 ->
action19(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12, a13: T13, a14: T14, a15: T15): Curry4<T16, T17, T18, T19, R> = Curry4 { a16, a17, a18, a19 ->
action19(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12, a13: T13, a14: T14, a15: T15, a16: T16): Curry3<T17, T18, T19, R> = Curry3 { a17, a18, a19 ->
action19(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12, a13: T13, a14: T14, a15: T15, a16: T16, a17: T17): Curry2<T18, T19, R> = Curry2 { a18, a19 ->
action19(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19)
}
open operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12, a13: T13, a14: T14, a15: T15, a16: T16, a17: T17, a18: T18, a19: T19): R = action19(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19)
}
open class Curry20<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, R>(
val action20: (a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12, a13: T13, a14: T14, a15: T15, a16: T16, a17: T17, a18: T18, a19: T19, a20: T20) -> R,
) : Curry19<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, Curry1<T20, R>>({ a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19 ->
Curry1 { a20 ->
action20(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20)
}
}) {
override operator fun invoke(a1: T1): Curry19<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, R> = Curry19 { a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20 ->
action20(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20)
}
override operator fun invoke(a1: T1, a2: T2): Curry18<T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, R> = Curry18 { a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20 ->
action20(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3): Curry17<T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, R> = Curry17 { a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20 ->
action20(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4): Curry16<T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, R> = Curry16 { a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20 ->
action20(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5): Curry15<T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, R> = Curry15 { a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20 ->
action20(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6): Curry14<T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, R> = Curry14 { a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20 ->
action20(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7): Curry13<T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, R> = Curry13 { a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20 ->
action20(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8): Curry12<T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, R> = Curry12 { a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20 ->
action20(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9): Curry11<T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, R> = Curry11 { a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20 ->
action20(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10): Curry10<T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, R> = Curry10 { a11, a12, a13, a14, a15, a16, a17, a18, a19, a20 ->
action20(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11): Curry9<T12, T13, T14, T15, T16, T17, T18, T19, T20, R> = Curry9 { a12, a13, a14, a15, a16, a17, a18, a19, a20 ->
action20(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12): Curry8<T13, T14, T15, T16, T17, T18, T19, T20, R> = Curry8 { a13, a14, a15, a16, a17, a18, a19, a20 ->
action20(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12, a13: T13): Curry7<T14, T15, T16, T17, T18, T19, T20, R> = Curry7 { a14, a15, a16, a17, a18, a19, a20 ->
action20(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12, a13: T13, a14: T14): Curry6<T15, T16, T17, T18, T19, T20, R> = Curry6 { a15, a16, a17, a18, a19, a20 ->
action20(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12, a13: T13, a14: T14, a15: T15): Curry5<T16, T17, T18, T19, T20, R> = Curry5 { a16, a17, a18, a19, a20 ->
action20(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12, a13: T13, a14: T14, a15: T15, a16: T16): Curry4<T17, T18, T19, T20, R> = Curry4 { a17, a18, a19, a20 ->
action20(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12, a13: T13, a14: T14, a15: T15, a16: T16, a17: T17): Curry3<T18, T19, T20, R> = Curry3 { a18, a19, a20 ->
action20(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20)
}
override operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12, a13: T13, a14: T14, a15: T15, a16: T16, a17: T17, a18: T18): Curry2<T19, T20, R> = Curry2 { a19, a20 ->
action20(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20)
}
open operator fun invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12, a13: T13, a14: T14, a15: T15, a16: T16, a17: T17, a18: T18, a19: T19, a20: T20): R = action20(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20)
}

View File

@ -1,6 +1,6 @@
package com.ddbes.kotlin
package cn.tursom.core.curry
import com.ddbes.kotlin.util.removeLastChars
import cn.tursom.core.removeLastChars
import org.junit.Test
class CurryBuilder {
@ -19,6 +19,18 @@ class CurryBuilder {
(4..20).forEach(::buildMethodInvoker)
}
@Test
fun buildObjectI() {
println(
"package com.ddbes.kotlin.util\n" +
"\n" +
"import com.ddbes.kotlin.util.curry.*\n"
)
println(buildObjectI(20, "I", extensionLambda = false, extensionCurry = false))
println(buildObjectI(20, "F", extensionLambda = true, extensionCurry = false))
//println(buildObjectI(20, "C", extensionLambda = false, extensionCurry = true))
}
fun args(index: Int) = buildString {
repeat(index) {
append("a${it + 1}, ")
@ -54,6 +66,50 @@ class CurryBuilder {
removeLastChars(2)
}
fun argsWithType(fromIndex: Int, toIndex: Int) = buildString {
(fromIndex..toIndex).forEach {
append("a$it: T$it, ")
}
removeLastChars(2)
}
fun buildObjectI(
index: Int,
objectName: String = "I",
extensionLambda: Boolean = true,
extensionCurry: Boolean = true,
) = buildString {
append("object $objectName {\n")
append(" inline operator fun <R> invoke(f: () -> R) = f()\n")
if (extensionLambda || extensionCurry) append("\n")
(1..index).forEach {
append(
" inline operator fun <${types(it)}, R> invoke(f: (${types(it)}) -> R, ${
argsWithType(it)
}) = f(${args(it)})\n"
)
if (extensionCurry) append(
"operator fun <${types(it)}, R> invoke(f: Curry${it}<${types(it)}, R>, ${
argsWithType(it)
}) = f(${args(it)})\n"
)
repeat(it - 1) { curry ->
if (extensionLambda) append(
"operator fun <${types(it)}, R> invoke(f: (${types(it)}) -> R, ${
argsWithType(it - curry - 1)
}) = f(${args(it - curry - 1)})\n"
)
if (extensionCurry) append(
"operator fun <${types(it)}, R> invoke(f: Curry${it}<${types(it)}, R>, ${
argsWithType(it - curry - 1)
}) = f(${args(it - curry - 1)})\n"
)
}
if (extensionLambda || extensionCurry) append("\n")
}
append("}\n")
}
fun buildCurryClass(index: Int) {
val args = args(index)
val argsWithType = argsWithType(index)
@ -119,13 +175,14 @@ class CurryBuilder {
fun buildMethodInvoker(index: Int) {
val args = args(index)
val argsWithType = argsWithType(index)
val types = types(index)
println("operator fun <$types, R> (($types) -> R).invoke() = curry(this)")
println("operator fun <$types, R> (($types) -> R).invoke() = this")
(1 until index).forEach { argCount ->
println("operator fun <$types, R> (($types) -> R).invoke(${argsWithType(argCount)}) = " +
"curry(this)(${args(argCount)})")
println(
"operator fun <$types, R> (($types) -> R).invoke(${argsWithType(argCount)}) = " +
"{ ${argsWithType(argCount + 1, index)} -> this(${args}) }"
)
}
println()
}