From 5a89be88dfa859fbcf75afed9cc502713716cafc Mon Sep 17 00:00:00 2001 From: tursom Date: Sat, 16 Apr 2022 21:27:47 +0800 Subject: [PATCH] update --- .../kotlin/cn/tursom/core/ClassLoaderUtil.kt | 6 +- .../main/kotlin/cn/tursom/core/Disposable.kt | 2 +- .../kotlin/cn/tursom/core/ListClassLoader.kt | 2 +- .../cn/tursom/core/NonLockLinkedList.kt | 2 +- .../main/kotlin/cn/tursom/core/Snowflake.kt | 4 +- .../src/main/kotlin/cn/tursom/core/Switch.kt | 16 +- .../src/main/kotlin/cn/tursom/core/Unsafe.kt | 17 +- .../cn/tursom/core/UpdatableThreadLocal.kt | 2 +- .../UpdatableThreadLocalSimpleDateFormat.kt | 2 +- .../cn/tursom/core/reflect/MethodFilter.kt | 2 +- .../cn/tursom/core/reflect/MethodInspector.kt | 44 +- .../core/reflect/ReturnTypeMethodFilter.kt | 2 +- .../kotlin/cn/tursom/core/reflect/utils.kt | 4 +- .../core/storage/BufferedStorageHandler.kt | 2 +- .../core/storage/InstantStorageHandler.kt | 2 +- .../core/storage/ThreadPoolStorageHandler.kt | 2 +- .../cn/tursom/core/timer/NonLockTaskQueue.kt | 2 +- .../core/timer/SynchronizedTaskQueue.kt | 2 +- .../src/main/kotlin/cn/tursom/core/utils.kt | 2 +- .../src/test/kotlin/cn/tursom/http/test.kt | 26 +- ts-core/ts-buffer/build.gradle.kts | 2 + .../main/kotlin/cn/tursom/core/AsyncFile.kt | 48 +- .../kotlin/cn/tursom/core/ByteBufferUtil.kt | 6 +- .../cn/tursom/core/buffer/BasicByteBuffer.kt | 29 + .../cn/tursom/core/buffer/ByteBuffer.kt | 399 +- .../tursom/core/buffer/ByteBufferExtension.kt | 109 +- .../core/buffer/ByteBufferExtensionKey.kt | 1 - .../tursom/core/buffer/MultipleByteBuffer.kt | 200 +- .../cn/tursom/core/buffer/NioBuffers.kt | 250 +- .../tursom/core/buffer/ReadableByteBuffer.kt | 147 + .../tursom/core/buffer/WriteableByteBuffer.kt | 223 + .../core/buffer/impl/ArrayByteBuffer.kt | 156 +- .../core/buffer/impl/DirectByteBuffer.kt | 10 +- .../tursom/core/buffer/impl/HeapByteBuffer.kt | 8 +- .../tursom/core/buffer/impl/ListByteBuffer.kt | 90 +- .../core/buffer/impl/NettyByteBuffer.kt | 34 +- .../cn/tursom/core/stream/InputStream.kt | 2 +- .../kotlin/cn/tursom/core/stream/Stream.kt | 4 +- .../tursom/core/stream/impl/BytesIOStream.kt | 2 +- .../core/stream/impl/BytesInputStream.kt | 2 +- .../core/stream/impl/BytesOutputStream.kt | 2 +- .../core/stream/impl/JavaInputStreamProxy.kt | 2 +- .../core/stream/impl/JavaOutputStream.kt | 2 +- .../tursom/core/stream/impl/PairIOStream.kt | 4 +- .../core/buffer/impl/ArrayByteBufferTest.kt | 43 + .../core/coroutine/BufferTickerProvider.kt | 1 - .../core/coroutine/CoroutineLocalContext.kt | 2 +- .../coroutine/CoroutineLocalContinuation.kt | 2 +- .../core/coroutine/CoroutineScopeContext.kt | 3 +- .../coroutine/CurrentThreadCoroutineScope.kt | 6 +- .../src/main/kotlin/cn/tursom/core/curry/I.kt | 2763 ++++++++++- .../cn/tursom/core/curry/VarargCurrying.kt | 130 +- .../kotlin/cn/tursom/core/curry/currying.kt | 4022 ++++++++++++++++- .../cn/tursom/core/curry/curyingMethod.kt | 710 ++- .../kotlin/cn/tursom/core/curry/uncurrying.kt | 267 +- .../cn/tursom/core/curry/CurryBuilder.kt | 350 +- .../core/datastruct/AbstractListIterator.kt | 2 +- .../cn/tursom/core/datastruct/ArrayMap.kt | 2 +- .../cn/tursom/core/datastruct/AtomicBitSet.kt | 2 +- .../core/datastruct/KPropertyEntries.kt | 2 +- .../datastruct/KPropertyValueCollection.kt | 2 +- .../tursom/core/datastruct/MutableSubList.kt | 2 +- .../core/datastruct/ParallelArrayMap.kt | 2 +- .../cn/tursom/core/datastruct/ReversedList.kt | 2 +- .../cn/tursom/core/datastruct/SimpHashMap.kt | 2 +- .../tursom/core/datastruct/StringRadixTree.kt | 2 +- .../concurrent/ConcurrentLinkedList.kt | 2 +- .../main/kotlin/cn/tursom/core/encrypt/AES.kt | 2 +- .../kotlin/cn/tursom/core/encrypt/AESPool.kt | 2 +- .../main/kotlin/cn/tursom/core/encrypt/DSA.kt | 2 +- .../main/kotlin/cn/tursom/core/encrypt/ECC.kt | 2 +- .../kotlin/cn/tursom/core/encrypt/Encrypt.kt | 4 +- .../cn/tursom/core/encrypt/EncryptPool.kt | 2 +- .../kotlin/cn/tursom/core/encrypt/RSAPool.kt | 2 +- .../kotlin/cn/tursom/log/LayoutEncoders.kt | 2 +- .../kotlin/cn/tursom/mail/MailStructure.kt | 2 +- .../src/main/kotlin/cn/tursom/mail/read.kt | 6 +- .../cn/tursom/core/RewriteFlvChecker.kt | 4 +- .../cn/tursom/core/pool/DirectMemoryPool.kt | 2 +- .../cn/tursom/core/pool/HeapMemoryPool.kt | 2 +- .../cn/tursom/core/pool/InstantMemoryPool.kt | 2 +- .../core/pool/LongBitSetDirectMemoryPool.kt | 2 +- .../core/pool/LongBitSetHeapMemoryPool.kt | 2 +- .../tursom/core/pool/ThreadLocalMemoryPool.kt | 2 +- .../main/kotlin/cn/tursom/reflect/utils.kt | 4 +- .../cn/tursom/core/ws/WebSocketClient.kt | 30 +- .../src/main/kotlin/cn/tursom/core/xml/Xml.kt | 22 +- .../kotlin/cn/tursom/core/xml/XmlDocument.kt | 4 +- .../tursom/core/xml/interfaces/XmlElement.kt | 2 +- .../cn/tursom/database/mongodb/Aggregate.kt | 18 +- .../mongodb/operator/MongoOperator.kt | 2 +- .../mongodb/spring/AggregationBuilder.kt | 24 +- .../database/mongodb/spring/MongoUtil.kt | 6 +- .../tursom/database/mongodb/spring/utils.kt | 2 +- .../database/mybatisplus/EnhanceExtension.kt | 18 +- .../database/mybatisplus/IServiceEnhance.kt | 74 +- .../mybatisplus/KtEnhanceQueryWrapper.kt | 2 +- .../RegexAbstractWrapperEnhance.kt | 2 +- .../tursom/database/mybatisplus/TableField.kt | 170 +- ts-socket/build.gradle.kts | 1 + .../kotlin/cn/tursom/channel/AsyncChannel.kt | 63 +- .../cn/tursom/channel/AsyncChannelEnhance.kt | 2 +- .../cn/tursom/channel/AsyncNioChannel.kt | 18 +- .../cn/tursom/channel/ReadableAsyncChannel.kt | 52 + .../cn/tursom/channel/WritableAsyncChannel.kt | 34 + .../tursom/channel/enhance/ChannelPipeline.kt | 2 +- .../enhance/impl/BufferedChannelReaderImpl.kt | 2 +- .../channel/enhance/impl/ByteArrayWriter.kt | 2 +- .../channel/enhance/impl/ChannelReaderImpl.kt | 2 +- .../channel/enhance/impl/ChannelWriterImpl.kt | 6 +- .../channel/enhance/impl/EnhanceChannel.kt | 2 +- .../enhance/impl/EnhanceChannelImpl.kt | 2 +- .../impl/LengthFieldBasedFrameReader.kt | 10 +- .../enhance/impl/LengthFieldChannel.kt | 2 +- .../enhance/impl/LengthFieldPrependWriter.kt | 2 +- .../channel/enhance/impl/ListStringReader.kt | 2 +- .../enhance/impl/SingleListChannelReader.kt | 2 +- .../channel/enhance/impl/StringChannel.kt | 2 +- .../enhance/impl/StringObjectWriter.kt | 2 +- .../channel/enhance/impl/StringReader.kt | 2 +- .../channel/enhance/impl/StringWriter.kt | 2 +- .../cn/tursom/datagram/AsyncDatagram.kt | 6 - .../datagram/server/AsyncDatagramServer.kt | 4 +- .../server/BufferedAsyncDatagramServer.kt | 2 +- .../datagram/server/LoopDatagramServer.kt | 4 +- .../datagram/server/ServerNioDatagram.kt | 40 +- .../tursom/niothread/ThreadPoolNioThread.kt | 2 +- .../tursom/niothread/WorkerLoopNioThread.kt | 2 +- .../niothread/loophandler/BossLoopHandler.kt | 2 +- .../MultithreadingBossLoopHandler.kt | 2 +- .../kotlin/cn/tursom/socket/AsyncSocket.kt | 15 +- .../cn/tursom/socket/BufferedNioSocket.kt | 2 +- .../main/kotlin/cn/tursom/socket/NioSocket.kt | 24 +- .../security/AsyncSocketSecurityUtil.kt | 2 +- .../socket/security/SecurityEnhanceChannel.kt | 2 +- .../socket/security/SecurityNioServer.kt | 6 +- .../tursom/socket/server/BufferedNioServer.kt | 6 +- .../server/MultithreadingNioLoopServer.kt | 4 +- .../cn/tursom/socket/server/NioLoopServer.kt | 4 +- .../cn/tursom/socket/server/NioServer.kt | 6 +- .../kotlin/cn/tursom/datagram/server/test.kt | 14 +- .../cn/tursom/web/ResponseHeaderAdapter.kt | 4 +- .../kotlin/cn/tursom/web/client/HttpClient.kt | 4 +- .../cn/tursom/web/client/HttpClientGet.kt | 11 + .../cn/tursom/web/client/HttpRequest.kt | 26 +- .../kotlin/cn/tursom/web/client/ParamType.kt | 5 + .../cn/tursom/web/client/ParamsHolder.kt | 24 + .../cn/tursom/web/client/ParamsSetter.kt | 11 + .../cn/tursom/web/mapping/ConnectMapping.kt | 2 +- .../cn/tursom/web/mapping/DeleteMapping.kt | 2 +- .../cn/tursom/web/mapping/GetMapping.kt | 2 +- .../cn/tursom/web/mapping/HeadMapping.kt | 2 +- .../kotlin/cn/tursom/web/mapping/Mapping.kt | 2 +- .../cn/tursom/web/mapping/OptionsMapping.kt | 2 +- .../cn/tursom/web/mapping/PatchMapping.kt | 2 +- .../cn/tursom/web/mapping/PostMapping.kt | 2 +- .../cn/tursom/web/mapping/PutMapping.kt | 2 +- .../cn/tursom/web/mapping/TraceMapping.kt | 2 +- .../cn/tursom/web/router/MappedMethod.kt | 2 +- .../cn/tursom/web/router/RoutedHttpHandler.kt | 2 +- .../kotlin/cn/tursom/web/router/Router.kt | 2 +- .../web/router/impl/CurlyBracesRouter.kt | 2 +- .../cn/tursom/web/router/impl/FilterRouter.kt | 4 +- .../web/router/impl/colonnode/AnyColonNode.kt | 2 +- .../web/router/impl/colonnode/ColonNode.kt | 10 +- .../impl/colonnode/PlaceholderColonNode.kt | 4 +- .../main/kotlin/cn/tursom/web/utils/Cookie.kt | 2 +- .../cn/tursom/web/utils/EmptyHttpContent.kt | 2 +- ts-web/ts-web-coroutine/build.gradle.kts | 1 + .../web/router/AsyncRoutedHttpHandler.kt | 8 +- .../client/netty/Http2ClientInitializer.kt | 127 + .../web/client/netty/HttpConnectionPool.kt | 5 +- .../tursom/web/client/netty/HttpExecutor.kt | 69 +- .../web/client/netty/NettyHttpClient.kt | 5 +- .../web/client/netty/NettyHttpConnection.kt | 40 +- .../web/client/netty/NettyHttpRequest.kt | 130 +- .../web/client/netty/NettyHttpClientTest.kt | 43 + .../web/netty/NettyChunkedByteBuffer.kt | 2 +- .../tursom/web/netty/NettyExceptionContent.kt | 2 +- .../cn/tursom/web/netty/NettyHttpContent.kt | 2 +- .../cn/tursom/web/netty/NettyHttpHandler.kt | 2 +- .../web/netty/NettyHttpObjectHandler.kt | 2 +- .../tursom/web/netty/NettyWebSocketContent.kt | 2 +- .../tursom/web/netty/NettyWebSocketHandler.kt | 2 +- .../kotlin/cn/tursom/web/netty/ParamParser.kt | 2 +- ts-web/ts-web-okhttp/build.gradle.kts | 1 + .../web/client/okhttp/OkhttpHttpClient.kt | 2 +- .../web/client/okhttp/OkhttpHttpRequest.kt | 50 +- .../web/client/okhttp/OkhttpHttpClientTest.kt | 47 +- 189 files changed, 9440 insertions(+), 2222 deletions(-) create mode 100644 ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/BasicByteBuffer.kt create mode 100644 ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/ReadableByteBuffer.kt create mode 100644 ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/WriteableByteBuffer.kt create mode 100644 ts-core/ts-buffer/src/test/kotlin/cn/tursom/core/buffer/impl/ArrayByteBufferTest.kt create mode 100644 ts-socket/src/main/kotlin/cn/tursom/channel/ReadableAsyncChannel.kt create mode 100644 ts-socket/src/main/kotlin/cn/tursom/channel/WritableAsyncChannel.kt create mode 100644 ts-web/src/main/kotlin/cn/tursom/web/client/HttpClientGet.kt create mode 100644 ts-web/src/main/kotlin/cn/tursom/web/client/ParamType.kt create mode 100644 ts-web/src/main/kotlin/cn/tursom/web/client/ParamsHolder.kt create mode 100644 ts-web/src/main/kotlin/cn/tursom/web/client/ParamsSetter.kt create mode 100644 ts-web/ts-web-netty-client/src/main/kotlin/cn/tursom/web/client/netty/Http2ClientInitializer.kt diff --git a/ts-core/src/main/kotlin/cn/tursom/core/ClassLoaderUtil.kt b/ts-core/src/main/kotlin/cn/tursom/core/ClassLoaderUtil.kt index 0fc64a7..8c3b6b0 100644 --- a/ts-core/src/main/kotlin/cn/tursom/core/ClassLoaderUtil.kt +++ b/ts-core/src/main/kotlin/cn/tursom/core/ClassLoaderUtil.kt @@ -11,12 +11,12 @@ val ClassLoader.classes: List> fun ClassLoader.getClassByPackage( packageName: String, - childPackage: Boolean = true + childPackage: Boolean = true, ): List = ClassLoaderUtil.getClassByPackage(packageName, childPackage, this) inline fun T.getClassByPackage( packageName: String, - childPackage: Boolean = true + childPackage: Boolean = true, ): List = ClassLoaderUtil.getClassByPackage(packageName, childPackage, T::class.java.classLoader) object ClassLoaderUtil { @@ -31,7 +31,7 @@ object ClassLoaderUtil { fun getClassByPackage( packageName: String, childPackage: Boolean = true, - loader: ClassLoader = Thread.currentThread().contextClassLoader + loader: ClassLoader = Thread.currentThread().contextClassLoader, ): List { val packagePath = packageName.replace(".", "/") val url: URL? = loader.getResource(packagePath) diff --git a/ts-core/src/main/kotlin/cn/tursom/core/Disposable.kt b/ts-core/src/main/kotlin/cn/tursom/core/Disposable.kt index e33e909..4ac3b98 100644 --- a/ts-core/src/main/kotlin/cn/tursom/core/Disposable.kt +++ b/ts-core/src/main/kotlin/cn/tursom/core/Disposable.kt @@ -3,7 +3,7 @@ package cn.tursom.core import java.util.concurrent.atomic.AtomicReference class Disposable( - value: T? = null + value: T? = null, ) { private var value = AtomicReference() diff --git a/ts-core/src/main/kotlin/cn/tursom/core/ListClassLoader.kt b/ts-core/src/main/kotlin/cn/tursom/core/ListClassLoader.kt index f6fd9aa..40c0603 100644 --- a/ts-core/src/main/kotlin/cn/tursom/core/ListClassLoader.kt +++ b/ts-core/src/main/kotlin/cn/tursom/core/ListClassLoader.kt @@ -3,7 +3,7 @@ package cn.tursom.core @Suppress("unused") class ListClassLoader( //url: Array, - parent: ClassLoader = getSystemClassLoader() + parent: ClassLoader = getSystemClassLoader(), ) : ClassLoader(parent), MutableList by ArrayList() { diff --git a/ts-core/src/main/kotlin/cn/tursom/core/NonLockLinkedList.kt b/ts-core/src/main/kotlin/cn/tursom/core/NonLockLinkedList.kt index 2b3695e..9320995 100644 --- a/ts-core/src/main/kotlin/cn/tursom/core/NonLockLinkedList.kt +++ b/ts-core/src/main/kotlin/cn/tursom/core/NonLockLinkedList.kt @@ -24,7 +24,7 @@ open class NonLockLinkedList { private class TaskListNode( val data: T, - @Volatile var next: TaskListNode? + @Volatile var next: TaskListNode?, ) class NotSupportedException : Exception() diff --git a/ts-core/src/main/kotlin/cn/tursom/core/Snowflake.kt b/ts-core/src/main/kotlin/cn/tursom/core/Snowflake.kt index 4089fa0..a66d109 100644 --- a/ts-core/src/main/kotlin/cn/tursom/core/Snowflake.kt +++ b/ts-core/src/main/kotlin/cn/tursom/core/Snowflake.kt @@ -25,13 +25,13 @@ class Snowflake( val executorService: ScheduledExecutorService? = null, val updateRateMs: Long = defaultUpdateRateMs, val workMode: WorkMode = WorkMode.INCREMENT, - val incrementLength: Int = 7 + val incrementLength: Int = 7, ) { constructor( workerId: String, executorService: ScheduledExecutorService? = null, updateRateMs: Long = defaultUpdateRateMs, - workMode: WorkMode = WorkMode.INCREMENT + workMode: WorkMode = WorkMode.INCREMENT, ) : this(parseId(workerId), executorService, updateRateMs, workMode) private var _timestamp = System.currentTimeMillis().shl(incrementLength + 13).and(0x7f_ff_ff_ff__ff_ff_ff_ff) diff --git a/ts-core/src/main/kotlin/cn/tursom/core/Switch.kt b/ts-core/src/main/kotlin/cn/tursom/core/Switch.kt index ad89dc6..15e4beb 100644 --- a/ts-core/src/main/kotlin/cn/tursom/core/Switch.kt +++ b/ts-core/src/main/kotlin/cn/tursom/core/Switch.kt @@ -2,7 +2,7 @@ package cn.tursom.core class Switch( val value: Any? = null, - var consider: Boolean = false + var consider: Boolean = false, ) { object BreakException : Exception() @@ -44,7 +44,7 @@ inline fun switch(value: T, block: Switch.() -> Unit) { class ByteSwitch( val value: Byte, - var consider: Boolean = false + var consider: Boolean = false, ) { inline val `break`: Unit inline get() { @@ -76,7 +76,7 @@ inline fun switch(value: Byte, block: ByteSwitch.() -> Unit) { class ShortSwitch( val value: Short, - var consider: Boolean = false + var consider: Boolean = false, ) { inline val `break`: Unit inline get() { @@ -108,7 +108,7 @@ inline fun switch(value: Short, block: ShortSwitch.() -> Unit) { class IntSwitch( val value: Int, - var consider: Boolean = false + var consider: Boolean = false, ) { inline val `break`: Unit inline get() { @@ -140,7 +140,7 @@ inline fun switch(value: Int, block: IntSwitch.() -> Unit) { class LongSwitch( val value: Long, - var consider: Boolean = false + var consider: Boolean = false, ) { inline val `break`: Unit inline get() { @@ -172,7 +172,7 @@ inline fun switch(value: Long, block: LongSwitch.() -> Unit) { class FloatSwitch( val value: Float, - var consider: Boolean = false + var consider: Boolean = false, ) { inline val `break`: Unit inline get() { @@ -204,7 +204,7 @@ inline fun switch(value: Float, block: FloatSwitch.() -> Unit) { class DoubleSwitch( val value: Double, - var consider: Boolean = false + var consider: Boolean = false, ) { inline val `break`: Unit inline get() { @@ -236,7 +236,7 @@ inline fun switch(value: Double, block: DoubleSwitch.() -> Unit) { class CharSwitch( val value: Char, - var consider: Boolean = false + var consider: Boolean = false, ) { inline val `break`: Unit inline get() { diff --git a/ts-core/src/main/kotlin/cn/tursom/core/Unsafe.kt b/ts-core/src/main/kotlin/cn/tursom/core/Unsafe.kt index fcd7e1e..87b45c5 100644 --- a/ts-core/src/main/kotlin/cn/tursom/core/Unsafe.kt +++ b/ts-core/src/main/kotlin/cn/tursom/core/Unsafe.kt @@ -3,11 +3,11 @@ package cn.tursom.core import sun.misc.Unsafe object Unsafe { - val unsafe: Unsafe = Unsafe::class.java["theUnsafe"] as Unsafe + val unsafe: Unsafe = Unsafe::class.java.getStaticField("theUnsafe") as Unsafe operator fun invoke(action: cn.tursom.core.Unsafe.() -> T): T = this.action() - operator fun Any.get(name: String): Any? { + fun Any.getField(name: String): Any? { val clazz = this::class.java val field = try { clazz.getDeclaredField(name) @@ -18,7 +18,18 @@ object Unsafe { return field.get(this) } - operator fun Class<*>.get(name: String): Any? { + fun Any.setField(name: String, value: Any?) { + val clazz = this::class.java + val field = try { + clazz.getDeclaredField(name) + } catch (e: Exception) { + return + } + field.isAccessible = true + field.set(this, value) + } + + fun Class<*>.getStaticField(name: String): Any? { val field = try { getDeclaredField(name) } catch (e: Exception) { diff --git a/ts-core/src/main/kotlin/cn/tursom/core/UpdatableThreadLocal.kt b/ts-core/src/main/kotlin/cn/tursom/core/UpdatableThreadLocal.kt index a4fa91b..dbf161c 100644 --- a/ts-core/src/main/kotlin/cn/tursom/core/UpdatableThreadLocal.kt +++ b/ts-core/src/main/kotlin/cn/tursom/core/UpdatableThreadLocal.kt @@ -4,7 +4,7 @@ import java.lang.ref.SoftReference open class UpdatableThreadLocal( @Volatile - private var new: () -> T + private var new: () -> T, ) : ThreadLocal() { @Suppress("LeakingThis") private val thisSoft: SoftReference> = SoftReference(this) diff --git a/ts-core/src/main/kotlin/cn/tursom/core/UpdatableThreadLocalSimpleDateFormat.kt b/ts-core/src/main/kotlin/cn/tursom/core/UpdatableThreadLocalSimpleDateFormat.kt index 7ddca0e..9f591fd 100644 --- a/ts-core/src/main/kotlin/cn/tursom/core/UpdatableThreadLocalSimpleDateFormat.kt +++ b/ts-core/src/main/kotlin/cn/tursom/core/UpdatableThreadLocalSimpleDateFormat.kt @@ -4,7 +4,7 @@ import java.text.SimpleDateFormat import java.util.* class UpdatableThreadLocalSimpleDateFormat( - format: String = "YYYY-MM-dd'T'HH:mm:ssZZ" + format: String = "YYYY-MM-dd'T'HH:mm:ssZZ", ) : UpdatableThreadLocal({ SimpleDateFormat(format) }) { diff --git a/ts-core/src/main/kotlin/cn/tursom/core/reflect/MethodFilter.kt b/ts-core/src/main/kotlin/cn/tursom/core/reflect/MethodFilter.kt index e1a0be3..f019d11 100644 --- a/ts-core/src/main/kotlin/cn/tursom/core/reflect/MethodFilter.kt +++ b/ts-core/src/main/kotlin/cn/tursom/core/reflect/MethodFilter.kt @@ -10,7 +10,7 @@ interface MethodFilter { class Arg1MethodFilter( - val prevFilter: ReturnTypeMethodFilter + val prevFilter: ReturnTypeMethodFilter, ) : MethodFilter { override fun filterMethod(clazz: Class<*>): Sequence { return prevFilter.filterMethod(clazz).filter { method -> diff --git a/ts-core/src/main/kotlin/cn/tursom/core/reflect/MethodInspector.kt b/ts-core/src/main/kotlin/cn/tursom/core/reflect/MethodInspector.kt index 886da91..e4bb149 100644 --- a/ts-core/src/main/kotlin/cn/tursom/core/reflect/MethodInspector.kt +++ b/ts-core/src/main/kotlin/cn/tursom/core/reflect/MethodInspector.kt @@ -19,7 +19,7 @@ object MethodInspector { returnType: Class, argumentType: Array>, self: Any? = null, - handler: (Method, (Array) -> R) -> Unit + handler: (Method, (Array) -> R) -> Unit, ) { clazz.forAllMethods { method -> val parameterTypes = method.parameterTypes @@ -47,7 +47,7 @@ object MethodInspector { returnType: Class, argumentType: Array>, self: Any? = null, - handler: (Method, suspend (Array) -> R) -> Unit + handler: (Method, suspend (Array) -> R) -> Unit, ) { clazz.forAllMethods { method -> val parameterTypes = method.parameterTypes @@ -85,7 +85,7 @@ object MethodInspector { clazz: Class<*>, returnType: Class, self: Any? = null, - handler: (Method, () -> R) -> Unit + handler: (Method, () -> R) -> Unit, ) { clazz.javaClass.forAllMethods { method -> val parameterTypes = method.parameterTypes @@ -106,7 +106,7 @@ object MethodInspector { returnType: Class, argumentType: Class, self: Any? = null, - handler: (Method, (T) -> R) -> Unit + handler: (Method, (T) -> R) -> Unit, ) { forEachMethod(clazz, returnType, arrayOf(argumentType), self) { method: Method, m: (Array) -> R -> handler(method) { @@ -121,7 +121,7 @@ object MethodInspector { argumentType1: Class, argumentType2: Class, self: Any? = null, - handler: (Method, (T1, T2) -> R) -> Unit + handler: (Method, (T1, T2) -> R) -> Unit, ) { forEachMethod( clazz, @@ -142,7 +142,7 @@ object MethodInspector { argumentType2: Class, argumentType3: Class, self: Any? = null, - handler: (Method, (T1, T2, T3) -> R) -> Unit + handler: (Method, (T1, T2, T3) -> R) -> Unit, ) { forEachMethod( clazz, @@ -164,7 +164,7 @@ object MethodInspector { argumentType3: Class, argumentType4: Class, self: Any? = null, - handler: (Method, (T1, T2, T3, T4) -> R) -> Unit + handler: (Method, (T1, T2, T3, T4) -> R) -> Unit, ) { forEachMethod( clazz, @@ -186,7 +186,7 @@ object MethodInspector { clazz: Class<*>, returnType: Class, self: Any? = null, - handler: (Method, suspend () -> R) -> Unit + handler: (Method, suspend () -> R) -> Unit, ) { forEachSuspendMethod(clazz, returnType, arrayOf(), self) { method: Method, m: suspend (Array) -> R -> handler(method) { @@ -200,7 +200,7 @@ object MethodInspector { returnType: Class, argumentType: Class, self: Any? = null, - handler: (Method, suspend (T) -> R) -> Unit + handler: (Method, suspend (T) -> R) -> Unit, ) { forEachSuspendMethod( clazz, @@ -220,7 +220,7 @@ object MethodInspector { argumentType1: Class, argumentType2: Class, self: Any? = null, - handler: (Method, suspend (T1, T2) -> R) -> Unit + handler: (Method, suspend (T1, T2) -> R) -> Unit, ) { forEachSuspendMethod( clazz, @@ -241,7 +241,7 @@ object MethodInspector { argumentType2: Class, argumentType3: Class, self: Any? = null, - handler: (Method, suspend (T1, T2, T3) -> R) -> Unit + handler: (Method, suspend (T1, T2, T3) -> R) -> Unit, ) { forEachSuspendMethod( clazz, @@ -263,7 +263,7 @@ object MethodInspector { argumentType3: Class, argumentType4: Class, self: Any? = null, - handler: (Method, suspend (T1, T2, T3, T4) -> R) -> Unit + handler: (Method, suspend (T1, T2, T3, T4) -> R) -> Unit, ) { forEachSuspendMethod( clazz, @@ -282,7 +282,7 @@ object MethodInspector { self: Any, returnType: Class, argumentType: Array>, - handler: (Method, (Array) -> R) -> Unit + handler: (Method, (Array) -> R) -> Unit, ) { forEachMethod(self.javaClass, returnType, argumentType, self, handler) } @@ -291,7 +291,7 @@ object MethodInspector { self: Any, returnType: Class, argumentType: Array>, - handler: (Method, suspend (Array) -> R) -> Unit + handler: (Method, suspend (Array) -> R) -> Unit, ) { forEachSuspendMethod(self.javaClass, returnType, argumentType, self, handler) } @@ -308,7 +308,7 @@ object MethodInspector { self: Any, returnType: Class, argumentType: Class, - handler: (Method, (T) -> R) -> Unit + handler: (Method, (T) -> R) -> Unit, ) { forEachMethod(self, returnType, arrayOf(argumentType)) { method: Method, m: (Array) -> R -> handler(method) { @@ -322,7 +322,7 @@ object MethodInspector { returnType: Class, argumentType1: Class, argumentType2: Class, - handler: (Method, (T1, T2) -> R) -> Unit + handler: (Method, (T1, T2) -> R) -> Unit, ) { forEachMethod( self, @@ -341,7 +341,7 @@ object MethodInspector { argumentType1: Class, argumentType2: Class, argumentType3: Class, - handler: (Method, (T1, T2, T3) -> R) -> Unit + handler: (Method, (T1, T2, T3) -> R) -> Unit, ) { forEachMethod( self, @@ -361,7 +361,7 @@ object MethodInspector { argumentType2: Class, argumentType3: Class, argumentType4: Class, - handler: (Method, (T1, T2, T3, T4) -> R) -> Unit + handler: (Method, (T1, T2, T3, T4) -> R) -> Unit, ) { forEachMethod( self, @@ -390,7 +390,7 @@ object MethodInspector { self: Any, returnType: Class, argumentType: Class, - handler: (Method, suspend (T) -> R) -> Unit + handler: (Method, suspend (T) -> R) -> Unit, ) { forEachSuspendMethod(self, returnType, arrayOf(argumentType)) { method: Method, m: suspend (Array) -> R -> handler(method) { @@ -404,7 +404,7 @@ object MethodInspector { returnType: Class, argumentType1: Class, argumentType2: Class, - handler: (Method, suspend (T1, T2) -> R) -> Unit + handler: (Method, suspend (T1, T2) -> R) -> Unit, ) { forEachSuspendMethod( self, @@ -423,7 +423,7 @@ object MethodInspector { argumentType1: Class, argumentType2: Class, argumentType3: Class, - handler: (Method, suspend (T1, T2, T3) -> R) -> Unit + handler: (Method, suspend (T1, T2, T3) -> R) -> Unit, ) { forEachSuspendMethod( self, @@ -443,7 +443,7 @@ object MethodInspector { argumentType2: Class, argumentType3: Class, argumentType4: Class, - handler: (Method, suspend (T1, T2, T3, T4) -> R) -> Unit + handler: (Method, suspend (T1, T2, T3, T4) -> R) -> Unit, ) { forEachSuspendMethod( self, diff --git a/ts-core/src/main/kotlin/cn/tursom/core/reflect/ReturnTypeMethodFilter.kt b/ts-core/src/main/kotlin/cn/tursom/core/reflect/ReturnTypeMethodFilter.kt index 0707902..9c291b8 100644 --- a/ts-core/src/main/kotlin/cn/tursom/core/reflect/ReturnTypeMethodFilter.kt +++ b/ts-core/src/main/kotlin/cn/tursom/core/reflect/ReturnTypeMethodFilter.kt @@ -4,7 +4,7 @@ import cn.tursom.core.allMethodsSequence import java.lang.reflect.Method class ReturnTypeMethodFilter( - val returnType: Class + val returnType: Class, ) : MethodFilter { override fun filterMethod(clazz: Class<*>): Sequence { return clazz.allMethodsSequence.filter { method -> diff --git a/ts-core/src/main/kotlin/cn/tursom/core/reflect/utils.kt b/ts-core/src/main/kotlin/cn/tursom/core/reflect/utils.kt index 7e3c6ad..f13613a 100644 --- a/ts-core/src/main/kotlin/cn/tursom/core/reflect/utils.kt +++ b/ts-core/src/main/kotlin/cn/tursom/core/reflect/utils.kt @@ -1,6 +1,6 @@ package cn.tursom.core.reflect -import cn.tursom.core.Unsafe.get +import cn.tursom.core.Unsafe.getField import cn.tursom.core.companionObjectInstanceOrNull import cn.tursom.core.isStatic import cn.tursom.core.uncheckedCast @@ -23,7 +23,7 @@ fun Class<*>.getStaticField(name: String): T? { val companionObjectInstance = kotlin.companionObjectInstanceOrNull if (companionObjectInstance != null) { - return companionObjectInstance[name]?.uncheckedCast() + return companionObjectInstance.getField(name)?.uncheckedCast() } return null diff --git a/ts-core/src/main/kotlin/cn/tursom/core/storage/BufferedStorageHandler.kt b/ts-core/src/main/kotlin/cn/tursom/core/storage/BufferedStorageHandler.kt index 48b1ed2..ad2a2fa 100644 --- a/ts-core/src/main/kotlin/cn/tursom/core/storage/BufferedStorageHandler.kt +++ b/ts-core/src/main/kotlin/cn/tursom/core/storage/BufferedStorageHandler.kt @@ -21,7 +21,7 @@ class BufferedStorageHandler( private val minBufTime: Long = 500, private val singleThreadWrite: Boolean = true, // 数据批量写入处理器 - private val writeHandler: (list: Collection) -> Unit + private val writeHandler: (list: Collection) -> Unit, ) : StorageHandler { private val onWrite = AtomicBoolean(false) diff --git a/ts-core/src/main/kotlin/cn/tursom/core/storage/InstantStorageHandler.kt b/ts-core/src/main/kotlin/cn/tursom/core/storage/InstantStorageHandler.kt index 4e3cad9..4d9214e 100644 --- a/ts-core/src/main/kotlin/cn/tursom/core/storage/InstantStorageHandler.kt +++ b/ts-core/src/main/kotlin/cn/tursom/core/storage/InstantStorageHandler.kt @@ -5,7 +5,7 @@ package cn.tursom.core.storage */ class InstantStorageHandler( // 数据批量写入处理器 - private val writeHandler: (obj: T) -> Unit + private val writeHandler: (obj: T) -> Unit, ) : StorageHandler { /** * 向缓冲中添加一个写入对象 diff --git a/ts-core/src/main/kotlin/cn/tursom/core/storage/ThreadPoolStorageHandler.kt b/ts-core/src/main/kotlin/cn/tursom/core/storage/ThreadPoolStorageHandler.kt index dde392a..272561d 100644 --- a/ts-core/src/main/kotlin/cn/tursom/core/storage/ThreadPoolStorageHandler.kt +++ b/ts-core/src/main/kotlin/cn/tursom/core/storage/ThreadPoolStorageHandler.kt @@ -9,7 +9,7 @@ class ThreadPoolStorageHandler( // 任务执行线程池 private val executor: Executor, // 数据批量写入处理器 - private val writeHandler: (obj: T) -> Unit + private val writeHandler: (obj: T) -> Unit, ) : StorageHandler { /** * 向缓冲中添加一个写入对象 diff --git a/ts-core/src/main/kotlin/cn/tursom/core/timer/NonLockTaskQueue.kt b/ts-core/src/main/kotlin/cn/tursom/core/timer/NonLockTaskQueue.kt index 4145134..2be6b2d 100644 --- a/ts-core/src/main/kotlin/cn/tursom/core/timer/NonLockTaskQueue.kt +++ b/ts-core/src/main/kotlin/cn/tursom/core/timer/NonLockTaskQueue.kt @@ -38,7 +38,7 @@ class NonLockTaskQueue : TaskQueue { override val timeout: Long, override val task: () -> Unit, override val createTime: Long, - @Volatile var next: TaskListNode? + @Volatile var next: TaskListNode?, ) : TimerTask { @Volatile override var canceled: Boolean = false diff --git a/ts-core/src/main/kotlin/cn/tursom/core/timer/SynchronizedTaskQueue.kt b/ts-core/src/main/kotlin/cn/tursom/core/timer/SynchronizedTaskQueue.kt index 94f77ef..41d8fe7 100644 --- a/ts-core/src/main/kotlin/cn/tursom/core/timer/SynchronizedTaskQueue.kt +++ b/ts-core/src/main/kotlin/cn/tursom/core/timer/SynchronizedTaskQueue.kt @@ -44,7 +44,7 @@ class SynchronizedTaskQueue : TaskQueue { override val task: () -> Unit, @Volatile var prev: TaskNode?, @Volatile var next: TaskNode?, - override val createTime: Long = CurrentTimeMillisClock.now + override val createTime: Long = CurrentTimeMillisClock.now, ) : TimerTask { @Volatile override var canceled: Boolean = false diff --git a/ts-core/src/main/kotlin/cn/tursom/core/utils.kt b/ts-core/src/main/kotlin/cn/tursom/core/utils.kt index b28fb07..cbb14d2 100644 --- a/ts-core/src/main/kotlin/cn/tursom/core/utils.kt +++ b/ts-core/src/main/kotlin/cn/tursom/core/utils.kt @@ -520,7 +520,7 @@ fun getCallerClass(thisClassName: List): Class<*>? { do { clazz = getCallerClass(callStackDepth++) val clazzName = clazz?.name - if (clazzName != "cn.tursom.core.ToolsKt" && clazzName !in thisClassName) { + if (clazzName != "cn.tursom.core.UtilsKt" && clazzName !in thisClassName) { break } } while (clazz != null) diff --git a/ts-core/ts-async-http/src/test/kotlin/cn/tursom/http/test.kt b/ts-core/ts-async-http/src/test/kotlin/cn/tursom/http/test.kt index 0b949fb..0920806 100644 --- a/ts-core/ts-async-http/src/test/kotlin/cn/tursom/http/test.kt +++ b/ts-core/ts-async-http/src/test/kotlin/cn/tursom/http/test.kt @@ -1,9 +1,9 @@ package cn.tursom.http import cn.tursom.core.Utils.gson +import cn.tursom.core.coroutine.GlobalScope import cn.tursom.core.coroutine.MainDispatcher import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch import org.jsoup.nodes.Document import retrofit2.Retrofit @@ -58,13 +58,13 @@ data class RoomStatus( val recvCount: Int, val roomId: Int, val roomInfo: RoomInfo, - val totalCount: Int + val totalCount: Int, ) data class LiveUser( val info: Info, val level: Level, - val san: Int + val san: Int, ) data class RoomInfo( @@ -104,7 +104,7 @@ data class RoomInfo( val uid: Int, val up_session: String, val user_cover: String, - val verify: String + val verify: String, ) data class Info( @@ -117,7 +117,7 @@ data class Info( val rank: String, val uid: Int, val uname: String, - val vip_type: Int + val vip_type: Int, ) data class Level( @@ -133,13 +133,13 @@ data class Level( val user_level: Int, val user_score: String, val vip: Int, - val vip_time: String + val vip_time: String, ) data class OfficialVerify( val desc: String, val role: Int, - val type: Int + val type: Int, ) data class MasterLevel( @@ -150,25 +150,25 @@ data class MasterLevel( val master_level_color: Int, val next: List, val sort: String, - val upgrade_score: Int + val upgrade_score: Int, ) data class NewPendants( val badge: Badge, val frame: Frame, - val mobile_frame: MobileFrame + val mobile_frame: MobileFrame, ) data class StudioInfo( val master_list: List, - val status: Int + val status: Int, ) data class Badge( val desc: String, val name: String, val position: Double, - val value: String + val value: String, ) data class Frame( @@ -180,7 +180,7 @@ data class Frame( val name: String, val position: Int, val use_old_area: Boolean, - val value: String + val value: String, ) data class MobileFrame( @@ -192,5 +192,5 @@ data class MobileFrame( val name: String, val position: Int, val use_old_area: Boolean, - val value: String + val value: String, ) \ No newline at end of file diff --git a/ts-core/ts-buffer/build.gradle.kts b/ts-core/ts-buffer/build.gradle.kts index 01262f2..bd58050 100644 --- a/ts-core/ts-buffer/build.gradle.kts +++ b/ts-core/ts-buffer/build.gradle.kts @@ -8,6 +8,8 @@ dependencies { implementation(project(":ts-core:ts-log")) implementation(project(":ts-core")) compileOnly(group = "io.netty", name = "netty-all", version = "4.1.72.Final") + + testApi(group = "junit", name = "junit", version = "4.13.2") } artifacts { diff --git a/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/AsyncFile.kt b/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/AsyncFile.kt index 9a262f2..3c5f5d0 100644 --- a/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/AsyncFile.kt +++ b/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/AsyncFile.kt @@ -3,6 +3,8 @@ package cn.tursom.core import cn.tursom.core.AsyncFile.Reader import cn.tursom.core.AsyncFile.Writer import cn.tursom.core.buffer.* +import cn.tursom.core.buffer.NioBuffers.readNioBuffers +import cn.tursom.core.buffer.NioBuffers.writeNioBuffers import java.nio.channels.AsynchronousFileChannel import java.nio.channels.CompletionHandler import java.nio.file.Files @@ -24,26 +26,23 @@ class AsyncFile(val path: Path) { override val extensionClass: Class = Writer::class.java override tailrec fun get(buffer: ByteBuffer): Writer? { - val sequences = buffer.getExtension(NioBuffers.Sequences) return when { - sequences != null -> Writer { file, position -> + buffer is MultipleByteBuffer -> Writer { file, position -> var writePosition = position - val nioBuffers = sequences.readBufferSequence().toList() - run { - nioBuffers.forEach { readBuf -> - while (readBuf.position() < readBuf.limit()) { - val writeSize = file.write(readBuf, writePosition) - if (writeSize > 0) { - writePosition += writeSize - } else { - return@run + buffer.readNioBuffers { + it.forEach { readBuf -> + while (readBuf.position() < readBuf.limit()) { + val writeSize = file.write(readBuf, writePosition) + if (writeSize > 0) { + writePosition += writeSize + } else { + return@run + } } } } } - - sequences.finishRead(nioBuffers.iterator()) (writePosition - position).toInt() } buffer is ProxyByteBuffer -> get(buffer.agent) @@ -60,26 +59,23 @@ class AsyncFile(val path: Path) { override val extensionClass: Class = Reader::class.java override tailrec fun get(buffer: ByteBuffer): Reader? { - val sequences = buffer.getExtension(NioBuffers.Sequences) return when { - sequences != null -> Reader { file, position -> + buffer is MultipleByteBuffer -> Reader { file, position -> var readPosition = position - val nioBuffers = sequences.writeBufferSequence().toList() - run { - nioBuffers.forEach { nioBuf -> - while (nioBuf.position() < nioBuf.limit()) { - val readSize = file.read(nioBuf, readPosition) - if (readSize > 0) { - readPosition += readSize - } else { - return@run + buffer.writeNioBuffers { + it.forEach { nioBuf -> + while (nioBuf.position() < nioBuf.limit()) { + val readSize = file.read(nioBuf, readPosition) + if (readSize > 0) { + readPosition += readSize + } else { + return@run + } } } } } - - sequences.finishWrite(nioBuffers.iterator()) (readPosition - position).toInt() } buffer is ProxyByteBuffer -> get(buffer.agent) diff --git a/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/ByteBufferUtil.kt b/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/ByteBufferUtil.kt index 9932d4c..ae8bce9 100644 --- a/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/ByteBufferUtil.kt +++ b/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/ByteBufferUtil.kt @@ -48,11 +48,15 @@ object ByteBufferUtil { return buffer } + fun wrap(bytes: ByteArray, write: Boolean = true): cn.tursom.core.buffer.ByteBuffer { + return HeapByteBuffer(bytes, write) + } + fun wrap(array: ByteArray, offset: Int = 0, size: Int = array.size - offset): ByteBuffer { val buffer = ByteBuffer.wrap(array, 0, offset + size) if (offset > 0) field.set(buffer, offset) return buffer } - fun wrap(string: String) = wrap(string.toByteArray()) + fun wrap(string: String) = wrap(string.toByteArray(), write = false) } \ No newline at end of file diff --git a/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/BasicByteBuffer.kt b/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/BasicByteBuffer.kt new file mode 100644 index 0000000..7b6f9bc --- /dev/null +++ b/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/BasicByteBuffer.kt @@ -0,0 +1,29 @@ +package cn.tursom.core.buffer + +interface BasicByteBuffer { + val hasArray: Boolean + val array: ByteArray + + val readable: Int get() = writePosition - readPosition + val writeable: Int get() = capacity - writePosition + + val isReadable: Boolean get() = readable != 0 + val isWriteable: Boolean get() = writeable != 0 + + val capacity: Int + val arrayOffset: Int + var writePosition: Int + var readPosition: Int + val writeOffset: Int get() = arrayOffset + writePosition + val readOffset: Int get() = arrayOffset + readPosition + + val closed: Boolean get() = false + val resized: Boolean + + fun reset() + + fun clear() { + readPosition = 0 + writePosition = 0 + } +} diff --git a/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/ByteBuffer.kt b/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/ByteBuffer.kt index 4ccc7fd..ab825b5 100644 --- a/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/ByteBuffer.kt +++ b/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/ByteBuffer.kt @@ -1,417 +1,26 @@ package cn.tursom.core.buffer -import cn.tursom.core.Utils.bufferThreadLocal -import cn.tursom.core.forEachIndex -import cn.tursom.core.reverseBytes import java.io.Closeable -import java.io.IOException -import java.io.InputStream -import java.io.OutputStream -import java.nio.ByteOrder -import kotlin.math.min /** * 针对其他库的字节缓冲的封装 */ @Suppress("unused") -interface ByteBuffer : Closeable { +interface ByteBuffer : Closeable, ReadableByteBuffer, WriteableByteBuffer { fun getExtension(key: ByteBufferExtensionKey): T? = key.get(this) - /** - * 使用读 buffer,ByteBuffer 实现类有义务维护指针正常推进 - */ - fun readBuffer(block: (java.nio.ByteBuffer) -> T): T { - val buffer = readBuffer() - return try { - block(buffer) - } finally { - finishRead(buffer) - } - } - - /** - * 使用写 buffer,ByteBuffer 实现类有义务维护指针正常推进 - */ - fun writeBuffer(block: (java.nio.ByteBuffer) -> T): T { - val buffer = writeBuffer() - return try { - block(buffer) - } finally { - finishWrite(buffer) - } - } - - val readable: Int get() = writePosition - readPosition - val writeable: Int get() = capacity - writePosition - - val isReadable: Boolean get() = readable != 0 - val isWriteable: Boolean get() = writeable != 0 - - val hasArray: Boolean - val array: ByteArray - - val capacity: Int - val arrayOffset: Int - var writePosition: Int - var readPosition: Int - - val closed: Boolean get() = false - val resized: Boolean - override fun close() {} fun closeChild(child: ByteBuffer) {} - fun readBuffer(): java.nio.ByteBuffer - fun finishRead(buffer: java.nio.ByteBuffer) - - fun writeBuffer(): java.nio.ByteBuffer - fun finishWrite(buffer: java.nio.ByteBuffer) - - fun reset() fun slice(position: Int, size: Int): ByteBuffer = slice(position, size, 0, 0) - fun slice(position: Int, size: Int, readPosition: Int = 0, writePosition: Int = 0): ByteBuffer + fun slice(position: Int, size: Int, readPosition: Int, writePosition: Int): ByteBuffer /** * @return 底层 nio buffer 是否已更新 */ fun resize(newSize: Int): Boolean - val writeOffset: Int get() = arrayOffset + writePosition - val readOffset: Int get() = arrayOffset + readPosition - - fun clear() { - readPosition = 0 - writePosition = 0 - } - - fun skip(n: Int): Int { - readPosition += n - return n - } - - fun get(): Byte = read { it.get() } - - fun getChar(byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN): Char = read { buf -> - when (byteOrder) { - ByteOrder.BIG_ENDIAN -> buf.char - ByteOrder.LITTLE_ENDIAN -> buf.char.reverseBytes() - else -> throw IllegalArgumentException() - } - } - - fun getShort(byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN): Short = read { buf -> - when (byteOrder) { - ByteOrder.BIG_ENDIAN -> buf.short - ByteOrder.LITTLE_ENDIAN -> buf.short.reverseBytes() - else -> throw IllegalArgumentException() - } - } - - fun getInt(byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN): Int = read { buf -> - when (byteOrder) { - ByteOrder.BIG_ENDIAN -> buf.int - ByteOrder.LITTLE_ENDIAN -> buf.int.reverseBytes() - else -> throw IllegalArgumentException() - } - } - - fun getLong(byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN): Long = read { buf -> - when (byteOrder) { - ByteOrder.BIG_ENDIAN -> buf.long - ByteOrder.LITTLE_ENDIAN -> buf.long.reverseBytes() - else -> throw IllegalArgumentException() - } - } - - fun getFloat(byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN): Float = read { buf -> - when (byteOrder) { - ByteOrder.BIG_ENDIAN -> buf.float - ByteOrder.LITTLE_ENDIAN -> buf.float.reverseBytes() - else -> throw IllegalArgumentException() - } - } - - fun getDouble(byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN): Double = read { buf -> - when (byteOrder) { - ByteOrder.BIG_ENDIAN -> buf.double - ByteOrder.LITTLE_ENDIAN -> buf.double.reverseBytes() - else -> throw IllegalArgumentException() - } - } - - fun getBytes(size: Int = readable): ByteArray = read { - if (it.limit() - it.position() < size) { - throw IndexOutOfBoundsException() - } - val bytes = ByteArray(size) - it.get(bytes) - bytes - } - - fun getString(size: Int = readable): String = String(getBytes(size)) - - fun toString(size: Int): String { - val bytes = getBytes(size) - // 将测试的字节返还回来 - readPosition -= bytes.size - return String(bytes) - } - - fun writeTo(buffer: ByteArray, bufferOffset: Int = 0, size: Int = min(readable, buffer.size)): Int { - val readSize = min(readable, size) - if (hasArray) { - array.copyInto(buffer, bufferOffset, readOffset, readOffset + readSize) - readPosition += readOffset - reset() - } else { - read { - it.put(buffer, bufferOffset, readSize) - } - } - return readSize - } - - fun writeTo(os: OutputStream, buffer: ByteArray? = null): Int { - val size = readable - if (hasArray) { - os.write(array, readOffset, size) - readPosition += size - reset() - } else { - @Suppress("NAME_SHADOWING") - val buffer = buffer ?: bufferThreadLocal.get() - read { - while (it.remaining() > 0) { - val min = min(it.remaining(), buffer.size) - it.get(buffer, 0, min) - os.write(buffer, 0, min) - } - } - } - return size - } - - fun writeTo(buffer: ByteBuffer): Int { - val size = min(readable, buffer.writeable) - if (hasArray) { - buffer.put(array, readOffset, size) - readPosition += size - reset() - } else { - read { read -> - buffer.write { write -> write.put(read) } - } - } - return size - } - - fun toByteArray() = getBytes() - - - /* - * 数据写入方法 - */ - - fun put(byte: Byte): Unit = write { it.put(byte) } - - fun put(char: Char, byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN): Unit = write { buf -> - buf.order(byteOrder) - buf.putChar(char) - } - - fun put(short: Short, byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN): Unit = write { buf -> - buf.order(byteOrder) - buf.putShort(short) - } - - fun put(int: Int, byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN): Unit = write { buf -> - buf.order(byteOrder) - buf.putInt(int) - } - - fun put(long: Long, byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN): Unit = write { buf -> - buf.order(byteOrder) - buf.putLong(long) - } - - fun put(float: Float, byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN): Unit = write { buf -> - buf.order(byteOrder) - buf.putFloat(float) - } - - fun put(double: Double, byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN): Unit = write { buf -> - buf.order(byteOrder) - buf.putDouble(double) - } - - fun put(str: String): Int = put(str.toByteArray()) - fun put(buffer: ByteBuffer): Int = buffer.writeTo(this) - fun put(byteArray: ByteArray, offset: Int = 0, len: Int = byteArray.size - offset): Int { - return if (hasArray) { - byteArray.copyInto(array, writeOffset, offset, offset + len) - writePosition += len - len - } else { - write { - val position = it.position() - it.put(byteArray, offset, len) - it.position() - position - } - } - } - - fun put( - array: CharArray, - index: Int = 0, - size: Int = array.size - index, - byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN, - ) { - array.forEachIndex(index, index + size - 1) { put(it, byteOrder) } - } - - fun put( - array: ShortArray, - index: Int = 0, - size: Int = array.size - index, - byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN, - ) { - array.forEachIndex(index, index + size - 1) { put(it, byteOrder) } - } - - fun put( - array: IntArray, - index: Int = 0, - size: Int = array.size - index, - byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN, - ) { - array.forEachIndex(index, index + size - 1) { put(it, byteOrder) } - } - - fun put( - array: LongArray, - index: Int = 0, - size: Int = array.size - index, - byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN, - ) { - array.forEachIndex(index, index + size - 1) { put(it, byteOrder) } - } - - fun put( - array: FloatArray, - index: Int = 0, - size: Int = array.size - index, - byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN, - ) { - array.forEachIndex(index, index + size - 1) { put(it, byteOrder) } - } - - fun put( - array: DoubleArray, - index: Int = 0, - size: Int = array.size - index, - byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN, - ) { - array.forEachIndex(index, index + size - 1) { put(it, byteOrder) } - } - - fun put(inputStream: InputStream): Int { - return if (hasArray) { - val read = inputStream.read(array, writeOffset, writeable) - if (read < 0) throw IOException("stream closed") - writePosition += read - read - } else { - val buffer = bufferThreadLocal.get() - val read = inputStream.read(buffer) - put(buffer, 0, read) - } - } - - fun put(inputStream: InputStream, size: Int): Int { - assert(size <= writeable) - return if (hasArray) { - val read = inputStream.read(array, writeOffset, size) - if (read > 0) { - writePosition += read - } - read - } else { - val buffer = ByteArray(size) - val read = inputStream.read(buffer) - if (read > 0) { - put(buffer, 0, read) - } - read - } - } - - fun putByte(byte: Byte): Unit = put(byte) - fun putChar(char: Char, byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN): Unit = put(char, byteOrder) - fun putShort(short: Short, byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN): Unit = put(short, byteOrder) - fun putInt(int: Int, byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN): Unit = put(int, byteOrder) - fun putLong(long: Long, byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN): Unit = put(long, byteOrder) - fun putFloat(float: Float, byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN): Unit = put(float, byteOrder) - fun putDouble(double: Double, byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN): Unit = put(double, byteOrder) - - fun putString(str: String): Int = put(str) - fun putBuffer(buffer: ByteBuffer): Int = put(buffer) - fun putBytes(byteArray: ByteArray, startIndex: Int = 0, endIndex: Int = byteArray.size - startIndex) = - put(byteArray, startIndex, endIndex) - - fun putChars( - array: CharArray, - index: Int = 0, - size: Int = array.size - index, - byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN, - ) = put(array, index, size, byteOrder) - - fun putShorts( - array: ShortArray, - index: Int = 0, - size: Int = array.size - index, - byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN, - ) = put(array, index, size, byteOrder) - - fun putInts( - array: IntArray, - index: Int = 0, - size: Int = array.size - index, - byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN, - ) = put(array, index, size, byteOrder) - - fun putLongs( - array: LongArray, - index: Int = 0, - size: Int = array.size - index, - byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN, - ) = put(array, index, size, byteOrder) - - fun putFloats( - array: FloatArray, - index: Int = 0, - size: Int = array.size - index, - byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN, - ) = put(array, index, size, byteOrder) - - fun putDoubles( - array: DoubleArray, - index: Int = 0, - size: Int = array.size - index, - byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN, - ) = put(array, index, size, byteOrder) - - fun fill(byte: Byte) { - readPosition = 0 - writePosition = 0 - write { - while (it.remaining() != 0) { - it.put(byte) - } - } - writePosition = 0 - } - - fun split(maxSize: Int): List { + fun split(maxSize: Int): Array { val size = (((capacity - 1) / maxSize) + 1).and(0x7fff_ffff) return Array(size) { if (it != size - 1) { @@ -419,7 +28,7 @@ interface ByteBuffer : Closeable { } else { slice(it * maxSize, capacity - it * maxSize) } - }.asList() + } } fun readAllSize(): Int { diff --git a/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/ByteBufferExtension.kt b/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/ByteBufferExtension.kt index 61c9581..e256829 100644 --- a/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/ByteBufferExtension.kt +++ b/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/ByteBufferExtension.kt @@ -5,14 +5,6 @@ package cn.tursom.core.buffer -import cn.tursom.core.buffer.NioBuffers.Arrays.Companion.readArrays -import cn.tursom.core.buffer.NioBuffers.Arrays.Companion.writeArrays -import cn.tursom.core.buffer.NioBuffers.Lists.Companion.readLists -import cn.tursom.core.buffer.NioBuffers.Lists.Companion.writeLists -import cn.tursom.core.buffer.NioBuffers.Sequences.Companion.readSequences -import cn.tursom.core.buffer.NioBuffers.Sequences.Companion.writeSequences -import cn.tursom.core.buffer.NioBuffers.readNioBuffers -import cn.tursom.core.buffer.NioBuffers.writeNioBuffers import cn.tursom.core.buffer.impl.ArrayByteBuffer import cn.tursom.core.toBytes import cn.tursom.core.toInt @@ -26,7 +18,7 @@ import java.nio.channels.WritableByteChannel /** * 使用读 buffer,ByteBuffer 实现类有义务维护指针正常推进 */ -inline fun ByteBuffer.read(block: (java.nio.ByteBuffer) -> T): T { +inline fun ReadableByteBuffer.read(block: (java.nio.ByteBuffer) -> T): T { val buffer = readBuffer() return try { block(buffer) @@ -38,7 +30,7 @@ inline fun ByteBuffer.read(block: (java.nio.ByteBuffer) -> T): T { /** * 使用写 buffer,ByteBuffer 实现类有义务维护指针正常推进 */ -inline fun ByteBuffer.write(block: (java.nio.ByteBuffer) -> T): T { +inline fun WriteableByteBuffer.write(block: (java.nio.ByteBuffer) -> T): T { val buffer = writeBuffer() return try { block(buffer) @@ -47,69 +39,60 @@ inline fun ByteBuffer.write(block: (java.nio.ByteBuffer) -> T): T { } } -fun ReadableByteChannel.read(buffer: ByteBuffer): Int { - if (this is ScatteringByteChannel) { - val arrays = buffer.getExtension(NioBuffers.Arrays) - if (arrays != null) { - return arrays.writeArrays { nioBuffers -> - read(nioBuffers) - }.toInt() - } +fun ReadableByteChannel.read(buffer: ByteBuffer): Long { + if (buffer is NioBuffers.Arrays) { + val buffers = buffer.writeBufferArray() + try { + if (this is ScatteringByteChannel) { + return read(buffers) + } - val list = buffer.getExtension(NioBuffers.Lists) - if (list != null) { - return list.writeLists { nioBuffers -> - read(nioBuffers.toTypedArray()) - }.toInt() - } - - val sequences = buffer.getExtension(NioBuffers.Sequences) - if (sequences != null) { - return sequences.writeSequences { nioBuffers -> - read(nioBuffers.toList().toTypedArray()) - }.toInt() + var read = 0L + buffers.forEach { buf -> + if (buf.remaining() == 0) { + return@forEach + } + val readOnce = read(buf) + if (readOnce == 0) { + return read + } + read += readOnce + } + return read + } finally { + buffer.finishWrite(buffers) } } - return buffer.write { read(it) } + return buffer.write { read(it).toLong() } } -fun WritableByteChannel.write(buffer: ByteBuffer): Int { - if (this is GatheringByteChannel) { - val arrays = buffer.getExtension(NioBuffers.Arrays) - if (arrays != null) { - return arrays.readArrays { nioBuffers -> - write(nioBuffers) - }.toInt() - } +fun WritableByteChannel.write(buffer: ByteBuffer): Long { + if (buffer is NioBuffers.Arrays) { + val buffers = buffer.readBufferArray() + try { + if (this is GatheringByteChannel) { + return write(buffers) + } - val list = buffer.getExtension(NioBuffers.Lists) - if (list != null) { - return list.readLists { nioBuffers -> - write(nioBuffers.toTypedArray()) - }.toInt() - } - - val sequences = buffer.getExtension(NioBuffers.Sequences) - if (sequences != null) { - return sequences.readSequences { nioBuffers -> - write(nioBuffers.toList().toTypedArray()) - }.toInt() + var write = 0L + buffers.forEach { buf -> + if (buf.remaining() == 0) { + return@forEach + } + val writeOnce = write(buf) + if (writeOnce == 0) { + return write + } + write += writeOnce + } + return write + } finally { + buffer.finishRead(buffers) } } - return buffer.read { write(it) } -} -fun ScatteringByteChannel.read( - buffers: Array -): Long = buffers.writeNioBuffers { bufferList -> - read(bufferList.toTypedArray()) -} - -fun GatheringByteChannel.write( - buffers: Array -): Long = buffers.readNioBuffers { bufferList -> - write(bufferList.toTypedArray()) + return buffer.read { write(it).toLong() } } fun Array.asMultipleByteBuffer() = ArrayByteBuffer(buffers = this) diff --git a/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/ByteBufferExtensionKey.kt b/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/ByteBufferExtensionKey.kt index 765a06d..c743376 100644 --- a/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/ByteBufferExtensionKey.kt +++ b/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/ByteBufferExtensionKey.kt @@ -10,4 +10,3 @@ interface ByteBufferExtensionKey { null } } - diff --git a/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/MultipleByteBuffer.kt b/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/MultipleByteBuffer.kt index b0674c2..e02c1b4 100644 --- a/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/MultipleByteBuffer.kt +++ b/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/MultipleByteBuffer.kt @@ -1,168 +1,113 @@ package cn.tursom.core.buffer -import cn.tursom.core.buffer.impl.ListByteBuffer -import cn.tursom.core.forEachIndex -import cn.tursom.core.toBytes +import cn.tursom.core.* +import cn.tursom.core.buffer.NioBuffers.readNioBuffers +import cn.tursom.core.buffer.NioBuffers.writeNioBuffers import java.io.Closeable import java.io.InputStream import java.io.OutputStream import java.nio.ByteOrder +import kotlin.math.min @Suppress("unused") -interface MultipleByteBuffer : Closeable, ByteBuffer, NioBuffers.Sequences { - val buffers: List get() = listOf(this) - val buffersArray: Array get() = arrayOf(this) +interface MultipleByteBuffer : Closeable, ByteBuffer, NioBuffers.Arrays { + val buffers: Array + val bufferIterable: Iterable + val bufferSize: Int get() = buffers.size + /** + * append and give ownership to this MultipleByteBuffer + */ fun append(buffer: ByteBuffer) - /** - * 使用读 buffer,ByteBuffer 实现类有义务维护指针正常推进 - */ - fun readBuffers(block: (Sequence) -> T): T { - val buffer = readBufferSequence() - return try { - block(buffer) - } finally { - finishRead(buffer) - } - } - - /** - * 使用写 buffer,ByteBuffer 实现类有义务维护指针正常推进 - */ - fun writeBuffers(block: (Sequence) -> T): T { - val buffer = writeBufferSequence() - return try { - block(buffer) - } finally { - finishWrite(buffer) - } - } - - override fun readBufferSequence(): Sequence = sequence { - buffers.forEach { subBuf -> - val sequences = subBuf.getExtension(NioBuffers.Sequences) - if (sequences != null) { - yieldAll(sequences.readBufferSequence()) - } else { - yield(subBuf.readBuffer()) - } - } - } - - override fun writeBufferSequence(): Sequence = sequence { - buffers.forEach { subBuf -> - val sequences = subBuf.getExtension(NioBuffers.Sequences) - if (sequences != null) { - yieldAll(sequences.writeBufferSequence()) - } else { - yield(subBuf.writeBuffer()) - } - } - } - - fun finishRead(buffers: Sequence) = finishRead(buffers.iterator()) - override fun finishRead(buffers: Iterator) { - this.buffers.forEach { subBuf -> - val sequences = subBuf.getExtension(NioBuffers.Sequences) - if (sequences != null) { - sequences.finishRead(buffers) - } else { - subBuf.finishRead(buffers.next()) - } - } - } - - fun finishWrite(buffers: Sequence) = finishWrite(buffers.iterator()) - override fun finishWrite(buffers: Iterator) { - this.buffers.forEach { subBuf -> - val sequences = subBuf.getExtension(NioBuffers.Sequences) - if (sequences != null) { - sequences.finishWrite(buffers) - } else { - subBuf.finishWrite(buffers.next()) - } - } - } - - override fun close() = buffers.forEach(ByteBuffer::close) - override fun slice(position: Int, size: Int): MultipleByteBuffer { - return ListByteBuffer(ArrayList(buffers.subList(position, position + size))) - } + override fun close() = bufferIterable.forEach(ByteBuffer::close) + override fun slice(position: Int, size: Int): MultipleByteBuffer = + throw UnsupportedOperationException() override fun slice(position: Int, size: Int, readPosition: Int, writePosition: Int): ByteBuffer = throw UnsupportedOperationException() - override fun fill(byte: Byte) = buffers.forEach { it.fill(byte) } - override fun clear() = buffers.forEach { it.clear() } - override fun reset() = buffers.forEach { it.reset() } + override fun fill(byte: Byte) = bufferIterable.forEach { it.fill(byte) } + override fun clear() = bufferIterable.forEach { it.clear() } + override fun reset() = bufferIterable.forEach { it.reset() } override val resized: Boolean get() = false override val hasArray: Boolean get() = false override val array: ByteArray get() = throw UnsupportedOperationException() override val arrayOffset: Int get() = 0 - override val capacity: Int get() = buffers.sumOf { it.capacity } - override val isReadable: Boolean get() = buffers.any { it.isReadable } - override val isWriteable: Boolean get() = buffers.any { it.isWriteable } - override val readable: Int get() = buffers.sumOf { it.readable } - override val writeable: Int get() = buffers.sumOf { it.writeable } override fun readBuffer(): java.nio.ByteBuffer = throw UnsupportedOperationException() + override fun finishRead(buffer: java.nio.ByteBuffer) = throw UnsupportedOperationException() override fun writeBuffer(): java.nio.ByteBuffer = throw UnsupportedOperationException() + override fun finishWrite(buffer: java.nio.ByteBuffer) = throw UnsupportedOperationException() override fun resize(newSize: Int): Boolean = false override fun get(): Byte - override fun getChar(byteOrder: ByteOrder): Char = cn.tursom.core.toChar(byteOrder) { get() } - override fun getShort(byteOrder: ByteOrder): Short = cn.tursom.core.toShort(byteOrder) { get() } - override fun getInt(byteOrder: ByteOrder): Int = cn.tursom.core.toInt(byteOrder) { get() } - override fun getLong(byteOrder: ByteOrder): Long = cn.tursom.core.toLong(byteOrder) { get() } - override fun getFloat(byteOrder: ByteOrder): Float = cn.tursom.core.toFloat(byteOrder) { get() } - override fun getDouble(byteOrder: ByteOrder): Double = cn.tursom.core.toDouble(byteOrder) { get() } + override fun getChar(byteOrder: ByteOrder): Char = toChar(byteOrder) { get() } + override fun getShort(byteOrder: ByteOrder): Short = toShort(byteOrder) { get() } + override fun getInt(byteOrder: ByteOrder): Int = toInt(byteOrder) { get() } + override fun getLong(byteOrder: ByteOrder): Long = toLong(byteOrder) { get() } + override fun getFloat(byteOrder: ByteOrder): Float = toFloat(byteOrder) { get() } + override fun getDouble(byteOrder: ByteOrder): Double = toDouble(byteOrder) { get() } override fun getBytes(size: Int): ByteArray { - val buffer = ByteArray(size) - buffer.indices.forEach { - buffer[it] = get() + if (size == 0) { + return ByteArray(0) } + val buffer = ByteArray(size) + writeTo(buffer, 0, size) return buffer } override fun writeTo(buffer: ByteArray, bufferOffset: Int, size: Int): Int { - var write = 0 - try { - repeat(size) { - buffer[bufferOffset + it] = get() - write++ - } - } catch (e: Exception) { + if (size == 0) { + return 0 } - return write + var writePosition = bufferOffset + readNioBuffers { buffers -> + buffers.forEach { buf -> + val limit = min(buf.remaining(), size - writePosition) + if (limit == 0) { + return@forEach + } + buf.get(buffer, writePosition, limit) + writePosition += limit + if (writePosition == size) { + return@readNioBuffers + } + } + } + return writePosition - bufferOffset } override fun writeTo(os: OutputStream, buffer: ByteArray?): Int { var write = 0 - try { - while (true) { - os.write(get().toInt()) - write++ - } - } catch (e: Exception) { - } + + @Suppress("NAME_SHADOWING") + val buffer = buffer ?: Utils.bufferThreadLocal.get() + do { + val written = writeTo(buffer) + write += written + os.write(buffer, 0, written) + } while (written != 0) return write } - override fun writeTo(buffer: ByteBuffer): Int { + override fun writeTo(buffer: WriteableByteBuffer): Int { var write = 0 - try { - while (true) { - buffer.put(get().toInt()) - write++ + val buf = Utils.bufferThreadLocal.get() + do { + val written = writeTo(buf, 0, min(buffer.writeable, min(readable, buf.size))) + if (written == 0) { + break } - } catch (e: Exception) { - } + write += written + buffer.putBytes(buf, 0, written) + write++ + } while (true) return write } @@ -193,9 +138,18 @@ interface MultipleByteBuffer : Closeable, ByteBuffer, NioBuffers.Sequences { override fun put(byteArray: ByteArray, offset: Int, len: Int): Int { var write = 0 - byteArray.forEachIndex(offset, offset + len) { - put(it) - write++ + writeNioBuffers { buffers -> + buffers.forEach { + if (it.remaining() == 0) { + return@forEach + } + val limit = min(it.remaining(), len - write) + it.put(byteArray, offset + write, limit) + write += limit + if (len == write) { + return@writeNioBuffers + } + } } return write } @@ -210,6 +164,6 @@ interface MultipleByteBuffer : Closeable, ByteBuffer, NioBuffers.Sequences { return read } - override fun split(maxSize: Int): List = throw UnsupportedOperationException() + override fun split(maxSize: Int): Array = throw UnsupportedOperationException() override fun readAllSize(): Int = throw UnsupportedOperationException() } \ No newline at end of file diff --git a/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/NioBuffers.kt b/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/NioBuffers.kt index 72c1b52..6a4c1b5 100644 --- a/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/NioBuffers.kt +++ b/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/NioBuffers.kt @@ -2,222 +2,86 @@ package cn.tursom.core.buffer object NioBuffers { + + interface Arrays { + fun readBufferArray(): Array + fun finishRead(buffers: Array): Long + + fun writeBufferArray(): Array + fun finishWrite(buffers: Array): Long + } + + inline fun Arrays.readNioBuffers(action: (bufferList: Array) -> T): T { + val buffers = readBufferArray() + return try { + action(buffers) + } finally { + finishRead(buffers) + } + } + + inline fun Arrays.writeNioBuffers(action: (bufferList: Array) -> T): T { + val buffers = writeBufferArray() + return try { + action(buffers) + } finally { + finishWrite(buffers) + } + } + inline fun Array.readNioBuffers( - action: (bufferList: List) -> T + offset: Int, + length: Int, + action: (bufferList: Array) -> T, ): T { - val bufferList = getReadNioBufferList() + val bufferList = getReadNioBufferList(offset, length) try { return action(bufferList) } finally { - finishRead(bufferList.iterator()) - } - } - - inline fun Sequence.readNioBuffers( - action: (bufferList: List) -> T - ): T { - val bufferList = getReadNioBufferList() - try { - return action(bufferList) - } finally { - finishRead(bufferList.iterator()) - } - } - - inline fun Iterable.readNioBuffers( - action: (bufferList: List) -> T - ): T { - val bufferList = getReadNioBufferList() - try { - return action(bufferList) - } finally { - finishRead(bufferList.iterator()) + finishRead(bufferList, offset) } } inline fun Array.writeNioBuffers( - action: (bufferList: List) -> T + offset: Int, + length: Int, + action: (bufferList: Array) -> T, ): T { - val bufferList = getWriteNioBufferList() + val bufferList = getWriteNioBufferList(offset, length) try { return action(bufferList) } finally { - finishWrite(bufferList.iterator()) + finishWrite(bufferList, offset) } } - inline fun Sequence.writeNioBuffers( - action: (bufferList: List) -> T - ): T { - val bufferList = getWriteNioBufferList() - try { - return action(bufferList) - } finally { - finishWrite(bufferList.iterator()) - } + fun Array.getReadNioBufferList( + offset: Int = 0, + length: Int = size - offset, + ): Array = Array(length) { + get(offset + it).readBuffer() } - inline fun Iterable.writeNioBuffers( - action: (bufferList: List) -> T - ): T { - val bufferList = getWriteNioBufferList() - try { - return action(bufferList) - } finally { - finishWrite(bufferList.iterator()) + fun Array.finishRead(buffers: Array, offset: Int): Long { + var readed = 0L + buffers.forEachIndexed { index, byteBuffer -> + readed += get(offset + index).finishRead(byteBuffer) } + return readed } - fun Array.getReadNioBufferList(): List = iterator().getReadNioBufferList() - fun Sequence.getReadNioBufferList(): List = iterator().getReadNioBufferList() - fun Iterable.getReadNioBufferList(): List = iterator().getReadNioBufferList() - fun Iterator.getReadNioBufferList(): List { - val bufferList = ArrayList() - forEach { - val nioBuffersList = it.getExtension(Sequences) - if (nioBuffersList != null) { - bufferList.addAll(nioBuffersList.readBufferSequence()) - return@forEach - } - - bufferList.add(it.readBuffer()) - } - - return bufferList + fun Array.getWriteNioBufferList( + offset: Int = 0, + length: Int = size - offset, + ): Array = Array(length) { + get(offset + it).writeBuffer() } - fun Array.finishRead(iterator: Iterator) = iterator().finishRead(iterator) - fun Sequence.finishRead(iterator: Iterator) = iterator().finishRead(iterator) - fun Iterable.finishRead(iterator: Iterator) = iterator().finishRead(iterator) - fun Iterator.finishRead(iterator: Iterator) { - forEach { - val nioBuffersList = it.getExtension(Sequences) - if (nioBuffersList != null) { - nioBuffersList.finishRead(iterator) - return@forEach - } - - it.finishRead(iterator.next()) + fun Array.finishWrite(buffers: Array, offset: Int): Long { + var written = 0L + buffers.forEachIndexed { index, byteBuffer -> + written += get(offset + index).finishWrite(byteBuffer) } - } - - fun Array.getWriteNioBufferList(): List = iterator().getWriteNioBufferList() - fun Sequence.getWriteNioBufferList(): List = iterator().getWriteNioBufferList() - fun Iterable.getWriteNioBufferList(): List = iterator().getWriteNioBufferList() - fun Iterator.getWriteNioBufferList(): List { - val bufferList = ArrayList() - forEach { - val nioBuffersList = it.getExtension(Sequences) - if (nioBuffersList != null) { - bufferList.addAll(nioBuffersList.writeBufferSequence()) - return@forEach - } - - bufferList.add(it.writeBuffer()) - } - - return bufferList - } - - fun Array.finishWrite(iterator: Iterator) = iterator().finishWrite(iterator) - fun Sequence.finishWrite(iterator: Iterator) = iterator().finishWrite(iterator) - fun Iterable.finishWrite(iterator: Iterator) = iterator().finishWrite(iterator) - fun Iterator.finishWrite(iterator: Iterator) { - forEach { - val nioBuffersList = it.getExtension(Sequences) - if (nioBuffersList != null) { - nioBuffersList.finishWrite(iterator) - return@forEach - } - - it.finishRead(iterator.next()) - } - } - - interface Sequences { - companion object : ByteBufferExtensionKey { - override val extensionClass: Class = Sequences::class.java - - inline fun Sequences.readSequences(action: (nioBuffers: Sequence) -> T): T { - val sequence = readBufferSequence() - val ret = action(sequence) - finishRead(sequence.iterator()) - return ret - } - - inline fun Sequences.writeSequences(action: (nioBuffers: Sequence) -> T): T { - val sequence = writeBufferSequence() - val ret = action(sequence) - finishWrite(sequence.iterator()) - return ret - } - } - - fun readBufferSequence(): Sequence - fun finishRead(buffers: Iterator) - - fun writeBufferSequence(): Sequence - fun finishWrite(buffers: Iterator) - } - - interface Lists : Sequences { - companion object : ByteBufferExtensionKey { - override val extensionClass: Class = Lists::class.java - - inline fun Lists.readLists(action: (nioBuffers: List) -> T): T { - val list = readBufferList() - val ret = action(list) - finishRead(list.iterator()) - return ret - } - - inline fun Lists.writeLists(action: (nioBuffers: List) -> T): T { - val list = writeBufferList() - val ret = action(list) - finishWrite(list.iterator()) - return ret - } - } - - override fun readBufferSequence(): Sequence = readBufferList().asSequence() - override fun writeBufferSequence(): Sequence = writeBufferList().asSequence() - - fun readBufferList(): List - override fun finishRead(buffers: Iterator) - - fun writeBufferList(): List - override fun finishWrite(buffers: Iterator) - } - - interface Arrays : Lists { - companion object : ByteBufferExtensionKey { - override val extensionClass: Class = Arrays::class.java - - inline fun Arrays.readArrays(action: (nioBuffers: Array) -> T): T { - val arrayOfByteBuffers = readBufferArray() - val ret = action(arrayOfByteBuffers) - finishRead(arrayOfByteBuffers.iterator()) - return ret - } - - inline fun Arrays.writeArrays(action: (nioBuffers: Array) -> T): T { - val arrayOfByteBuffers = writeBufferArray() - val ret = action(arrayOfByteBuffers) - finishWrite(arrayOfByteBuffers.iterator()) - return ret - } - } - - override fun readBufferSequence(): Sequence = readBufferArray().asSequence() - override fun writeBufferSequence(): Sequence = writeBufferArray().asSequence() - - override fun readBufferList(): List = readBufferArray().asList() - override fun writeBufferList(): List = writeBufferArray().asList() - - fun readBufferArray(): Array - override fun finishRead(buffers: Iterator) - - fun writeBufferArray(): Array - override fun finishWrite(buffers: Iterator) + return written } } \ No newline at end of file diff --git a/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/ReadableByteBuffer.kt b/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/ReadableByteBuffer.kt new file mode 100644 index 0000000..95d6ad7 --- /dev/null +++ b/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/ReadableByteBuffer.kt @@ -0,0 +1,147 @@ +package cn.tursom.core.buffer + +import cn.tursom.core.Utils +import cn.tursom.core.reverseBytes +import java.io.OutputStream +import java.nio.ByteOrder +import kotlin.math.min + +interface ReadableByteBuffer : BasicByteBuffer { + fun readBuffer(): java.nio.ByteBuffer + fun finishRead(buffer: java.nio.ByteBuffer): Int + + /** + * 使用读 buffer,ByteBuffer 实现类有义务维护指针正常推进 + */ + fun readBuffer(block: (java.nio.ByteBuffer) -> T): T { + val buffer = readBuffer() + return try { + block(buffer) + } finally { + finishRead(buffer) + } + } + + fun skip(n: Int): Int { + readPosition += n + return n + } + + fun get(): Byte = read { it.get() } + + fun getChar(byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN): Char = read { buf -> + when (byteOrder) { + ByteOrder.BIG_ENDIAN -> buf.char + ByteOrder.LITTLE_ENDIAN -> buf.char.reverseBytes() + else -> throw IllegalArgumentException() + } + } + + fun getShort(byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN): Short = read { buf -> + when (byteOrder) { + ByteOrder.BIG_ENDIAN -> buf.short + ByteOrder.LITTLE_ENDIAN -> buf.short.reverseBytes() + else -> throw IllegalArgumentException() + } + } + + fun getInt(byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN): Int = read { buf -> + when (byteOrder) { + ByteOrder.BIG_ENDIAN -> buf.int + ByteOrder.LITTLE_ENDIAN -> buf.int.reverseBytes() + else -> throw IllegalArgumentException() + } + } + + fun getLong(byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN): Long = read { buf -> + when (byteOrder) { + ByteOrder.BIG_ENDIAN -> buf.long + ByteOrder.LITTLE_ENDIAN -> buf.long.reverseBytes() + else -> throw IllegalArgumentException() + } + } + + fun getFloat(byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN): Float = read { buf -> + when (byteOrder) { + ByteOrder.BIG_ENDIAN -> buf.float + ByteOrder.LITTLE_ENDIAN -> buf.float.reverseBytes() + else -> throw IllegalArgumentException() + } + } + + fun getDouble(byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN): Double = read { buf -> + when (byteOrder) { + ByteOrder.BIG_ENDIAN -> buf.double + ByteOrder.LITTLE_ENDIAN -> buf.double.reverseBytes() + else -> throw IllegalArgumentException() + } + } + + fun getBytes(size: Int = readable): ByteArray = read { + if (it.limit() - it.position() < size) { + throw IndexOutOfBoundsException() + } + val bytes = ByteArray(size) + it.get(bytes) + bytes + } + + fun getString(size: Int = readable): String = String(getBytes(size)) + + fun toString(size: Int): String { + val bytes = getBytes(size) + // 将测试的字节返还回来 + readPosition -= bytes.size + return String(bytes) + } + + fun writeTo(buffer: ByteArray, bufferOffset: Int = 0, size: Int = min(readable, buffer.size)): Int { + val readSize = min(readable, size) + if (hasArray) { + array.copyInto(buffer, bufferOffset, readOffset, readOffset + readSize) + readPosition += readOffset + reset() + } else { + read { + it.put(buffer, bufferOffset, readSize) + } + } + return readSize + } + + fun writeTo(os: OutputStream, buffer: ByteArray? = null): Int { + val size = readable + if (hasArray) { + os.write(array, readOffset, size) + readPosition += size + reset() + } else { + @Suppress("NAME_SHADOWING") + val buffer = buffer ?: Utils.bufferThreadLocal.get() + read { + while (it.remaining() > 0) { + val min = min(it.remaining(), buffer.size) + it.get(buffer, 0, min) + os.write(buffer, 0, min) + } + } + } + return size + } + + fun writeTo(buffer: WriteableByteBuffer): Int { + val size = min(readable, buffer.writeable) + if (hasArray) { + buffer.put(array, readOffset, size) + readPosition += size + reset() + } else { + read { read -> + buffer.write { write -> write.put(read) } + } + } + return size + } + + fun toByteArray() = getBytes() +} diff --git a/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/WriteableByteBuffer.kt b/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/WriteableByteBuffer.kt new file mode 100644 index 0000000..7bb768c --- /dev/null +++ b/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/WriteableByteBuffer.kt @@ -0,0 +1,223 @@ +package cn.tursom.core.buffer + +import cn.tursom.core.Utils +import cn.tursom.core.forEachIndex +import java.io.IOException +import java.io.InputStream +import java.nio.ByteOrder + +interface WriteableByteBuffer : BasicByteBuffer { + fun writeBuffer(): java.nio.ByteBuffer + fun finishWrite(buffer: java.nio.ByteBuffer): Int + + /** + * 使用写 buffer,ByteBuffer 实现类有义务维护指针正常推进 + */ + fun writeBuffer(block: (java.nio.ByteBuffer) -> T): T { + val buffer = writeBuffer() + return try { + block(buffer) + } finally { + finishWrite(buffer) + } + } + + fun put(byte: Byte): Unit = write { it.put(byte) } + + fun put(char: Char, byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN): Unit = write { buf -> + buf.order(byteOrder) + buf.putChar(char) + } + + fun put(short: Short, byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN): Unit = write { buf -> + buf.order(byteOrder) + buf.putShort(short) + } + + fun put(int: Int, byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN): Unit = write { buf -> + buf.order(byteOrder) + buf.putInt(int) + } + + fun put(long: Long, byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN): Unit = write { buf -> + buf.order(byteOrder) + buf.putLong(long) + } + + fun put(float: Float, byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN): Unit = write { buf -> + buf.order(byteOrder) + buf.putFloat(float) + } + + fun put(double: Double, byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN): Unit = write { buf -> + buf.order(byteOrder) + buf.putDouble(double) + } + + fun put(str: String): Int = put(str.toByteArray()) + fun put(buffer: ReadableByteBuffer): Int = buffer.writeTo(this) + fun put(byteArray: ByteArray, offset: Int = 0, len: Int = byteArray.size - offset): Int { + return if (hasArray) { + byteArray.copyInto(array, writeOffset, offset, offset + len) + writePosition += len + len + } else { + write { + val position = it.position() + it.put(byteArray, offset, len) + it.position() - position + } + } + } + + fun put( + array: CharArray, + index: Int = 0, + size: Int = array.size - index, + byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN, + ) { + array.forEachIndex(index, index + size - 1) { put(it, byteOrder) } + } + + fun put( + array: ShortArray, + index: Int = 0, + size: Int = array.size - index, + byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN, + ) { + array.forEachIndex(index, index + size - 1) { put(it, byteOrder) } + } + + fun put( + array: IntArray, + index: Int = 0, + size: Int = array.size - index, + byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN, + ) { + array.forEachIndex(index, index + size - 1) { put(it, byteOrder) } + } + + fun put( + array: LongArray, + index: Int = 0, + size: Int = array.size - index, + byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN, + ) { + array.forEachIndex(index, index + size - 1) { put(it, byteOrder) } + } + + fun put( + array: FloatArray, + index: Int = 0, + size: Int = array.size - index, + byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN, + ) { + array.forEachIndex(index, index + size - 1) { put(it, byteOrder) } + } + + fun put( + array: DoubleArray, + index: Int = 0, + size: Int = array.size - index, + byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN, + ) { + array.forEachIndex(index, index + size - 1) { put(it, byteOrder) } + } + + fun put(inputStream: InputStream): Int { + return if (hasArray) { + val read = inputStream.read(array, writeOffset, writeable) + if (read < 0) throw IOException("stream closed") + writePosition += read + read + } else { + val buffer = Utils.bufferThreadLocal.get() + val read = inputStream.read(buffer) + put(buffer, 0, read) + } + } + + fun put(inputStream: InputStream, size: Int): Int { + assert(size <= writeable) + return if (hasArray) { + val read = inputStream.read(array, writeOffset, size) + if (read > 0) { + writePosition += read + } + read + } else { + val buffer = ByteArray(size) + val read = inputStream.read(buffer) + if (read > 0) { + put(buffer, 0, read) + } + read + } + } + + fun putByte(byte: Byte): Unit = put(byte) + fun putChar(char: Char, byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN): Unit = put(char, byteOrder) + fun putShort(short: Short, byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN): Unit = put(short, byteOrder) + fun putInt(int: Int, byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN): Unit = put(int, byteOrder) + fun putLong(long: Long, byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN): Unit = put(long, byteOrder) + fun putFloat(float: Float, byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN): Unit = put(float, byteOrder) + fun putDouble(double: Double, byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN): Unit = put(double, byteOrder) + + fun putString(str: String): Int = put(str) + fun putBuffer(buffer: ReadableByteBuffer): Int = put(buffer) + fun putBytes(byteArray: ByteArray, startIndex: Int = 0, endIndex: Int = byteArray.size - startIndex) = + put(byteArray, startIndex, endIndex) + + fun putChars( + array: CharArray, + index: Int = 0, + size: Int = array.size - index, + byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN, + ) = put(array, index, size, byteOrder) + + fun putShorts( + array: ShortArray, + index: Int = 0, + size: Int = array.size - index, + byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN, + ) = put(array, index, size, byteOrder) + + fun putInts( + array: IntArray, + index: Int = 0, + size: Int = array.size - index, + byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN, + ) = put(array, index, size, byteOrder) + + fun putLongs( + array: LongArray, + index: Int = 0, + size: Int = array.size - index, + byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN, + ) = put(array, index, size, byteOrder) + + fun putFloats( + array: FloatArray, + index: Int = 0, + size: Int = array.size - index, + byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN, + ) = put(array, index, size, byteOrder) + + fun putDoubles( + array: DoubleArray, + index: Int = 0, + size: Int = array.size - index, + byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN, + ) = put(array, index, size, byteOrder) + + fun fill(byte: Byte) { + readPosition = 0 + writePosition = 0 + write { + while (it.remaining() != 0) { + it.put(byte) + } + } + writePosition = 0 + } +} diff --git a/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/impl/ArrayByteBuffer.kt b/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/impl/ArrayByteBuffer.kt index 09a17dc..df4851b 100644 --- a/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/impl/ArrayByteBuffer.kt +++ b/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/impl/ArrayByteBuffer.kt @@ -1,11 +1,165 @@ package cn.tursom.core.buffer.impl import cn.tursom.core.buffer.ByteBuffer +import cn.tursom.core.buffer.MultipleByteBuffer +import cn.tursom.core.buffer.NioBuffers.finishRead +import cn.tursom.core.buffer.NioBuffers.finishWrite +import cn.tursom.core.buffer.NioBuffers.getReadNioBufferList +import cn.tursom.core.buffer.NioBuffers.getWriteNioBufferList +import cn.tursom.core.uncheckedCast class ArrayByteBuffer( vararg buffers: ByteBuffer, -) : ListByteBuffer(ArrayList(buffers.asList())) { +) : MultipleByteBuffer { + constructor( + buffer: Array, + offset: Int = 0, + length: Int = buffer.size - offset, + ) : this(buffers = Array(length) { buffer[offset + it] }) + + override val bufferIterable: List get() = buffers.asList() + override val bufferSize = buffers.sumOf { + if (it is MultipleByteBuffer) { + it.bufferSize + } else { + 1 + } + } + override val buffers: Array = if (bufferSize == buffers.size) { + buffers + } else { + val array = arrayOfNulls(bufferSize).uncheckedCast>() + var index = 0 + buffers.forEach { buffer -> + if (buffer is MultipleByteBuffer) { + buffer.bufferIterable.forEach { + array[index++] = it + } + } else { + array[index++] = buffer + } + } + array + } + + override var capacity: Int = 0 + private set + override var writePosition: Int = this.buffers.sumOf { it.writePosition } + override var readPosition: Int = this.buffers.sumOf { it.readPosition } + + private var readBufIndex = 0 + private var readBuf = this.buffers[readBufIndex++] + get() { + while (field.readable == 0 && readBufIndex < buffers.size) { + field = buffers[readBufIndex++] + } + return field + } + private var writeBufIndex = 0 + private var writeBuf = this.buffers[writeBufIndex++] + get() { + while (field.writeable == 0 && writeBufIndex < buffers.size) { + field = buffers[writeBufIndex++] + } + return field + } + + init { + initCapacity() + } + + private fun initCapacity() { + var end = false + for (i in buffers.size - 1 downTo 0) { + if (end) { + capacity += buffers[i].writePosition + } else { + capacity += buffers[i].capacity + if (buffers[i].readable != 0) { + writeBufIndex = i + writeBuf = this.buffers[writeBufIndex++] + end = true + } + } + } + } + + /** + * ArrayByteBuffer not support append buffer for this while + */ + override fun append(buffer: ByteBuffer) = throw UnsupportedOperationException() + + override fun get(): Byte { + val byte = readBuf.get() + readPosition++ + return byte + } + + override fun put(byte: Byte) { + writeBuf.put(byte) + writePosition++ + } + + override fun clear() { + buffers.forEach { buffer -> + buffer.clear() + } + capacity = buffers.sumOf { it.capacity } + readPosition = 0 + writePosition = 0 + } + + override fun reset() { + // TODO + var ri = 1 + var wi = 0 + var writeBuf = buffers[wi++] + writeBuf.reset() + W@ while (ri < buffers.size) { + val readBuf = buffers[ri++] + do { + if (readBuf == writeBuf) { + readBuf.reset() + continue@W + } else { + readBuf.writeTo(writeBuf) + if (writeBuf.writeable == 0) { + writeBuf = buffers[wi++] + } + } + } while (readBuf.readable != 0) + readBuf.clear() + } + readBufIndex = 1 + writeBufIndex = wi + this.writeBuf = writeBuf + this.readBuf = buffers[0] + while (wi < buffers.size) { + capacity += writeBuf.writeable + writeBuf = buffers[wi++] + } + capacity += writeBuf.writeable + } + override fun toString(): String { return "ArrayByteBuffer[$readPosition:$writePosition:$capacity]" } + + override fun readBufferArray(): Array { + readBuf + writeBuf + return buffers.getReadNioBufferList(readBufIndex - 1, writeBufIndex - readBufIndex + 1) + } + + override fun finishRead(buffers: Array) = this.buffers.finishRead(buffers, readBufIndex - 1) + .also { readPosition += it.toInt() } + + override fun writeBufferArray(): Array { + writeBuf + return buffers.getWriteNioBufferList(writeBufIndex - 1) + } + + override fun finishWrite(buffers: Array) = + this.buffers.finishWrite(buffers, writeBufIndex - 1) + .also { writePosition += it.toInt() } } \ No newline at end of file diff --git a/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/impl/DirectByteBuffer.kt b/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/impl/DirectByteBuffer.kt index 34cbcf1..1c335c5 100644 --- a/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/impl/DirectByteBuffer.kt +++ b/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/impl/DirectByteBuffer.kt @@ -5,7 +5,7 @@ import cn.tursom.core.buffer.ByteBuffer class DirectByteBuffer( private var buffer: java.nio.ByteBuffer, override var readPosition: Int = 0, - override var writePosition: Int = 0 + override var writePosition: Int = 0, ) : ByteBuffer { constructor(size: Int) : this(java.nio.ByteBuffer.allocateDirect(size)) @@ -30,10 +30,12 @@ class DirectByteBuffer( return buffer } - override fun finishRead(buffer: java.nio.ByteBuffer) { + override fun finishRead(buffer: java.nio.ByteBuffer): Int { + val rp = readPosition if (buffer === this.buffer) { readPosition = buffer.position() } + return readPosition - rp } override fun writeBuffer(): java.nio.ByteBuffer { @@ -44,10 +46,12 @@ class DirectByteBuffer( return buffer } - override fun finishWrite(buffer: java.nio.ByteBuffer) { + override fun finishWrite(buffer: java.nio.ByteBuffer): Int { + val wp = writePosition if (buffer === this.buffer) { writePosition = buffer.position() } + return writePosition - wp } override fun reset() { diff --git a/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/impl/HeapByteBuffer.kt b/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/impl/HeapByteBuffer.kt index eb44a68..3c722ea 100644 --- a/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/impl/HeapByteBuffer.kt +++ b/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/impl/HeapByteBuffer.kt @@ -44,10 +44,12 @@ class HeapByteBuffer( return buffer } - override fun finishRead(buffer: java.nio.ByteBuffer) { + override fun finishRead(buffer: java.nio.ByteBuffer): Int { + val rp = readPosition if (buffer === this.buffer) { readPosition = buffer.position() } + return readPosition - rp } override fun writeBuffer(): java.nio.ByteBuffer { @@ -58,10 +60,12 @@ class HeapByteBuffer( return buffer } - override fun finishWrite(buffer: java.nio.ByteBuffer) { + override fun finishWrite(buffer: java.nio.ByteBuffer): Int { + val wp = writePosition if (buffer === this.buffer) { writePosition = buffer.position() } + return writePosition - wp } override fun reset() { diff --git a/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/impl/ListByteBuffer.kt b/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/impl/ListByteBuffer.kt index c7014cf..1bdcc03 100644 --- a/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/impl/ListByteBuffer.kt +++ b/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/impl/ListByteBuffer.kt @@ -6,28 +6,27 @@ import java.nio.ByteOrder @Suppress("MemberVisibilityCanBePrivate") open class ListByteBuffer( - final override val buffers: MutableList = ArrayList(), + final override val bufferIterable: MutableList = ArrayList(), ) : MultipleByteBuffer { - var readOperator = buffers.firstOrNull() - var writeOperator = buffers.firstOrNull() + var readOperator = bufferIterable.firstOrNull() + var writeOperator = bufferIterable.firstOrNull() var readArrayPosition: Int = if (readOperator == null) -1 else 0 var writeArrayPosition: Int = if (writeOperator == null) -1 else 0 private var buffersArrayCache: Array? = null - override val buffersArray: Array + override val buffers: Array get() { if (buffersArrayCache == null) { - buffersArrayCache = buffers.toTypedArray() + buffersArrayCache = bufferIterable.toTypedArray() } return buffersArrayCache!! } - override val hasArray: Boolean get() = false - override val array: ByteArray get() = throw UnsupportedOperationException() - override val capacity: Int get() = buffers.sumOf { it.capacity } + final override var capacity: Int = bufferIterable.sumOf { it.capacity } + private set - override var writePosition: Int = buffers.sumOf { it.writePosition } - override var readPosition: Int = buffers.sumOf { it.readPosition } + override var writePosition: Int = bufferIterable.sumOf { it.writePosition } + override var readPosition: Int = bufferIterable.sumOf { it.readPosition } override val resized: Boolean get() = false @@ -42,6 +41,8 @@ open class ListByteBuffer( return writeOperator?.isWriteable ?: false } + override val bufferSize: Int get() = bufferIterable.size + override fun clear() { super.clear() readPosition = 0 @@ -63,10 +64,10 @@ open class ListByteBuffer( n == 0 -> 0 n > 0 -> { var skip = 0 - while (skip == n) { + while (skip != n) { skip += readOperator?.skip(n - skip) ?: 0 - if (readArrayPosition < buffers.size) { - readOperator = buffers[readArrayPosition++] + if (readArrayPosition < bufferIterable.size) { + readOperator = bufferIterable[readArrayPosition++] } else { break } @@ -75,10 +76,10 @@ open class ListByteBuffer( } else -> { var fallback = 0 - while (fallback == n) { + while (fallback != n) { fallback += readOperator?.skip(n - fallback) ?: 0 if (readArrayPosition > 0) { - readOperator = buffers[--readArrayPosition] + readOperator = bufferIterable[--readArrayPosition] } else { break } @@ -90,32 +91,65 @@ open class ListByteBuffer( override fun readBuffer(): java.nio.ByteBuffer = throw UnsupportedOperationException() override fun finishRead(buffer: java.nio.ByteBuffer) = throw UnsupportedOperationException() + override fun writeBuffer(): java.nio.ByteBuffer = throw UnsupportedOperationException() override fun finishWrite(buffer: java.nio.ByteBuffer) = throw UnsupportedOperationException() - override fun append(buffer: ByteBuffer) { - val bufReadPosition = buffer.readPosition - val bufWritePosition = buffer.writePosition - buffers.add(buffer) - buffersArrayCache = null - readPosition += bufReadPosition - writePosition += bufWritePosition + override fun readBufferArray(): Array { + val iterator = bufferIterable.iterator() + return Array(array.size) { + iterator.next().readBuffer() + } } - override fun slice(position: Int, size: Int, readPosition: Int, writePosition: Int): ByteBuffer = - throw UnsupportedOperationException() + override fun finishRead(buffers: Array): Long { + val iterator = this.bufferIterable.iterator() + var readed = 0L + buffers.forEach { buffer -> + readed += iterator.next().finishRead(buffer) + } + return readed + } + + override fun writeBufferArray(): Array { + val iterator = bufferIterable.iterator() + return Array(array.size) { + iterator.next().writeBuffer() + } + } + + override fun finishWrite(buffers: Array): Long { + val iterator = bufferIterable.iterator() + var written = 0L + buffers.forEach { buffer -> + written += iterator.next().finishWrite(buffer) + } + return written + } + + override fun append(buffer: ByteBuffer) { + if (buffer is MultipleByteBuffer) { + bufferIterable.addAll(buffer.bufferIterable) + } else { + bufferIterable.add(buffer) + } + buffersArrayCache = null + capacity += buffer.capacity + readPosition += buffer.readPosition + writePosition += buffer.writePosition + } override fun resize(newSize: Int): Boolean = throw UnsupportedOperationException() private fun updateRead() { - while (readArrayPosition < buffers.size && readOperator?.isReadable != true) { - readOperator = buffers[readArrayPosition++] + while (readArrayPosition < bufferIterable.size && readOperator?.isReadable != true) { + readOperator = bufferIterable[readArrayPosition++] } } private fun updateWrite() { - while (writeArrayPosition < buffers.size && writeOperator?.isWriteable != true) { - writeOperator = buffers[writeArrayPosition++] + while (writeArrayPosition < bufferIterable.size && writeOperator?.isWriteable != true) { + writeOperator = bufferIterable[writeArrayPosition++] } } diff --git a/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/impl/NettyByteBuffer.kt b/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/impl/NettyByteBuffer.kt index fafc2ba..25269be 100644 --- a/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/impl/NettyByteBuffer.kt +++ b/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/impl/NettyByteBuffer.kt @@ -8,6 +8,7 @@ import cn.tursom.core.reference.FreeReference import cn.tursom.core.uncheckedCast import cn.tursom.log.impl.Slf4jImpl import io.netty.buffer.ByteBuf +import io.netty.buffer.Unpooled import java.io.OutputStream import java.nio.ByteOrder import java.util.concurrent.atomic.AtomicBoolean @@ -17,7 +18,12 @@ class NettyByteBuffer( val byteBuf: ByteBuf, autoClose: Boolean = false, ) : ByteBuffer, AsyncFile.Reader, AsyncFile.Writer, NioBuffers.Arrays { - companion object : Slf4jImpl() + companion object : Slf4jImpl() { + fun toByteBuf(buffer: ByteBuffer) = when (buffer) { + is NettyByteBuffer -> buffer.byteBuf + else -> Unpooled.wrappedBuffer(buffer.getBytes()) + } + } constructor( byteBuf: ByteBuf, @@ -116,16 +122,16 @@ class NettyByteBuffer( return byteBuf.internalNioBuffer(readPosition, readable).slice() } - override fun finishRead(buffer: java.nio.ByteBuffer) { - byteBuf.readerIndex(buffer.position()) + override fun finishRead(buffer: java.nio.ByteBuffer): Int { + return -(byteBuf.readerIndex() - byteBuf.readerIndex(buffer.position()).readerIndex()) } override fun writeBuffer(): java.nio.ByteBuffer { return byteBuf.internalNioBuffer(writePosition, writeable).slice() } - override fun finishWrite(buffer: java.nio.ByteBuffer) { - byteBuf.writerIndex(buffer.position()) + override fun finishWrite(buffer: java.nio.ByteBuffer): Int { + return -(byteBuf.writerIndex() - byteBuf.writerIndex(buffer.position()).writerIndex()) } override val readOffset: Int get() = byteBuf.arrayOffset() + byteBuf.readerIndex() @@ -284,13 +290,16 @@ class NettyByteBuffer( return nioBuffers } - override fun finishRead(buffers: Iterator) { + override fun finishRead(buffers: Array): Long { + val iterator = buffers.iterator() var readPositionResult = 0 repeat(nioReadBuffersNum) { - readPositionResult += buffers.next().position() + readPositionResult += iterator.next().position() } nioReadBuffersNum = 0 - byteBuf.readerIndex(byteBuf.readerIndex() + readPositionResult - nioReadPosition) + val readed = readPositionResult - nioReadPosition + byteBuf.readerIndex(byteBuf.readerIndex() + readed) + return readed.toLong() } override fun writeBufferArray(): Array { @@ -300,13 +309,16 @@ class NettyByteBuffer( return nioBuffers } - override fun finishWrite(buffers: Iterator) { + override fun finishWrite(buffers: Array): Long { + val iterator = buffers.iterator() var writePositionResult = 0 repeat(nioWriteBuffersNum) { - writePositionResult += buffers.next().position() + writePositionResult += iterator.next().position() } nioWriteBuffersNum = 0 - byteBuf.writerIndex(byteBuf.writerIndex() + writePositionResult - nioWritePosition) + val written = writePositionResult - nioWritePosition + byteBuf.writerIndex(byteBuf.writerIndex() + written) + return written.toLong() } override fun toString(): String { diff --git a/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/stream/InputStream.kt b/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/stream/InputStream.kt index b749938..6276033 100644 --- a/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/stream/InputStream.kt +++ b/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/stream/InputStream.kt @@ -12,7 +12,7 @@ interface InputStream : Closeable { fun read( buffer: ByteArray, offset: Int = 0, - len: Int = buffer.size - offset + len: Int = buffer.size - offset, ): Int { val byteBuffer = HeapByteBuffer(buffer, offset, len) byteBuffer.clear() diff --git a/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/stream/Stream.kt b/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/stream/Stream.kt index 465436b..9e9d8cf 100644 --- a/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/stream/Stream.kt +++ b/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/stream/Stream.kt @@ -12,12 +12,12 @@ object Stream { fun open(outputStream: java.io.OutputStream) = JavaOutputStream(outputStream) fun open( inputStream: java.io.InputStream, - outputStream: java.io.OutputStream + outputStream: java.io.OutputStream, ) = PairIOStream(JavaInputStream(inputStream), JavaOutputStream(outputStream)) fun open( outputStream: java.io.OutputStream, - inputStream: java.io.InputStream + inputStream: java.io.InputStream, ) = PairIOStream(JavaInputStream(inputStream), JavaOutputStream(outputStream)) fun open(buffer: ByteBuffer) = ByteBufferIOStream(buffer) diff --git a/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/stream/impl/BytesIOStream.kt b/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/stream/impl/BytesIOStream.kt index 9ce7c60..4c51659 100644 --- a/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/stream/impl/BytesIOStream.kt +++ b/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/stream/impl/BytesIOStream.kt @@ -6,7 +6,7 @@ import cn.tursom.core.stream.IOStream import cn.tursom.core.stream.SuspendInputStream class BytesIOStream private constructor( - private val buBufferIOStream: ByteBufferIOStream + private val buBufferIOStream: ByteBufferIOStream, ) : IOStream by buBufferIOStream, SuspendInputStream { constructor(bytes: ByteArray) : this(ByteBufferIOStream(HeapByteBuffer(bytes).apply { clear() })) diff --git a/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/stream/impl/BytesInputStream.kt b/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/stream/impl/BytesInputStream.kt index 0fae5d7..555a824 100644 --- a/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/stream/impl/BytesInputStream.kt +++ b/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/stream/impl/BytesInputStream.kt @@ -6,5 +6,5 @@ import cn.tursom.core.stream.InputStream class BytesInputStream( val bytes: ByteArray, offset: Int = 0, - len: Int = bytes.size - offset + len: Int = bytes.size - offset, ) : InputStream by ByteBufferInputStream(HeapByteBuffer(bytes, offset, len)) \ No newline at end of file diff --git a/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/stream/impl/BytesOutputStream.kt b/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/stream/impl/BytesOutputStream.kt index f0fdb4a..9e1f930 100644 --- a/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/stream/impl/BytesOutputStream.kt +++ b/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/stream/impl/BytesOutputStream.kt @@ -6,5 +6,5 @@ import cn.tursom.core.stream.OutputStream class BytesOutputStream( val bytes: ByteArray, offset: Int = 0, - len: Int = bytes.size - offset + len: Int = bytes.size - offset, ) : OutputStream by ByteBufferOutputStream(HeapByteBuffer(bytes, offset, len).apply { clear() }) \ No newline at end of file diff --git a/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/stream/impl/JavaInputStreamProxy.kt b/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/stream/impl/JavaInputStreamProxy.kt index 5239b16..dcfd54e 100644 --- a/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/stream/impl/JavaInputStreamProxy.kt +++ b/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/stream/impl/JavaInputStreamProxy.kt @@ -3,7 +3,7 @@ package cn.tursom.core.stream.impl import java.io.InputStream class JavaInputStreamProxy( - val inputStream: cn.tursom.core.stream.InputStream + val inputStream: cn.tursom.core.stream.InputStream, ) : InputStream() { override fun read(): Int = inputStream.read() override fun read(b: ByteArray, off: Int, len: Int): Int = inputStream.read(b, off, len) diff --git a/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/stream/impl/JavaOutputStream.kt b/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/stream/impl/JavaOutputStream.kt index eb225bd..d6af01a 100644 --- a/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/stream/impl/JavaOutputStream.kt +++ b/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/stream/impl/JavaOutputStream.kt @@ -4,7 +4,7 @@ import cn.tursom.core.buffer.ByteBuffer import cn.tursom.core.stream.OutputStream class JavaOutputStream( - @Suppress("MemberVisibilityCanBePrivate") val outputStream: java.io.OutputStream + @Suppress("MemberVisibilityCanBePrivate") val outputStream: java.io.OutputStream, ) : OutputStream { override fun write(byte: Byte) { outputStream.write(byte.toInt()) diff --git a/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/stream/impl/PairIOStream.kt b/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/stream/impl/PairIOStream.kt index 985ddc0..3469b70 100644 --- a/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/stream/impl/PairIOStream.kt +++ b/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/stream/impl/PairIOStream.kt @@ -8,11 +8,11 @@ class PairIOStream( @Suppress("MemberVisibilityCanBePrivate") val inputStream: JavaInputStream, @Suppress("MemberVisibilityCanBePrivate") - val outputStream: JavaOutputStream + val outputStream: JavaOutputStream, ) : IOStream, InputStream by inputStream, OutputStream by outputStream { constructor( outputStream: JavaOutputStream, - inputStream: JavaInputStream + inputStream: JavaInputStream, ) : this(inputStream, outputStream) override fun close() { diff --git a/ts-core/ts-buffer/src/test/kotlin/cn/tursom/core/buffer/impl/ArrayByteBufferTest.kt b/ts-core/ts-buffer/src/test/kotlin/cn/tursom/core/buffer/impl/ArrayByteBufferTest.kt new file mode 100644 index 0000000..19babfa --- /dev/null +++ b/ts-core/ts-buffer/src/test/kotlin/cn/tursom/core/buffer/impl/ArrayByteBufferTest.kt @@ -0,0 +1,43 @@ +package cn.tursom.core.buffer.impl + +import cn.tursom.core.ByteBufferUtil +import org.junit.Test + +class ArrayByteBufferTest { + @Test + fun testGetString() { + val buffer = ArrayByteBuffer( + ByteBufferUtil.wrap("hello"), + ByteBufferUtil.wrap(", "), + ByteBufferUtil.wrap("world"), + ByteBufferUtil.wrap("!"), + HeapByteBuffer(32), + ByteBufferUtil.wrap("!"), + HeapByteBuffer(32), + ) + buffer.put(" I'm tursom, this lib's author") + buffer.put('.'.code.toByte()) + buffer.writePosition = buffer.capacity + println(buffer) + println(buffer.getString()) + println(buffer) + } + + @Test + fun testReset() { + val buffer = ArrayByteBuffer( + ByteBufferUtil.wrap("hello"), + HeapByteBuffer(4), + ByteBufferUtil.wrap(", "), + HeapByteBuffer(4), + ByteBufferUtil.wrap("world"), + ByteBufferUtil.wrap("!"), + ByteBufferUtil.wrap("!"), + ) + buffer.reset() + println(buffer) + val message = buffer.getString() + println(message) + println(buffer) + } +} \ No newline at end of file diff --git a/ts-core/ts-coroutine/src/main/kotlin/cn/tursom/core/coroutine/BufferTickerProvider.kt b/ts-core/ts-coroutine/src/main/kotlin/cn/tursom/core/coroutine/BufferTickerProvider.kt index 806a437..7b02723 100644 --- a/ts-core/ts-coroutine/src/main/kotlin/cn/tursom/core/coroutine/BufferTickerProvider.kt +++ b/ts-core/ts-coroutine/src/main/kotlin/cn/tursom/core/coroutine/BufferTickerProvider.kt @@ -1,7 +1,6 @@ package cn.tursom.core.coroutine import kotlinx.coroutines.DelicateCoroutinesApi -import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.channels.ReceiveChannel import kotlinx.coroutines.channels.SendChannel diff --git a/ts-core/ts-coroutine/src/main/kotlin/cn/tursom/core/coroutine/CoroutineLocalContext.kt b/ts-core/ts-coroutine/src/main/kotlin/cn/tursom/core/coroutine/CoroutineLocalContext.kt index 7285c8c..b49a15d 100644 --- a/ts-core/ts-coroutine/src/main/kotlin/cn/tursom/core/coroutine/CoroutineLocalContext.kt +++ b/ts-core/ts-coroutine/src/main/kotlin/cn/tursom/core/coroutine/CoroutineLocalContext.kt @@ -5,7 +5,7 @@ import kotlinx.coroutines.ThreadContextElement import kotlin.coroutines.CoroutineContext open class CoroutineLocalContext( - private val mapBuilder: () -> MutableMap, Any?> = { HashMap(4) } + private val mapBuilder: () -> MutableMap, Any?> = { HashMap(4) }, ) : CoroutineContext.Element, ThreadContextElement, Any?>>, MutableMap, Any?> { override val key: CoroutineContext.Key<*> get() = Key diff --git a/ts-core/ts-coroutine/src/main/kotlin/cn/tursom/core/coroutine/CoroutineLocalContinuation.kt b/ts-core/ts-coroutine/src/main/kotlin/cn/tursom/core/coroutine/CoroutineLocalContinuation.kt index 5ff0c28..6e94dfd 100644 --- a/ts-core/ts-coroutine/src/main/kotlin/cn/tursom/core/coroutine/CoroutineLocalContinuation.kt +++ b/ts-core/ts-coroutine/src/main/kotlin/cn/tursom/core/coroutine/CoroutineLocalContinuation.kt @@ -6,7 +6,7 @@ import kotlin.coroutines.CoroutineContext import kotlin.coroutines.EmptyCoroutineContext class CoroutineLocalContinuation( - private val completion: Continuation<*> + private val completion: Continuation<*>, ) : Continuation by completion.cast() { override val context: CoroutineContext = completion.context + if (completion.context[CoroutineLocalContext] == null) { CoroutineLocalContext() diff --git a/ts-core/ts-coroutine/src/main/kotlin/cn/tursom/core/coroutine/CoroutineScopeContext.kt b/ts-core/ts-coroutine/src/main/kotlin/cn/tursom/core/coroutine/CoroutineScopeContext.kt index 89d2935..d30a27f 100644 --- a/ts-core/ts-coroutine/src/main/kotlin/cn/tursom/core/coroutine/CoroutineScopeContext.kt +++ b/ts-core/ts-coroutine/src/main/kotlin/cn/tursom/core/coroutine/CoroutineScopeContext.kt @@ -2,13 +2,12 @@ package cn.tursom.core.coroutine import cn.tursom.core.cast import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.Job import kotlin.coroutines.CoroutineContext import kotlin.coroutines.coroutineContext class CoroutineScopeContext( - var coroutineScope: CoroutineScope = GlobalScope + var coroutineScope: CoroutineScope = GlobalScope, ) : CoroutineContext.Element { override val key: CoroutineContext.Key<*> get() = Companion diff --git a/ts-core/ts-coroutine/src/main/kotlin/cn/tursom/core/coroutine/CurrentThreadCoroutineScope.kt b/ts-core/ts-coroutine/src/main/kotlin/cn/tursom/core/coroutine/CurrentThreadCoroutineScope.kt index 1fb6e61..f72c300 100644 --- a/ts-core/ts-coroutine/src/main/kotlin/cn/tursom/core/coroutine/CurrentThreadCoroutineScope.kt +++ b/ts-core/ts-coroutine/src/main/kotlin/cn/tursom/core/coroutine/CurrentThreadCoroutineScope.kt @@ -25,7 +25,7 @@ object CurrentThreadCoroutineScope { suspend fun launch( start: CoroutineStart = CoroutineStart.DEFAULT, - block: suspend CoroutineScope.() -> Unit + block: suspend CoroutineScope.() -> Unit, ): Job { val coroutineScope = getCoroutineScope() //coroutineScope.launch(start = start, block = block) @@ -58,7 +58,7 @@ object CurrentThreadCoroutineScope { private fun newBlockingCoroutine( coroutineContext: CoroutineContext, thread: Thread = Thread.currentThread(), - eventLoop: CoroutineDispatcher + eventLoop: CoroutineDispatcher, ): CoroutineScope { return BlockingCoroutineConstructor.newInstance(coroutineContext, thread, eventLoop).cast() } @@ -66,7 +66,7 @@ object CurrentThreadCoroutineScope { private fun CoroutineScope.start( start: CoroutineStart = CoroutineStart.DEFAULT, receiver: CoroutineScope = this, - block: suspend CoroutineScope.() -> T + block: suspend CoroutineScope.() -> T, ) { BlockingCoroutineStart.invoke(this, start, receiver, block) } diff --git a/ts-core/ts-curry/src/main/kotlin/cn/tursom/core/curry/I.kt b/ts-core/ts-curry/src/main/kotlin/cn/tursom/core/curry/I.kt index 2c0b523..a591659 100644 --- a/ts-core/ts-curry/src/main/kotlin/cn/tursom/core/curry/I.kt +++ b/ts-core/ts-curry/src/main/kotlin/cn/tursom/core/curry/I.kt @@ -1,259 +1,2558 @@ package cn.tursom.core.curry object I { - inline operator fun invoke(f: () -> R) = f() - inline operator fun invoke(f: (T1) -> R, a1: T1) = f(a1) - inline operator fun invoke(f: (T1, T2) -> R, a1: T1, a2: T2) = f(a1, a2) - inline operator fun invoke(f: (T1, T2, T3) -> R, a1: T1, a2: T2, a3: T3) = f(a1, a2, a3) - inline operator fun invoke(f: (T1, T2, T3, T4) -> R, a1: T1, a2: T2, a3: T3, a4: T4) = f(a1, a2, a3, a4) - inline operator fun invoke(f: (T1, T2, T3, T4, T5) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5) = f(a1, a2, a3, a4, a5) - inline operator fun invoke(f: (T1, T2, T3, T4, T5, T6) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6) = f(a1, a2, a3, a4, a5, a6) - inline operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7) = f(a1, a2, a3, a4, a5, a6, a7) - inline operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8) = f(a1, a2, a3, a4, a5, a6, a7, a8) - inline operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9) - inline operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) - inline operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) - inline operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) - inline operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) -> R, 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) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) - inline operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14) -> R, 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) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) - inline operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15) -> R, 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) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) - inline operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16) -> R, 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) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16) - inline operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17) -> R, 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) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17) - inline operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18) -> R, 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) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18) - inline operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19) -> R, 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) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19) - inline operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20) -> R, 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) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) + inline operator fun invoke(f: () -> R) = f() + inline operator fun invoke(f: (T1) -> R, a1: T1) = f(a1) + inline operator fun invoke(f: (T1, T2) -> R, a1: T1, a2: T2) = f(a1, a2) + inline operator fun invoke(f: (T1, T2, T3) -> R, a1: T1, a2: T2, a3: T3) = f(a1, a2, a3) + inline operator fun invoke(f: (T1, T2, T3, T4) -> R, a1: T1, a2: T2, a3: T3, a4: T4) = + f(a1, a2, a3, a4) + + inline operator fun invoke( + f: (T1, T2, T3, T4, T5) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + ) = f(a1, a2, a3, a4, a5) + + inline operator fun invoke( + f: (T1, T2, T3, T4, T5, T6) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + ) = f(a1, a2, a3, a4, a5, a6) + + inline operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + ) = f(a1, a2, a3, a4, a5, a6, a7) + + inline operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8) + + inline operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + a9: T9, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9) + + inline operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + a9: T9, + a10: T10, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) + + inline operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + a9: T9, + a10: T10, + a11: T11, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) + + inline operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + a9: T9, + a10: T10, + a11: T11, + a12: T12, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) + + inline operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) -> R, + 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, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) + + inline operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14) -> R, + 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, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) + + inline operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15) -> R, + 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, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) + + inline operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16) -> R, + 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, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16) + + inline operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17) -> R, + 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, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17) + + inline operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18) -> R, + 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, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18) + + inline operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19) -> R, + 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, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19) + + inline operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20) -> R, + 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, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) } object F { - inline operator fun invoke(f: () -> R) = f() + inline operator fun invoke(f: () -> R) = f() - inline operator fun invoke(f: (T1) -> R, a1: T1) = f(a1) + inline operator fun invoke(f: (T1) -> R, a1: T1) = f(a1) - inline operator fun invoke(f: (T1, T2) -> R, a1: T1, a2: T2) = f(a1, a2) - operator fun invoke(f: (T1, T2) -> R, a1: T1) = f(a1) + inline operator fun invoke(f: (T1, T2) -> R, a1: T1, a2: T2) = f(a1, a2) + operator fun invoke(f: (T1, T2) -> R, a1: T1) = f(a1) - inline operator fun invoke(f: (T1, T2, T3) -> R, a1: T1, a2: T2, a3: T3) = f(a1, a2, a3) - operator fun invoke(f: (T1, T2, T3) -> R, a1: T1, a2: T2) = f(a1, a2) - operator fun invoke(f: (T1, T2, T3) -> R, a1: T1) = f(a1) + inline operator fun invoke(f: (T1, T2, T3) -> R, a1: T1, a2: T2, a3: T3) = f(a1, a2, a3) + operator fun invoke(f: (T1, T2, T3) -> R, a1: T1, a2: T2) = f(a1, a2) + operator fun invoke(f: (T1, T2, T3) -> R, a1: T1) = f(a1) - inline operator fun invoke(f: (T1, T2, T3, T4) -> R, a1: T1, a2: T2, a3: T3, a4: T4) = f(a1, a2, a3, a4) - operator fun invoke(f: (T1, T2, T3, T4) -> R, a1: T1, a2: T2, a3: T3) = f(a1, a2, a3) - operator fun invoke(f: (T1, T2, T3, T4) -> R, a1: T1, a2: T2) = f(a1, a2) - operator fun invoke(f: (T1, T2, T3, T4) -> R, a1: T1) = f(a1) + inline operator fun invoke(f: (T1, T2, T3, T4) -> R, a1: T1, a2: T2, a3: T3, a4: T4) = + f(a1, a2, a3, a4) - inline operator fun invoke(f: (T1, T2, T3, T4, T5) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5) = f(a1, a2, a3, a4, a5) - operator fun invoke(f: (T1, T2, T3, T4, T5) -> R, a1: T1, a2: T2, a3: T3, a4: T4) = f(a1, a2, a3, a4) - operator fun invoke(f: (T1, T2, T3, T4, T5) -> R, a1: T1, a2: T2, a3: T3) = f(a1, a2, a3) - operator fun invoke(f: (T1, T2, T3, T4, T5) -> R, a1: T1, a2: T2) = f(a1, a2) - operator fun invoke(f: (T1, T2, T3, T4, T5) -> R, a1: T1) = f(a1) + operator fun invoke(f: (T1, T2, T3, T4) -> R, a1: T1, a2: T2, a3: T3) = f(a1, a2, a3) + operator fun invoke(f: (T1, T2, T3, T4) -> R, a1: T1, a2: T2) = f(a1, a2) + operator fun invoke(f: (T1, T2, T3, T4) -> R, a1: T1) = f(a1) - inline operator fun invoke(f: (T1, T2, T3, T4, T5, T6) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6) = f(a1, a2, a3, a4, a5, a6) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5) = f(a1, a2, a3, a4, a5) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6) -> R, a1: T1, a2: T2, a3: T3, a4: T4) = f(a1, a2, a3, a4) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6) -> R, a1: T1, a2: T2, a3: T3) = f(a1, a2, a3) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6) -> R, a1: T1, a2: T2) = f(a1, a2) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6) -> R, a1: T1) = f(a1) + inline operator fun invoke( + f: (T1, T2, T3, T4, T5) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + ) = f(a1, a2, a3, a4, a5) - inline operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7) = f(a1, a2, a3, a4, a5, a6, a7) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6) = f(a1, a2, a3, a4, a5, a6) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5) = f(a1, a2, a3, a4, a5) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7) -> R, a1: T1, a2: T2, a3: T3, a4: T4) = f(a1, a2, a3, a4) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7) -> R, a1: T1, a2: T2, a3: T3) = f(a1, a2, a3) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7) -> R, a1: T1, a2: T2) = f(a1, a2) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7) -> R, a1: T1) = f(a1) + operator fun invoke(f: (T1, T2, T3, T4, T5) -> R, a1: T1, a2: T2, a3: T3, a4: T4) = + f(a1, a2, a3, a4) - inline operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8) = f(a1, a2, a3, a4, a5, a6, a7, a8) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7) = f(a1, a2, a3, a4, a5, a6, a7) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6) = f(a1, a2, a3, a4, a5, a6) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5) = f(a1, a2, a3, a4, a5) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8) -> R, a1: T1, a2: T2, a3: T3, a4: T4) = f(a1, a2, a3, a4) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8) -> R, a1: T1, a2: T2, a3: T3) = f(a1, a2, a3) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8) -> R, a1: T1, a2: T2) = f(a1, a2) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8) -> R, a1: T1) = f(a1) + operator fun invoke(f: (T1, T2, T3, T4, T5) -> R, a1: T1, a2: T2, a3: T3) = f(a1, a2, a3) + operator fun invoke(f: (T1, T2, T3, T4, T5) -> R, a1: T1, a2: T2) = f(a1, a2) + operator fun invoke(f: (T1, T2, T3, T4, T5) -> R, a1: T1) = f(a1) - inline operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8) = f(a1, a2, a3, a4, a5, a6, a7, a8) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7) = f(a1, a2, a3, a4, a5, a6, a7) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6) = f(a1, a2, a3, a4, a5, a6) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5) = f(a1, a2, a3, a4, a5) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9) -> R, a1: T1, a2: T2, a3: T3, a4: T4) = f(a1, a2, a3, a4) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9) -> R, a1: T1, a2: T2, a3: T3) = f(a1, a2, a3) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9) -> R, a1: T1, a2: T2) = f(a1, a2) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9) -> R, a1: T1) = f(a1) + inline operator fun invoke( + f: (T1, T2, T3, T4, T5, T6) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + ) = f(a1, a2, a3, a4, a5, a6) - inline operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8) = f(a1, a2, a3, a4, a5, a6, a7, a8) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7) = f(a1, a2, a3, a4, a5, a6, a7) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6) = f(a1, a2, a3, a4, a5, a6) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5) = f(a1, a2, a3, a4, a5) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) -> R, a1: T1, a2: T2, a3: T3, a4: T4) = f(a1, a2, a3, a4) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) -> R, a1: T1, a2: T2, a3: T3) = f(a1, a2, a3) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) -> R, a1: T1, a2: T2) = f(a1, a2) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) -> R, a1: T1) = f(a1) + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + ) = f(a1, a2, a3, a4, a5) - inline operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8) = f(a1, a2, a3, a4, a5, a6, a7, a8) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7) = f(a1, a2, a3, a4, a5, a6, a7) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6) = f(a1, a2, a3, a4, a5, a6) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5) = f(a1, a2, a3, a4, a5) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) -> R, a1: T1, a2: T2, a3: T3, a4: T4) = f(a1, a2, a3, a4) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) -> R, a1: T1, a2: T2, a3: T3) = f(a1, a2, a3) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) -> R, a1: T1, a2: T2) = f(a1, a2) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) -> R, a1: T1) = f(a1) + operator fun invoke(f: (T1, T2, T3, T4, T5, T6) -> R, a1: T1, a2: T2, a3: T3, a4: T4) = + f(a1, a2, a3, a4) - inline operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8) = f(a1, a2, a3, a4, a5, a6, a7, a8) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7) = f(a1, a2, a3, a4, a5, a6, a7) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6) = f(a1, a2, a3, a4, a5, a6) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5) = f(a1, a2, a3, a4, a5) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12) -> R, a1: T1, a2: T2, a3: T3, a4: T4) = f(a1, a2, a3, a4) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12) -> R, a1: T1, a2: T2, a3: T3) = f(a1, a2, a3) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12) -> R, a1: T1, a2: T2) = f(a1, a2) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12) -> R, a1: T1) = f(a1) + operator fun invoke(f: (T1, T2, T3, T4, T5, T6) -> R, a1: T1, a2: T2, a3: T3) = + f(a1, a2, a3) - inline operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) -> R, 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) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8) = f(a1, a2, a3, a4, a5, a6, a7, a8) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7) = f(a1, a2, a3, a4, a5, a6, a7) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6) = f(a1, a2, a3, a4, a5, a6) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5) = f(a1, a2, a3, a4, a5) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) -> R, a1: T1, a2: T2, a3: T3, a4: T4) = f(a1, a2, a3, a4) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) -> R, a1: T1, a2: T2, a3: T3) = f(a1, a2, a3) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) -> R, a1: T1, a2: T2) = f(a1, a2) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) -> R, a1: T1) = f(a1) + operator fun invoke(f: (T1, T2, T3, T4, T5, T6) -> R, a1: T1, a2: T2) = f(a1, a2) + operator fun invoke(f: (T1, T2, T3, T4, T5, T6) -> R, a1: T1) = f(a1) - inline operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14) -> R, 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) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14) -> R, 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) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8) = f(a1, a2, a3, a4, a5, a6, a7, a8) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7) = f(a1, a2, a3, a4, a5, a6, a7) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6) = f(a1, a2, a3, a4, a5, a6) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5) = f(a1, a2, a3, a4, a5) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14) -> R, a1: T1, a2: T2, a3: T3, a4: T4) = f(a1, a2, a3, a4) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14) -> R, a1: T1, a2: T2, a3: T3) = f(a1, a2, a3) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14) -> R, a1: T1, a2: T2) = f(a1, a2) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14) -> R, a1: T1) = f(a1) + inline operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + ) = f(a1, a2, a3, a4, a5, a6, a7) - inline operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15) -> R, 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) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15) -> R, 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) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15) -> R, 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) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8) = f(a1, a2, a3, a4, a5, a6, a7, a8) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7) = f(a1, a2, a3, a4, a5, a6, a7) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6) = f(a1, a2, a3, a4, a5, a6) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5) = f(a1, a2, a3, a4, a5) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15) -> R, a1: T1, a2: T2, a3: T3, a4: T4) = f(a1, a2, a3, a4) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15) -> R, a1: T1, a2: T2, a3: T3) = f(a1, a2, a3) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15) -> R, a1: T1, a2: T2) = f(a1, a2) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15) -> R, a1: T1) = f(a1) + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + ) = f(a1, a2, a3, a4, a5, a6) - inline operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16) -> R, 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) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16) -> R, 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) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16) -> R, 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) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16) -> R, 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) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8) = f(a1, a2, a3, a4, a5, a6, a7, a8) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7) = f(a1, a2, a3, a4, a5, a6, a7) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6) = f(a1, a2, a3, a4, a5, a6) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5) = f(a1, a2, a3, a4, a5) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16) -> R, a1: T1, a2: T2, a3: T3, a4: T4) = f(a1, a2, a3, a4) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16) -> R, a1: T1, a2: T2, a3: T3) = f(a1, a2, a3) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16) -> R, a1: T1, a2: T2) = f(a1, a2) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16) -> R, a1: T1) = f(a1) + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + ) = f(a1, a2, a3, a4, a5) - inline operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17) -> R, 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) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17) -> R, 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) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17) -> R, 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) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17) -> R, 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) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17) -> R, 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) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8) = f(a1, a2, a3, a4, a5, a6, a7, a8) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7) = f(a1, a2, a3, a4, a5, a6, a7) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6) = f(a1, a2, a3, a4, a5, a6) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5) = f(a1, a2, a3, a4, a5) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17) -> R, a1: T1, a2: T2, a3: T3, a4: T4) = f(a1, a2, a3, a4) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17) -> R, a1: T1, a2: T2, a3: T3) = f(a1, a2, a3) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17) -> R, a1: T1, a2: T2) = f(a1, a2) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17) -> R, a1: T1) = f(a1) + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + ) = f(a1, a2, a3, a4) - inline operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18) -> R, 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) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18) -> R, 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) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18) -> R, 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) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18) -> R, 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) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18) -> R, 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) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18) -> R, 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) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8) = f(a1, a2, a3, a4, a5, a6, a7, a8) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7) = f(a1, a2, a3, a4, a5, a6, a7) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6) = f(a1, a2, a3, a4, a5, a6) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5) = f(a1, a2, a3, a4, a5) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18) -> R, a1: T1, a2: T2, a3: T3, a4: T4) = f(a1, a2, a3, a4) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18) -> R, a1: T1, a2: T2, a3: T3) = f(a1, a2, a3) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18) -> R, a1: T1, a2: T2) = f(a1, a2) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18) -> R, a1: T1) = f(a1) + operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7) -> R, a1: T1, a2: T2, a3: T3) = + f(a1, a2, a3) - inline operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19) -> R, 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) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19) -> R, 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) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19) -> R, 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) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19) -> R, 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) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19) -> R, 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) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19) -> R, 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) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19) -> R, 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) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8) = f(a1, a2, a3, a4, a5, a6, a7, a8) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7) = f(a1, a2, a3, a4, a5, a6, a7) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6) = f(a1, a2, a3, a4, a5, a6) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5) = f(a1, a2, a3, a4, a5) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19) -> R, a1: T1, a2: T2, a3: T3, a4: T4) = f(a1, a2, a3, a4) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19) -> R, a1: T1, a2: T2, a3: T3) = f(a1, a2, a3) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19) -> R, a1: T1, a2: T2) = f(a1, a2) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19) -> R, a1: T1) = f(a1) + operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7) -> R, a1: T1, a2: T2) = f(a1, a2) + operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7) -> R, a1: T1) = f(a1) - inline operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20) -> R, 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) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20) -> R, 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) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20) -> R, 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) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20) -> R, 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) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20) -> R, 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) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20) -> R, 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) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20) -> R, 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) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20) -> R, 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) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11, a12: T12) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10, a11: T11) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8) = f(a1, a2, a3, a4, a5, a6, a7, a8) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7) = f(a1, a2, a3, a4, a5, a6, a7) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6) = f(a1, a2, a3, a4, a5, a6) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20) -> R, a1: T1, a2: T2, a3: T3, a4: T4, a5: T5) = f(a1, a2, a3, a4, a5) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20) -> R, a1: T1, a2: T2, a3: T3, a4: T4) = f(a1, a2, a3, a4) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20) -> R, a1: T1, a2: T2, a3: T3) = f(a1, a2, a3) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20) -> R, a1: T1, a2: T2) = f(a1, a2) - operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20) -> R, a1: T1) = f(a1) + inline operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + ) = f(a1, a2, a3, a4, a5, a6, a7) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + ) = f(a1, a2, a3, a4, a5, a6) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + ) = f(a1, a2, a3, a4, a5) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + ) = f(a1, a2, a3, a4) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8) -> R, + a1: T1, + a2: T2, + a3: T3, + ) = f(a1, a2, a3) + + operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8) -> R, a1: T1, a2: T2) = + f(a1, a2) + + operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8) -> R, a1: T1) = f(a1) + + inline operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + a9: T9, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + ) = f(a1, a2, a3, a4, a5, a6, a7) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + ) = f(a1, a2, a3, a4, a5, a6) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + ) = f(a1, a2, a3, a4, a5) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + ) = f(a1, a2, a3, a4) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9) -> R, + a1: T1, + a2: T2, + a3: T3, + ) = f(a1, a2, a3) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9) -> R, + a1: T1, + a2: T2, + ) = f(a1, a2) + + operator fun invoke(f: (T1, T2, T3, T4, T5, T6, T7, T8, T9) -> R, a1: T1) = + f(a1) + + inline operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + a9: T9, + a10: T10, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + a9: T9, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + ) = f(a1, a2, a3, a4, a5, a6, a7) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + ) = f(a1, a2, a3, a4, a5, a6) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + ) = f(a1, a2, a3, a4, a5) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + ) = f(a1, a2, a3, a4) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) -> R, + a1: T1, + a2: T2, + a3: T3, + ) = f(a1, a2, a3) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) -> R, + a1: T1, + a2: T2, + ) = f(a1, a2) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) -> R, + a1: T1, + ) = f(a1) + + inline operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + a9: T9, + a10: T10, + a11: T11, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + a9: T9, + a10: T10, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + a9: T9, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + ) = f(a1, a2, a3, a4, a5, a6, a7) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + ) = f(a1, a2, a3, a4, a5, a6) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + ) = f(a1, a2, a3, a4, a5) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + ) = f(a1, a2, a3, a4) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) -> R, + a1: T1, + a2: T2, + a3: T3, + ) = f(a1, a2, a3) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) -> R, + a1: T1, + a2: T2, + ) = f(a1, a2) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) -> R, + a1: T1, + ) = f(a1) + + inline operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + a9: T9, + a10: T10, + a11: T11, + a12: T12, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + a9: T9, + a10: T10, + a11: T11, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + a9: T9, + a10: T10, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + a9: T9, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + ) = f(a1, a2, a3, a4, a5, a6, a7) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + ) = f(a1, a2, a3, a4, a5, a6) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + ) = f(a1, a2, a3, a4, a5) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + ) = f(a1, a2, a3, a4) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12) -> R, + a1: T1, + a2: T2, + a3: T3, + ) = f(a1, a2, a3) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12) -> R, + a1: T1, + a2: T2, + ) = f(a1, a2) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12) -> R, + a1: T1, + ) = f(a1) + + inline operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) -> R, + 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, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + a9: T9, + a10: T10, + a11: T11, + a12: T12, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + a9: T9, + a10: T10, + a11: T11, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + a9: T9, + a10: T10, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + a9: T9, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + ) = f(a1, a2, a3, a4, a5, a6, a7) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + ) = f(a1, a2, a3, a4, a5, a6) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + ) = f(a1, a2, a3, a4, a5) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + ) = f(a1, a2, a3, a4) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) -> R, + a1: T1, + a2: T2, + a3: T3, + ) = f(a1, a2, a3) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) -> R, + a1: T1, + a2: T2, + ) = f(a1, a2) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) -> R, + a1: T1, + ) = f(a1) + + inline operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14) -> R, + 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, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14) -> R, + 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, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + a9: T9, + a10: T10, + a11: T11, + a12: T12, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + a9: T9, + a10: T10, + a11: T11, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + a9: T9, + a10: T10, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + a9: T9, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + ) = f(a1, a2, a3, a4, a5, a6, a7) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + ) = f(a1, a2, a3, a4, a5, a6) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + ) = f(a1, a2, a3, a4, a5) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + ) = f(a1, a2, a3, a4) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14) -> R, + a1: T1, + a2: T2, + a3: T3, + ) = f(a1, a2, a3) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14) -> R, + a1: T1, + a2: T2, + ) = f(a1, a2) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14) -> R, + a1: T1, + ) = f(a1) + + inline operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15) -> R, + 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, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15) -> R, + 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, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15) -> R, + 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, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + a9: T9, + a10: T10, + a11: T11, + a12: T12, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + a9: T9, + a10: T10, + a11: T11, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + a9: T9, + a10: T10, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + a9: T9, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + ) = f(a1, a2, a3, a4, a5, a6, a7) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + ) = f(a1, a2, a3, a4, a5, a6) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + ) = f(a1, a2, a3, a4, a5) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + ) = f(a1, a2, a3, a4) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15) -> R, + a1: T1, + a2: T2, + a3: T3, + ) = f(a1, a2, a3) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15) -> R, + a1: T1, + a2: T2, + ) = f(a1, a2) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15) -> R, + a1: T1, + ) = f(a1) + + inline operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16) -> R, + 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, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16) -> R, + 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, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16) -> R, + 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, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16) -> R, + 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, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + a9: T9, + a10: T10, + a11: T11, + a12: T12, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + a9: T9, + a10: T10, + a11: T11, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + a9: T9, + a10: T10, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + a9: T9, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + ) = f(a1, a2, a3, a4, a5, a6, a7) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + ) = f(a1, a2, a3, a4, a5, a6) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + ) = f(a1, a2, a3, a4, a5) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + ) = f(a1, a2, a3, a4) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16) -> R, + a1: T1, + a2: T2, + a3: T3, + ) = f(a1, a2, a3) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16) -> R, + a1: T1, + a2: T2, + ) = f(a1, a2) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16) -> R, + a1: T1, + ) = f(a1) + + inline operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17) -> R, + 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, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17) -> R, + 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, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17) -> R, + 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, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17) -> R, + 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, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17) -> R, + 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, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + a9: T9, + a10: T10, + a11: T11, + a12: T12, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + a9: T9, + a10: T10, + a11: T11, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + a9: T9, + a10: T10, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + a9: T9, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + ) = f(a1, a2, a3, a4, a5, a6, a7) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + ) = f(a1, a2, a3, a4, a5, a6) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + ) = f(a1, a2, a3, a4, a5) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + ) = f(a1, a2, a3, a4) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17) -> R, + a1: T1, + a2: T2, + a3: T3, + ) = f(a1, a2, a3) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17) -> R, + a1: T1, + a2: T2, + ) = f(a1, a2) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17) -> R, + a1: T1, + ) = f(a1) + + inline operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18) -> R, + 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, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18) -> R, + 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, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18) -> R, + 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, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18) -> R, + 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, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18) -> R, + 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, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18) -> R, + 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, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + a9: T9, + a10: T10, + a11: T11, + a12: T12, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + a9: T9, + a10: T10, + a11: T11, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + a9: T9, + a10: T10, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + a9: T9, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + ) = f(a1, a2, a3, a4, a5, a6, a7) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + ) = f(a1, a2, a3, a4, a5, a6) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + ) = f(a1, a2, a3, a4, a5) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + ) = f(a1, a2, a3, a4) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18) -> R, + a1: T1, + a2: T2, + a3: T3, + ) = f(a1, a2, a3) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18) -> R, + a1: T1, + a2: T2, + ) = f(a1, a2) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18) -> R, + a1: T1, + ) = f(a1) + + inline operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19) -> R, + 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, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19) -> R, + 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, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19) -> R, + 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, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19) -> R, + 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, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19) -> R, + 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, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19) -> R, + 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, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19) -> R, + 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, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + a9: T9, + a10: T10, + a11: T11, + a12: T12, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + a9: T9, + a10: T10, + a11: T11, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + a9: T9, + a10: T10, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + a9: T9, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + ) = f(a1, a2, a3, a4, a5, a6, a7) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + ) = f(a1, a2, a3, a4, a5, a6) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + ) = f(a1, a2, a3, a4, a5) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + ) = f(a1, a2, a3, a4) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19) -> R, + a1: T1, + a2: T2, + a3: T3, + ) = f(a1, a2, a3) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19) -> R, + a1: T1, + a2: T2, + ) = f(a1, a2) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19) -> R, + a1: T1, + ) = f(a1) + + inline operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20) -> R, + 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, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20) -> R, + 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, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20) -> R, + 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, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20) -> R, + 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, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20) -> R, + 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, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20) -> R, + 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, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20) -> R, + 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, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20) -> R, + 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, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + a9: T9, + a10: T10, + a11: T11, + a12: T12, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + a9: T9, + a10: T10, + a11: T11, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + a9: T9, + a10: T10, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + a9: T9, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8, a9) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + ) = f(a1, a2, a3, a4, a5, a6, a7, a8) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + ) = f(a1, a2, a3, a4, a5, a6, a7) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + ) = f(a1, a2, a3, a4, a5, a6) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + ) = f(a1, a2, a3, a4, a5) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20) -> R, + a1: T1, + a2: T2, + a3: T3, + a4: T4, + ) = f(a1, a2, a3, a4) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20) -> R, + a1: T1, + a2: T2, + a3: T3, + ) = f(a1, a2, a3) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20) -> R, + a1: T1, + a2: T2, + ) = f(a1, a2) + + operator fun invoke( + f: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20) -> R, + a1: T1, + ) = f(a1) } \ No newline at end of file diff --git a/ts-core/ts-curry/src/main/kotlin/cn/tursom/core/curry/VarargCurrying.kt b/ts-core/ts-curry/src/main/kotlin/cn/tursom/core/curry/VarargCurrying.kt index 635bed7..ffdc5ab 100644 --- a/ts-core/ts-curry/src/main/kotlin/cn/tursom/core/curry/VarargCurrying.kt +++ b/ts-core/ts-curry/src/main/kotlin/cn/tursom/core/curry/VarargCurrying.kt @@ -8,116 +8,116 @@ import cn.tursom.core.uncheckedCast class VarargCurrying( - private val func: (Array) -> R, - private val args: Array, - private val componentType: Class + private val func: (Array) -> R, + private val args: Array, + private val componentType: Class, ) { - companion object { - inline operator fun invoke(noinline func: (Array) -> R) = - VarargCurrying(func, A::class.java) + companion object { + inline operator fun invoke(noinline func: (Array) -> R) = + VarargCurrying(func, A::class.java) - inline operator fun invoke(noinline func: (Array) -> R, args: Array) = - VarargCurrying(func, args, A::class.java) - } + inline operator fun invoke(noinline func: (Array) -> R, args: Array) = + VarargCurrying(func, args, A::class.java) + } - constructor( - func: (Array) -> R, - componentType: Class = func.javaClass.allMethods.find { - it.name == "invoke" && - it.parameterTypes.size == 1 && - it.parameterTypes[0].isArray - }!!.parameters[0].type.componentType.uncheckedCast() - ) : this(func, emptyArray(), componentType) + constructor( + func: (Array) -> R, + componentType: Class = func.javaClass.allMethods.find { + it.name == "invoke" && + it.parameterTypes.size == 1 && + it.parameterTypes[0].isArray + }!!.parameters[0].type.componentType.uncheckedCast(), + ) : this(func, emptyArray(), componentType) - operator fun invoke(): R = if (componentType == Any::class.java) { - func(args.uncheckedCast()) - } else { - val componentArgs = java.lang.reflect.Array.newInstance(componentType, args.size) - System.arraycopy(args, 0, componentArgs, 0, args.size) - func(componentArgs.uncheckedCast()) - } + operator fun invoke(): R = if (componentType == Any::class.java) { + func(args.uncheckedCast()) + } else { + val componentArgs = java.lang.reflect.Array.newInstance(componentType, args.size) + System.arraycopy(args, 0, componentArgs, 0, args.size) + func(componentArgs.uncheckedCast()) + } - operator fun invoke(vararg args: A) = VarargCurrying(func, this.args + args, componentType) + operator fun invoke(vararg args: A) = VarargCurrying(func, this.args + args, componentType) } class BooleanVarargCurrying( - private val func: (BooleanArray) -> R, - private val args: BooleanArray + private val func: (BooleanArray) -> R, + private val args: BooleanArray, ) { - constructor(func: (BooleanArray) -> R) : this(func, booleanArrayOf()) + constructor(func: (BooleanArray) -> R) : this(func, booleanArrayOf()) - operator fun invoke() = func(args) - operator fun invoke(vararg args: Boolean) = BooleanVarargCurrying(func, this.args + args) + operator fun invoke() = func(args) + operator fun invoke(vararg args: Boolean) = BooleanVarargCurrying(func, this.args + args) } class CharVarargCurrying( - private val func: (CharArray) -> R, - private val args: CharArray + private val func: (CharArray) -> R, + private val args: CharArray, ) { - constructor(func: (CharArray) -> R) : this(func, charArrayOf()) + constructor(func: (CharArray) -> R) : this(func, charArrayOf()) - operator fun invoke() = func(args) - operator fun invoke(vararg args: Char) = CharVarargCurrying(func, this.args + args) + operator fun invoke() = func(args) + operator fun invoke(vararg args: Char) = CharVarargCurrying(func, this.args + args) } class ByteVarargCurrying( - private val func: (ByteArray) -> R, - private val args: ByteArray + private val func: (ByteArray) -> R, + private val args: ByteArray, ) { - constructor(func: (ByteArray) -> R) : this(func, byteArrayOf()) + constructor(func: (ByteArray) -> R) : this(func, byteArrayOf()) - operator fun invoke() = func(args) - operator fun invoke(vararg args: Byte) = ByteVarargCurrying(func, this.args + args) + operator fun invoke() = func(args) + operator fun invoke(vararg args: Byte) = ByteVarargCurrying(func, this.args + args) } class ShortVarargCurrying( - private val func: (ShortArray) -> R, - private val args: ShortArray + private val func: (ShortArray) -> R, + private val args: ShortArray, ) { - constructor(func: (ShortArray) -> R) : this(func, shortArrayOf()) + constructor(func: (ShortArray) -> R) : this(func, shortArrayOf()) - operator fun invoke() = func(args) - operator fun invoke(vararg args: Short) = ShortVarargCurrying(func, this.args + args) + operator fun invoke() = func(args) + operator fun invoke(vararg args: Short) = ShortVarargCurrying(func, this.args + args) } class IntVarargCurrying( - private val func: (IntArray) -> R, - private val args: IntArray + private val func: (IntArray) -> R, + private val args: IntArray, ) { - constructor(func: (IntArray) -> R) : this(func, intArrayOf()) + constructor(func: (IntArray) -> R) : this(func, intArrayOf()) - operator fun invoke() = func(args) - operator fun invoke(vararg args: Int) = IntVarargCurrying(func, this.args + args) + operator fun invoke() = func(args) + operator fun invoke(vararg args: Int) = IntVarargCurrying(func, this.args + args) } class LongVarargCurrying( - private val func: (LongArray) -> R, - private val args: LongArray + private val func: (LongArray) -> R, + private val args: LongArray, ) { - constructor(func: (LongArray) -> R) : this(func, longArrayOf()) + constructor(func: (LongArray) -> R) : this(func, longArrayOf()) - operator fun invoke() = func(args) - operator fun invoke(vararg args: Long) = LongVarargCurrying(func, this.args + args) + operator fun invoke() = func(args) + operator fun invoke(vararg args: Long) = LongVarargCurrying(func, this.args + args) } class FloatVarargCurrying( - private val func: (FloatArray) -> R, - private val args: FloatArray + private val func: (FloatArray) -> R, + private val args: FloatArray, ) { - constructor(func: (FloatArray) -> R) : this(func, floatArrayOf()) + constructor(func: (FloatArray) -> R) : this(func, floatArrayOf()) - operator fun invoke() = func(args) - operator fun invoke(vararg args: Float) = FloatVarargCurrying(func, this.args + args) + operator fun invoke() = func(args) + operator fun invoke(vararg args: Float) = FloatVarargCurrying(func, this.args + args) } class DoubleVarargCurrying( - private val func: (DoubleArray) -> R, - private val args: DoubleArray + private val func: (DoubleArray) -> R, + private val args: DoubleArray, ) { - constructor(func: (DoubleArray) -> R) : this(func, doubleArrayOf()) + constructor(func: (DoubleArray) -> R) : this(func, doubleArrayOf()) - operator fun invoke() = func(args) - operator fun invoke(vararg args: Double) = DoubleVarargCurrying(func, this.args + args) + operator fun invoke() = func(args) + operator fun invoke(vararg args: Double) = DoubleVarargCurrying(func, this.args + args) } inline fun ((Array) -> R).currying() = VarargCurrying(this) diff --git a/ts-core/ts-curry/src/main/kotlin/cn/tursom/core/curry/currying.kt b/ts-core/ts-curry/src/main/kotlin/cn/tursom/core/curry/currying.kt index a5f0b5c..d8bd02a 100644 --- a/ts-core/ts-curry/src/main/kotlin/cn/tursom/core/curry/currying.kt +++ b/ts-core/ts-curry/src/main/kotlin/cn/tursom/core/curry/currying.kt @@ -8,223 +8,3849 @@ operator fun ((T1, T2, T3) -> R).invoke(a1: T1) = { a2: T2, a3: operator fun ((T1, T2, T3) -> R).invoke(a1: T1, a2: T2) = { a3: T3 -> this(a1, a2, a3) } operator fun ((T1, T2, T3, T4) -> R).invoke() = this -operator fun ((T1, T2, T3, T4) -> R).invoke(a1: T1) = { a2: T2, a3: T3, a4: T4 -> this(a1, a2, a3, a4) } -operator fun ((T1, T2, T3, T4) -> R).invoke(a1: T1, a2: T2) = { a3: T3, a4: T4 -> this(a1, a2, a3, a4) } -operator fun ((T1, T2, T3, T4) -> R).invoke(a1: T1, a2: T2, a3: T3) = { a4: T4 -> this(a1, a2, a3, a4) } +operator fun ((T1, T2, T3, T4) -> R).invoke(a1: T1) = + { a2: T2, a3: T3, a4: T4 -> this(a1, a2, a3, a4) } + +operator fun ((T1, T2, T3, T4) -> R).invoke(a1: T1, a2: T2) = + { a3: T3, a4: T4 -> this(a1, a2, a3, a4) } + +operator fun ((T1, T2, T3, T4) -> R).invoke(a1: T1, a2: T2, a3: T3) = + { a4: T4 -> this(a1, a2, a3, a4) } operator fun ((T1, T2, T3, T4, T5) -> R).invoke() = this -operator fun ((T1, T2, T3, T4, T5) -> R).invoke(a1: T1) = { a2: T2, a3: T3, a4: T4, a5: T5 -> this(a1, a2, a3, a4, a5) } -operator fun ((T1, T2, T3, T4, T5) -> R).invoke(a1: T1, a2: T2) = { a3: T3, a4: T4, a5: T5 -> this(a1, a2, a3, a4, a5) } -operator fun ((T1, T2, T3, T4, T5) -> R).invoke(a1: T1, a2: T2, a3: T3) = { a4: T4, a5: T5 -> this(a1, a2, a3, a4, a5) } -operator fun ((T1, T2, T3, T4, T5) -> R).invoke(a1: T1, a2: T2, a3: T3, a4: T4) = { a5: T5 -> this(a1, a2, a3, a4, a5) } +operator fun ((T1, T2, T3, T4, T5) -> R).invoke(a1: T1) = + { a2: T2, a3: T3, a4: T4, a5: T5 -> this(a1, a2, a3, a4, a5) } + +operator fun ((T1, T2, T3, T4, T5) -> R).invoke(a1: T1, a2: T2) = + { a3: T3, a4: T4, a5: T5 -> this(a1, a2, a3, a4, a5) } + +operator fun ((T1, T2, T3, T4, T5) -> R).invoke(a1: T1, a2: T2, a3: T3) = + { a4: T4, a5: T5 -> this(a1, a2, a3, a4, a5) } + +operator fun ((T1, T2, T3, T4, T5) -> R).invoke(a1: T1, a2: T2, a3: T3, a4: T4) = + { a5: T5 -> this(a1, a2, a3, a4, a5) } operator fun ((T1, T2, T3, T4, T5, T6) -> R).invoke() = this -operator fun ((T1, T2, T3, T4, T5, T6) -> R).invoke(a1: T1) = { a2: T2, a3: T3, a4: T4, a5: T5, a6: T6 -> this(a1, a2, a3, a4, a5, a6) } -operator fun ((T1, T2, T3, T4, T5, T6) -> R).invoke(a1: T1, a2: T2) = { a3: T3, a4: T4, a5: T5, a6: T6 -> this(a1, a2, a3, a4, a5, a6) } -operator fun ((T1, T2, T3, T4, T5, T6) -> R).invoke(a1: T1, a2: T2, a3: T3) = { a4: T4, a5: T5, a6: T6 -> this(a1, a2, a3, a4, a5, a6) } -operator fun ((T1, T2, T3, T4, T5, T6) -> R).invoke(a1: T1, a2: T2, a3: T3, a4: T4) = { a5: T5, a6: T6 -> this(a1, a2, a3, a4, a5, a6) } -operator fun ((T1, T2, T3, T4, T5, T6) -> R).invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5) = { a6: T6 -> this(a1, a2, a3, a4, a5, a6) } +operator fun ((T1, T2, T3, T4, T5, T6) -> R).invoke(a1: T1) = + { a2: T2, a3: T3, a4: T4, a5: T5, a6: T6 -> this(a1, a2, a3, a4, a5, a6) } + +operator fun ((T1, T2, T3, T4, T5, T6) -> R).invoke(a1: T1, a2: T2) = + { a3: T3, a4: T4, a5: T5, a6: T6 -> this(a1, a2, a3, a4, a5, a6) } + +operator fun ((T1, T2, T3, T4, T5, T6) -> R).invoke(a1: T1, a2: T2, a3: T3) = + { a4: T4, a5: T5, a6: T6 -> this(a1, a2, a3, a4, a5, a6) } + +operator fun ((T1, T2, T3, T4, T5, T6) -> R).invoke(a1: T1, a2: T2, a3: T3, a4: T4) = + { a5: T5, a6: T6 -> this(a1, a2, a3, a4, a5, a6) } + +operator fun ((T1, T2, T3, T4, T5, T6) -> R).invoke( + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, +) = { a6: T6 -> this(a1, a2, a3, a4, a5, a6) } operator fun ((T1, T2, T3, T4, T5, T6, T7) -> R).invoke() = this -operator fun ((T1, T2, T3, T4, T5, T6, T7) -> R).invoke(a1: T1) = { a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7 -> this(a1, a2, a3, a4, a5, a6, a7) } -operator fun ((T1, T2, T3, T4, T5, T6, T7) -> R).invoke(a1: T1, a2: T2) = { a3: T3, a4: T4, a5: T5, a6: T6, a7: T7 -> this(a1, a2, a3, a4, a5, a6, a7) } -operator fun ((T1, T2, T3, T4, T5, T6, T7) -> R).invoke(a1: T1, a2: T2, a3: T3) = { a4: T4, a5: T5, a6: T6, a7: T7 -> this(a1, a2, a3, a4, a5, a6, a7) } -operator fun ((T1, T2, T3, T4, T5, T6, T7) -> R).invoke(a1: T1, a2: T2, a3: T3, a4: T4) = { a5: T5, a6: T6, a7: T7 -> this(a1, a2, a3, a4, a5, a6, a7) } -operator fun ((T1, T2, T3, T4, T5, T6, T7) -> R).invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5) = { a6: T6, a7: T7 -> this(a1, a2, a3, a4, a5, a6, a7) } -operator fun ((T1, T2, T3, T4, T5, T6, T7) -> R).invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6) = { a7: T7 -> this(a1, a2, a3, a4, a5, a6, a7) } +operator fun ((T1, T2, T3, T4, T5, T6, T7) -> R).invoke(a1: T1) = + { a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7 -> this(a1, a2, a3, a4, a5, a6, a7) } + +operator fun ((T1, T2, T3, T4, T5, T6, T7) -> R).invoke(a1: T1, a2: T2) = + { a3: T3, a4: T4, a5: T5, a6: T6, a7: T7 -> this(a1, a2, a3, a4, a5, a6, a7) } + +operator fun ((T1, T2, T3, T4, T5, T6, T7) -> R).invoke(a1: T1, a2: T2, a3: T3) = + { a4: T4, a5: T5, a6: T6, a7: T7 -> this(a1, a2, a3, a4, a5, a6, a7) } + +operator fun ((T1, T2, T3, T4, T5, T6, T7) -> R).invoke( + a1: T1, + a2: T2, + a3: T3, + a4: T4, +) = { a5: T5, a6: T6, a7: T7 -> this(a1, a2, a3, a4, a5, a6, a7) } + +operator fun ((T1, T2, T3, T4, T5, T6, T7) -> R).invoke( + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, +) = { a6: T6, a7: T7 -> this(a1, a2, a3, a4, a5, a6, a7) } + +operator fun ((T1, T2, T3, T4, T5, T6, T7) -> R).invoke( + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, +) = { a7: T7 -> this(a1, a2, a3, a4, a5, a6, a7) } operator fun ((T1, T2, T3, T4, T5, T6, T7, T8) -> R).invoke() = this -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8) -> R).invoke(a1: T1) = { a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8 -> this(a1, a2, a3, a4, a5, a6, a7, a8) } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8) -> R).invoke(a1: T1, a2: T2) = { a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8 -> this(a1, a2, a3, a4, a5, a6, a7, a8) } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8) -> R).invoke(a1: T1, a2: T2, a3: T3) = { a4: T4, a5: T5, a6: T6, a7: T7, a8: T8 -> this(a1, a2, a3, a4, a5, a6, a7, a8) } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8) -> R).invoke(a1: T1, a2: T2, a3: T3, a4: T4) = { a5: T5, a6: T6, a7: T7, a8: T8 -> this(a1, a2, a3, a4, a5, a6, a7, a8) } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8) -> R).invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5) = { a6: T6, a7: T7, a8: T8 -> this(a1, a2, a3, a4, a5, a6, a7, a8) } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8) -> R).invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6) = { a7: T7, a8: T8 -> this(a1, a2, a3, a4, a5, a6, a7, a8) } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8) -> R).invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7) = { a8: T8 -> this(a1, a2, a3, a4, a5, a6, a7, a8) } +operator fun ((T1, T2, T3, T4, T5, T6, T7, T8) -> R).invoke(a1: T1) = + { a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8 -> this(a1, a2, a3, a4, a5, a6, a7, a8) } + +operator fun ((T1, T2, T3, T4, T5, T6, T7, T8) -> R).invoke(a1: T1, a2: T2) = + { a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8 -> this(a1, a2, a3, a4, a5, a6, a7, a8) } + +operator fun ((T1, T2, T3, T4, T5, T6, T7, T8) -> R).invoke( + a1: T1, + a2: T2, + a3: T3, +) = { a4: T4, a5: T5, a6: T6, a7: T7, a8: T8 -> this(a1, a2, a3, a4, a5, a6, a7, a8) } + +operator fun ((T1, T2, T3, T4, T5, T6, T7, T8) -> R).invoke( + a1: T1, + a2: T2, + a3: T3, + a4: T4, +) = { a5: T5, a6: T6, a7: T7, a8: T8 -> this(a1, a2, a3, a4, a5, a6, a7, a8) } + +operator fun ((T1, T2, T3, T4, T5, T6, T7, T8) -> R).invoke( + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, +) = { a6: T6, a7: T7, a8: T8 -> this(a1, a2, a3, a4, a5, a6, a7, a8) } + +operator fun ((T1, T2, T3, T4, T5, T6, T7, T8) -> R).invoke( + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, +) = { a7: T7, a8: T8 -> this(a1, a2, a3, a4, a5, a6, a7, a8) } + +operator fun ((T1, T2, T3, T4, T5, T6, T7, T8) -> R).invoke( + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, +) = { a8: T8 -> this(a1, a2, a3, a4, a5, a6, a7, a8) } operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9) -> R).invoke() = this -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9) -> R).invoke(a1: T1) = { a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9) } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9) -> R).invoke(a1: T1, a2: T2) = { a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9) } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9) -> R).invoke(a1: T1, a2: T2, a3: T3) = { a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9) } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9) -> R).invoke(a1: T1, a2: T2, a3: T3, a4: T4) = { a5: T5, a6: T6, a7: T7, a8: T8, a9: T9 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9) } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9) -> R).invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5) = { a6: T6, a7: T7, a8: T8, a9: T9 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9) } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9) -> R).invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6) = { a7: T7, a8: T8, a9: T9 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9) } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9) -> R).invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7) = { a8: T8, a9: T9 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9) } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9) -> R).invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8) = { a9: T9 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9) } +operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9) -> R).invoke(a1: T1) = + { a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9) } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) -> R).invoke() = this -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) -> R).invoke(a1: T1) = { a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) -> R).invoke(a1: T1, a2: T2) = { a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) -> R).invoke(a1: T1, a2: T2, a3: T3) = { a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) -> R).invoke(a1: T1, a2: T2, a3: T3, a4: T4) = { a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) -> R).invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5) = { a6: T6, a7: T7, a8: T8, a9: T9, a10: T10 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) -> R).invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6) = { a7: T7, a8: T8, a9: T9, a10: T10 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) -> R).invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7) = { a8: T8, a9: T9, a10: T10 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) -> R).invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8) = { a9: T9, a10: T10 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) -> R).invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9) = { a10: T10 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) } +operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9) -> R).invoke( + a1: T1, + a2: T2, +) = { a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9) } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) -> R).invoke() = this -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, 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 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, 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 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, 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 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, 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 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, 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 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, 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 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, 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 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, 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 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, 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 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, 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 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) } +operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9) -> R).invoke( + a1: T1, + a2: T2, + a3: T3, +) = { a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9) } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12) -> R).invoke() = this -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) } +operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9) -> R).invoke( + a1: T1, + a2: T2, + a3: T3, + a4: T4, +) = { a5: T5, a6: T6, a7: T7, a8: T8, a9: T9 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9) } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) -> R).invoke() = this -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) } +operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9) -> R).invoke( + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, +) = { a6: T6, a7: T7, a8: T8, a9: T9 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9) } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14) -> R).invoke() = this -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> R).invoke( + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, +) = { a7: T7, a8: T8, a9: T9 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9) } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15) -> R).invoke() = this -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> R).invoke( + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, +) = { a8: T8, a9: T9 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9) } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16) -> R).invoke() = this -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> R).invoke( + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, +) = { a9: T9 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9) } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17) -> R).invoke() = this -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> R).invoke() = + this -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18) -> R).invoke() = this -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> R).invoke(a1: T1) = + { a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10 -> + this(a1, + a2, + a3, + a4, + a5, + a6, + a7, + a8, + a9, + a10) + } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19) -> R).invoke() = this -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> R).invoke( + a1: T1, + a2: T2, +) = + { a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20) -> R).invoke() = this -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, 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 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, 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 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, 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 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, 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 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, 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 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, 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 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, 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 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, 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 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, 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 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, 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 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, 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 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, 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 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, 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 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, 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 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, 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 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, 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 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, 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 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, 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 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) } -operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, 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 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) } +operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) -> R).invoke( + a1: T1, + a2: T2, + a3: T3, +) = { a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) } + +operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) -> R).invoke( + a1: T1, + a2: T2, + a3: T3, + a4: T4, +) = { a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) } + +operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) -> R).invoke( + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, +) = { a6: T6, a7: T7, a8: T8, a9: T9, a10: T10 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) } + +operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) -> R).invoke( + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, +) = { a7: T7, a8: T8, a9: T9, a10: T10 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) } + +operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) -> R).invoke( + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, +) = { a8: T8, a9: T9, a10: T10 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) } + +operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) -> R).invoke( + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, +) = { a9: T9, a10: T10 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) } + +operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) -> R).invoke( + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + a9: T9, +) = { a10: T10 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) } + +operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) -> R).invoke() = + this + +operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, 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 -> + this(a1, + a2, + a3, + a4, + a5, + a6, + a7, + a8, + a9, + a10, + a11) +} + +operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, 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 -> + this(a1, + a2, + a3, + a4, + a5, + a6, + a7, + a8, + a9, + a10, + a11) +} + +operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, 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 -> + this(a1, + a2, + a3, + a4, + a5, + a6, + a7, + a8, + a9, + a10, + a11) +} + +operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, 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 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) } + +operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, 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 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) } + +operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, 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 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) } + +operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, 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 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) } + +operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, 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 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) } + +operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, 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 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) } + +operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, 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 -> this(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).invoke() = + this + +operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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).invoke() = + this + +operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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).invoke() = + this + +operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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).invoke() = + this + +operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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).invoke() = + this + +operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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).invoke() = + this + +operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> this(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) -> 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 -> this(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) -> 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 -> this(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).invoke() = + this + +operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> this(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) -> 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 -> this(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).invoke() = + this + +operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> + this(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) -> 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 -> this(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) -> 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 -> this(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).invoke() = + this + +operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, 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 -> + this(a1, + a2, + a3, + a4, + a5, + a6, + a7, + a8, + a9, + a10, + a11, + a12, + a13, + a14, + a15, + a16, + a17, + a18, + a19, + a20) + } + +operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, 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 -> + this(a1, + a2, + a3, + a4, + a5, + a6, + a7, + a8, + a9, + a10, + a11, + a12, + a13, + a14, + a15, + a16, + a17, + a18, + a19, + a20) + } + +operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, 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 -> + this(a1, + a2, + a3, + a4, + a5, + a6, + a7, + a8, + a9, + a10, + a11, + a12, + a13, + a14, + a15, + a16, + a17, + a18, + a19, + a20) + } + +operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, 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 -> + this(a1, + a2, + a3, + a4, + a5, + a6, + a7, + a8, + a9, + a10, + a11, + a12, + a13, + a14, + a15, + a16, + a17, + a18, + a19, + a20) + } + +operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, 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 -> + this(a1, + a2, + a3, + a4, + a5, + a6, + a7, + a8, + a9, + a10, + a11, + a12, + a13, + a14, + a15, + a16, + a17, + a18, + a19, + a20) + } + +operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, 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 -> + this(a1, + a2, + a3, + a4, + a5, + a6, + a7, + a8, + a9, + a10, + a11, + a12, + a13, + a14, + a15, + a16, + a17, + a18, + a19, + a20) + } + +operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, 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 -> + this(a1, + a2, + a3, + a4, + a5, + a6, + a7, + a8, + a9, + a10, + a11, + a12, + a13, + a14, + a15, + a16, + a17, + a18, + a19, + a20) + } + +operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, 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 -> + this(a1, + a2, + a3, + a4, + a5, + a6, + a7, + a8, + a9, + a10, + a11, + a12, + a13, + a14, + a15, + a16, + a17, + a18, + a19, + a20) + } + +operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, 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 -> + this(a1, + a2, + a3, + a4, + a5, + a6, + a7, + a8, + a9, + a10, + a11, + a12, + a13, + a14, + a15, + a16, + a17, + a18, + a19, + a20) +} + +operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, 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 -> + this(a1, + a2, + a3, + a4, + a5, + a6, + a7, + a8, + a9, + a10, + a11, + a12, + a13, + a14, + a15, + a16, + a17, + a18, + a19, + a20) +} + +operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, 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 -> + this(a1, + a2, + a3, + a4, + a5, + a6, + a7, + a8, + a9, + a10, + a11, + a12, + a13, + a14, + a15, + a16, + a17, + a18, + a19, + a20) +} + +operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, 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 -> + this(a1, + a2, + a3, + a4, + a5, + a6, + a7, + a8, + a9, + a10, + a11, + a12, + a13, + a14, + a15, + a16, + a17, + a18, + a19, + a20) +} + +operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, 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 -> + this(a1, + a2, + a3, + a4, + a5, + a6, + a7, + a8, + a9, + a10, + a11, + a12, + a13, + a14, + a15, + a16, + a17, + a18, + a19, + a20) +} + +operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, 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 -> + this(a1, + a2, + a3, + a4, + a5, + a6, + a7, + a8, + a9, + a10, + a11, + a12, + a13, + a14, + a15, + a16, + a17, + a18, + a19, + a20) +} + +operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, 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 -> + this(a1, + a2, + a3, + a4, + a5, + a6, + a7, + a8, + a9, + a10, + a11, + a12, + a13, + a14, + a15, + a16, + a17, + a18, + a19, + a20) +} + +operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, 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 -> + this(a1, + a2, + a3, + a4, + a5, + a6, + a7, + a8, + a9, + a10, + a11, + a12, + a13, + a14, + a15, + a16, + a17, + a18, + a19, + a20) +} + +operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, 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 -> + this(a1, + a2, + a3, + a4, + a5, + a6, + a7, + a8, + a9, + a10, + a11, + a12, + a13, + a14, + a15, + a16, + a17, + a18, + a19, + a20) +} + +operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, 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 -> + this(a1, + a2, + a3, + a4, + a5, + a6, + a7, + a8, + a9, + a10, + a11, + a12, + a13, + a14, + a15, + a16, + a17, + a18, + a19, + a20) +} + +operator fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, 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 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) } diff --git a/ts-core/ts-curry/src/main/kotlin/cn/tursom/core/curry/curyingMethod.kt b/ts-core/ts-curry/src/main/kotlin/cn/tursom/core/curry/curyingMethod.kt index 34b56eb..5fd6552 100644 --- a/ts-core/ts-curry/src/main/kotlin/cn/tursom/core/curry/curyingMethod.kt +++ b/ts-core/ts-curry/src/main/kotlin/cn/tursom/core/curry/curyingMethod.kt @@ -2,96 +2,708 @@ package cn.tursom.core.curry fun ((T1, T2) -> R).currying() = { a1: T1 -> { a2: T2 -> this(a1, a2) } } fun ((T1, T2, T3) -> R).currying() = { a1: T1 -> { a2: T2 -> { a3: T3 -> this(a1, a2, a3) } } } -fun ((T1, T2, T3, T4) -> R).currying() = { a1: T1 -> { a2: T2 -> { a3: T3 -> { a4: T4 -> this(a1, a2, a3, a4) } } } } -fun ((T1, T2, T3, T4, T5) -> R).currying() = { a1: T1 -> { a2: T2 -> { a3: T3 -> { a4: T4 -> { a5: T5 -> this(a1, a2, a3, a4, a5) } } } } } -fun ((T1, T2, T3, T4, T5, T6) -> R).currying() = { a1: T1 -> { a2: T2 -> { a3: T3 -> { a4: T4 -> { a5: T5 -> { a6: T6 -> this(a1, a2, a3, a4, a5, a6) } } } } } } -fun ((T1, T2, T3, T4, T5, T6, T7) -> R).currying() = { a1: T1 -> { a2: T2 -> { a3: T3 -> { a4: T4 -> { a5: T5 -> { a6: T6 -> { a7: T7 -> this(a1, a2, a3, a4, a5, a6, a7) } } } } } } } -fun ((T1, T2, T3, T4, T5, T6, T7, T8) -> R).currying() = { a1: T1 -> { a2: T2 -> { a3: T3 -> { a4: T4 -> { a5: T5 -> { a6: T6 -> { a7: T7 -> { a8: T8 -> this(a1, a2, a3, a4, a5, a6, a7, a8) } } } } } } } } -fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9) -> R).currying() = { a1: T1 -> { a2: T2 -> { a3: T3 -> { a4: T4 -> { a5: T5 -> { a6: T6 -> { a7: T7 -> { a8: T8 -> { a9: T9 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9) } } } } } } } } } -fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) -> R).currying() = { a1: T1 -> { a2: T2 -> { a3: T3 -> { a4: T4 -> { a5: T5 -> { a6: T6 -> { a7: T7 -> { a8: T8 -> { a9: T9 -> { a10: T10 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) } } } } } } } } } } -fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) -> R).currying() = { a1: T1 -> { a2: T2 -> { a3: T3 -> { a4: T4 -> { a5: T5 -> { a6: T6 -> { a7: T7 -> { a8: T8 -> { a9: T9 -> { a10: T10 -> { a11: T11 -> this(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).currying() = { a1: T1 -> { a2: T2 -> { a3: T3 -> { a4: T4 -> { a5: T5 -> { a6: T6 -> { a7: T7 -> { a8: T8 -> { a9: T9 -> { a10: T10 -> { a11: T11 -> { a12: T12 -> this(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).currying() = { 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 -> this(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).currying() = { 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 -> this(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).currying() = { 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 -> this(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).currying() = { 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 -> this(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).currying() = { 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 -> this(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).currying() = { 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 -> this(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).currying() = { 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 -> this(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).currying() = { 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 -> this(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) } } } } } } } } } } } } } } } } } } } } +fun ((T1, T2, T3, T4) -> R).currying() = + { a1: T1 -> { a2: T2 -> { a3: T3 -> { a4: T4 -> this(a1, a2, a3, a4) } } } } + +fun ((T1, T2, T3, T4, T5) -> R).currying() = + { a1: T1 -> { a2: T2 -> { a3: T3 -> { a4: T4 -> { a5: T5 -> this(a1, a2, a3, a4, a5) } } } } } + +fun ((T1, T2, T3, T4, T5, T6) -> R).currying() = + { a1: T1 -> { a2: T2 -> { a3: T3 -> { a4: T4 -> { a5: T5 -> { a6: T6 -> this(a1, a2, a3, a4, a5, a6) } } } } } } + +fun ((T1, T2, T3, T4, T5, T6, T7) -> R).currying() = { a1: T1 -> + { a2: T2 -> + { a3: T3 -> + { a4: T4 -> + { a5: T5 -> + { a6: T6 -> + { a7: T7 -> + this(a1, + a2, + a3, + a4, + a5, + a6, + a7) + } + } + } + } + } + } +} + +fun ((T1, T2, T3, T4, T5, T6, T7, T8) -> R).currying() = { a1: T1 -> + { a2: T2 -> + { a3: T3 -> + { a4: T4 -> + { a5: T5 -> + { a6: T6 -> + { a7: T7 -> + { a8: T8 -> + this(a1, + a2, + a3, + a4, + a5, + a6, + a7, + a8) + } + } + } + } + } + } + } +} + +fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9) -> R).currying() = { a1: T1 -> + { a2: T2 -> + { a3: T3 -> + { a4: T4 -> + { a5: T5 -> + { a6: T6 -> + { a7: T7 -> + { a8: T8 -> + { a9: T9 -> + this(a1, + a2, + a3, + a4, + a5, + a6, + a7, + a8, + a9) + } + } + } + } + } + } + } + } +} + +fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) -> R).currying() = + { a1: T1 -> + { a2: T2 -> + { a3: T3 -> + { a4: T4 -> + { a5: T5 -> + { a6: T6 -> + { a7: T7 -> + { a8: T8 -> + { a9: T9 -> + { a10: T10 -> + this(a1, + a2, + a3, + a4, + a5, + a6, + a7, + a8, + a9, + a10) + } + } + } + } + } + } + } + } + } + } + +fun ((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) -> R).currying() = + { a1: T1 -> + { a2: T2 -> + { a3: T3 -> + { a4: T4 -> + { a5: T5 -> + { a6: T6 -> + { a7: T7 -> + { a8: T8 -> + { a9: T9 -> + { a10: T10 -> + { a11: T11 -> + this(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).currying() = + { a1: T1 -> + { a2: T2 -> + { a3: T3 -> + { a4: T4 -> + { a5: T5 -> + { a6: T6 -> + { a7: T7 -> + { a8: T8 -> + { a9: T9 -> + { a10: T10 -> + { a11: T11 -> + { a12: T12 -> + this(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).currying() = + { 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 -> + this(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).currying() = + { 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 -> + this(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).currying() = + { 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 -> + this(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).currying() = + { 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 -> + this(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).currying() = + { 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 -> + this(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).currying() = + { 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 -> + this(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).currying() = + { 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 -> + this(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).currying() = + { 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 -> + this(a1, + a2, + a3, + a4, + a5, + a6, + a7, + a8, + a9, + a10, + a11, + a12, + a13, + a14, + a15, + a16, + a17, + a18, + a19, + a20) + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } @JvmName("curryingVararg") inline fun ((Array, T2) -> R).currying(vararg args: T1) = - currying, T2, R>().currying(args = args) + currying, T2, R>().currying(args = args) @JvmName("curryingVararg") inline fun ((Array, T2, T3) -> R).currying(vararg args: T1) = - currying, T2, T3, R>().currying(args = args) + currying, T2, T3, R>().currying(args = args) @JvmName("curryingVararg") inline fun ((Array, T2, T3, T4) -> R).currying(vararg args: T1) = - currying, T2, T3, T4, R>().currying(args = args) + currying, T2, T3, T4, R>().currying(args = args) @JvmName("curryingVararg") inline fun ((Array, T2, T3, T4, T5) -> R).currying(vararg args: T1) = - currying, T2, T3, T4, T5, R>().currying(args = args) + currying, T2, T3, T4, T5, R>().currying(args = args) @JvmName("curryingVararg") inline fun ((Array, T2, T3, T4, T5, T6) -> R).currying(vararg args: T1) = - currying, T2, T3, T4, T5, T6, R>().currying(args = args) + currying, T2, T3, T4, T5, T6, R>().currying(args = args) @JvmName("curryingVararg") inline fun ((Array, T2, T3, T4, T5, T6, T7) -> R).currying(vararg args: T1) = - currying, T2, T3, T4, T5, T6, T7, R>().currying(args = args) + currying, T2, T3, T4, T5, T6, T7, R>().currying(args = args) @JvmName("curryingVararg") -inline fun ((Array, T2, T3, T4, T5, T6, T7, T8) -> R).currying(vararg args: T1) = - currying, T2, T3, T4, T5, T6, T7, T8, R>().currying(args = args) +inline fun ((Array, T2, T3, T4, T5, T6, T7, T8) -> R).currying( + vararg args: T1, +) = + currying, T2, T3, T4, T5, T6, T7, T8, R>().currying(args = args) @JvmName("curryingVararg") -inline fun ((Array, T2, T3, T4, T5, T6, T7, T8, T9) -> R).currying(vararg args: T1) = - currying, T2, T3, T4, T5, T6, T7, T8, T9, R>().currying(args = args) +inline fun ((Array, T2, T3, T4, T5, T6, T7, T8, T9) -> R).currying( + vararg args: T1, +) = + currying, T2, T3, T4, T5, T6, T7, T8, T9, R>().currying(args = args) @JvmName("curryingVararg") -inline fun ((Array, T2, T3, T4, T5, T6, T7, T8, T9, T10) -> R).currying(vararg args: T1) = - currying, T2, T3, T4, T5, T6, T7, T8, T9, T10, R>().currying(args = args) +inline fun ((Array, T2, T3, T4, T5, T6, T7, T8, T9, T10) -> R).currying( + vararg args: T1, +) = + currying, T2, T3, T4, T5, T6, T7, T8, T9, T10, R>().currying(args = args) @JvmName("curryingVararg") -inline fun ((Array, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) -> R).currying(vararg args: T1) = - currying, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, R>().currying(args = args) +inline fun ((Array, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) -> R).currying( + vararg args: T1, +) = + currying, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, R>().currying(args = args) @JvmName("curryingVararg") -inline fun ((Array, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12) -> R).currying(vararg args: T1) = - currying, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, R>().currying(args = args) +inline fun ((Array, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12) -> R).currying( + vararg args: T1, +) = + currying, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, R>().currying(args = args) @JvmName("curryingVararg") -inline fun ((Array, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) -> R).currying(vararg args: T1) = - currying, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, R>().currying(args = args) +inline fun ((Array, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) -> R).currying( + vararg args: T1, +) = + currying, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, R>().currying(args = args) @JvmName("curryingVararg") -inline fun ((Array, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14) -> R).currying(vararg args: T1) = - currying, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, R>().currying(args = args) +inline fun ((Array, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14) -> R).currying( + vararg args: T1, +) = + currying, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, R>().currying(args = args) @JvmName("curryingVararg") -inline fun ((Array, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15) -> R).currying(vararg args: T1) = - currying, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, R>().currying(args = args) +inline fun ((Array, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15) -> R).currying( + vararg args: T1, +) = + currying, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, R>().currying(args = args) @JvmName("curryingVararg") -inline fun ((Array, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16) -> R).currying(vararg args: T1) = - currying, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, R>().currying(args = args) +inline fun ((Array, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16) -> R).currying( + vararg args: T1, +) = + currying, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, R>().currying(args = args) @JvmName("curryingVararg") -inline fun ((Array, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17) -> R).currying(vararg args: T1) = - currying, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, R>().currying(args = args) +inline fun ((Array, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17) -> R).currying( + vararg args: T1, +) = + currying, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, R>().currying(args = args) @JvmName("curryingVararg") -inline fun ((Array, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18) -> R).currying(vararg args: T1) = - currying, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, R>().currying(args = args) +inline fun ((Array, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18) -> R).currying( + vararg args: T1, +) = + currying, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, R>().currying( + args = args) @JvmName("curryingVararg") -inline fun ((Array, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19) -> R).currying(vararg args: T1) = - currying, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, R>().currying(args = args) +inline fun ((Array, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19) -> R).currying( + vararg args: T1, +) = + currying, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, R>().currying( + args = args) @JvmName("curryingVararg") -inline fun ((Array, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20) -> R).currying(vararg args: T1) = - currying, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, R>().currying(args = args) +inline fun ((Array, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20) -> R).currying( + vararg args: T1, +) = + currying, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, R>().currying( + args = args) diff --git a/ts-core/ts-curry/src/main/kotlin/cn/tursom/core/curry/uncurrying.kt b/ts-core/ts-curry/src/main/kotlin/cn/tursom/core/curry/uncurrying.kt index 54b8fc4..1de728f 100644 --- a/ts-core/ts-curry/src/main/kotlin/cn/tursom/core/curry/uncurrying.kt +++ b/ts-core/ts-curry/src/main/kotlin/cn/tursom/core/curry/uncurrying.kt @@ -2,20 +2,253 @@ package cn.tursom.core.curry operator fun ((T1) -> (T2) -> R).invoke(a1: T1, a2: T2) = this(a1)(a2) operator fun ((T1) -> (T2) -> (T3) -> R).invoke(a1: T1, a2: T2, a3: T3) = this(a1)(a2)(a3) -operator fun ((T1) -> (T2) -> (T3) -> (T4) -> R).invoke(a1: T1, a2: T2, a3: T3, a4: T4) = this(a1)(a2)(a3)(a4) -operator fun ((T1) -> (T2) -> (T3) -> (T4) -> (T5) -> R).invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5) = this(a1)(a2)(a3)(a4)(a5) -operator fun ((T1) -> (T2) -> (T3) -> (T4) -> (T5) -> (T6) -> R).invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6) = this(a1)(a2)(a3)(a4)(a5)(a6) -operator fun ((T1) -> (T2) -> (T3) -> (T4) -> (T5) -> (T6) -> (T7) -> R).invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7) = this(a1)(a2)(a3)(a4)(a5)(a6)(a7) -operator fun ((T1) -> (T2) -> (T3) -> (T4) -> (T5) -> (T6) -> (T7) -> (T8) -> R).invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8) = this(a1)(a2)(a3)(a4)(a5)(a6)(a7)(a8) -operator fun ((T1) -> (T2) -> (T3) -> (T4) -> (T5) -> (T6) -> (T7) -> (T8) -> (T9) -> R).invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9) = this(a1)(a2)(a3)(a4)(a5)(a6)(a7)(a8)(a9) -operator fun ((T1) -> (T2) -> (T3) -> (T4) -> (T5) -> (T6) -> (T7) -> (T8) -> (T9) -> (T10) -> R).invoke(a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9, a10: T10) = this(a1)(a2)(a3)(a4)(a5)(a6)(a7)(a8)(a9)(a10) -operator fun ((T1) -> (T2) -> (T3) -> (T4) -> (T5) -> (T6) -> (T7) -> (T8) -> (T9) -> (T10) -> (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) = this(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).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) = this(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).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) = this(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).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) = this(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).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) = this(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).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) = this(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).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) = this(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).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) = this(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).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) = this(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).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) = this(a1)(a2)(a3)(a4)(a5)(a6)(a7)(a8)(a9)(a10)(a11)(a12)(a13)(a14)(a15)(a16)(a17)(a18)(a19)(a20) +operator fun ((T1) -> (T2) -> (T3) -> (T4) -> R).invoke(a1: T1, a2: T2, a3: T3, a4: T4) = + this(a1)(a2)(a3)(a4) + +operator fun ((T1) -> (T2) -> (T3) -> (T4) -> (T5) -> R).invoke( + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, +) = this(a1)(a2)(a3)(a4)(a5) + +operator fun ((T1) -> (T2) -> (T3) -> (T4) -> (T5) -> (T6) -> R).invoke( + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, +) = this(a1)(a2)(a3)(a4)(a5)(a6) + +operator fun ((T1) -> (T2) -> (T3) -> (T4) -> (T5) -> (T6) -> (T7) -> R).invoke( + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, +) = this(a1)(a2)(a3)(a4)(a5)(a6)(a7) + +operator fun ((T1) -> (T2) -> (T3) -> (T4) -> (T5) -> (T6) -> (T7) -> (T8) -> R).invoke( + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, +) = this(a1)(a2)(a3)(a4)(a5)(a6)(a7)(a8) + +operator fun ((T1) -> (T2) -> (T3) -> (T4) -> (T5) -> (T6) -> (T7) -> (T8) -> (T9) -> R).invoke( + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + a9: T9, +) = this(a1)(a2)(a3)(a4)(a5)(a6)(a7)(a8)(a9) + +operator fun ((T1) -> (T2) -> (T3) -> (T4) -> (T5) -> (T6) -> (T7) -> (T8) -> (T9) -> (T10) -> R).invoke( + a1: T1, + a2: T2, + a3: T3, + a4: T4, + a5: T5, + a6: T6, + a7: T7, + a8: T8, + a9: T9, + a10: T10, +) = this(a1)(a2)(a3)(a4)(a5)(a6)(a7)(a8)(a9)(a10) + +operator fun ((T1) -> (T2) -> (T3) -> (T4) -> (T5) -> (T6) -> (T7) -> (T8) -> (T9) -> (T10) -> (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, +) = this(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).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, +) = this(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).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, +) = this(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).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, +) = this(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).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, +) = this(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).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, +) = this(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).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, +) = this(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).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, +) = this(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).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, +) = this(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).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, +) = this(a1)(a2)(a3)(a4)(a5)(a6)(a7)(a8)(a9)(a10)(a11)(a12)(a13)(a14)(a15)(a16)(a17)(a18)(a19)(a20) diff --git a/ts-core/ts-curry/src/test/kotlin/cn/tursom/core/curry/CurryBuilder.kt b/ts-core/ts-curry/src/test/kotlin/cn/tursom/core/curry/CurryBuilder.kt index 51e9f25..97cab44 100644 --- a/ts-core/ts-curry/src/test/kotlin/cn/tursom/core/curry/CurryBuilder.kt +++ b/ts-core/ts-curry/src/test/kotlin/cn/tursom/core/curry/CurryBuilder.kt @@ -4,186 +4,186 @@ import cn.tursom.core.removeLastChars import org.junit.Test class CurryBuilder { - @Test - fun buildCurryClass() { - (3..20).forEach(::buildCurryClass) - } + @Test + fun buildCurryClass() { + (3..20).forEach(::buildCurryClass) + } - @Test - fun buildInvokeMethod() { - (3..20).forEach(::buildInvokeMethod) - } + @Test + fun buildInvokeMethod() { + (3..20).forEach(::buildInvokeMethod) + } - @Test - fun buildMethodInvoker() { - (4..20).forEach(::buildMethodInvoker) - } + @Test + fun buildMethodInvoker() { + (4..20).forEach(::buildMethodInvoker) + } - @Test - fun buildObjectI() { - println( - "package com.ddbes.kotlin.util\n" + - "\n" + - "import com.ddbes.kotlin.util.curry.*\n" + @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}, ") + } + removeLastChars(2) + } + + fun args(fromIndex: Int, toIndex: Int) = buildString { + (fromIndex..toIndex).forEach { + append("a${it}, ") + } + removeLastChars(2) + } + + fun types(index: Int) = buildString { + repeat(index) { + append("T${it + 1}, ") + } + removeLastChars(2) + } + + fun types(fromIndex: Int, toIndex: Int) = buildString { + (fromIndex..toIndex).forEach { + append("T${it}, ") + } + removeLastChars(2) + } + + fun argsWithType(index: Int) = buildString { + repeat(index) { + append("a${it + 1}: T${it + 1}, ") + } + 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 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" ) - println(buildObjectI(20, "I", extensionLambda = false, extensionCurry = false)) - println(buildObjectI(20, "F", extensionLambda = true, extensionCurry = false)) - //println(buildObjectI(20, "C", extensionLambda = false, extensionCurry = true)) + 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 args(index: Int) = buildString { - repeat(index) { - append("a${it + 1}, ") - } - removeLastChars(2) - } - - fun args(fromIndex: Int, toIndex: Int) = buildString { - (fromIndex..toIndex).forEach { - append("a${it}, ") - } - removeLastChars(2) - } - - fun types(index: Int) = buildString { - repeat(index) { - append("T${it + 1}, ") - } - removeLastChars(2) - } - - fun types(fromIndex: Int, toIndex: Int) = buildString { - (fromIndex..toIndex).forEach { - append("T${it}, ") - } - removeLastChars(2) - } - - fun argsWithType(index: Int) = buildString { - repeat(index) { - append("a${it + 1}: T${it + 1}, ") - } - 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 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) - val types = types(index) - val invokeAction = "action$index($args)" - println(buildString { - append("open class Curry$index<$types, R>(\n") - append(" val action$index: ($argsWithType) -> R,\n") - append(") : Curry${index - 1}<${types(index - 1)}, Curry1>({ ${args(index - 1)} ->\n") - append(" Curry1 { a$index ->\n") - append(" action$index($args)\n") - append(" }\n") - append("}) {\n") - if (index > 2) (1..index - 2).forEach { overrideInvoke -> - append(" override operator fun invoke(${argsWithType(overrideInvoke)}): Curry${index - overrideInvoke}<${ - types(overrideInvoke + 1, index) - }, R> = Curry${index - overrideInvoke} { ${args(overrideInvoke + 1, index)} ->\n") - append(" $invokeAction\n") - append(" }\n") - append("\n") - } - append(" open operator fun invoke($argsWithType): R = $invokeAction\n") - append("}\n") - }) - } - - fun buildCurryMethod(index: Int) { - val args = args(index) - val argsWithType = argsWithType(index) - val types = types(index) - - println(buildString { - append("fun <$types, R> curry(action: ($types) -> R) =\n") - append(" Curry$index { $argsWithType ->\n") - append(" action($args)\n") - append(" }\n") - }) - } - - fun buildInvokeMethod(index: Int) { - val args = args(index) - val argsWithType = argsWithType(index) - val types = types(index) - - println(buildString { - append("operator fun <$types, R> ") - repeat(index - 1) { - append("Curry1", ">".repeat(index - 1), ".invoke($argsWithType): R {\n") - append(" return if (this is Curry$index) {\n") - append(" uncheckedCast>()($args)\n") - append(" } else {\n") - append(" invoke") - repeat(index) { an -> - append("(a${an + 1})") - } - append("\n") - append(" }\n") - append("}\n") - }) - } - - fun buildMethodInvoker(index: Int) { - val args = args(index) - val types = types(index) - - println("operator fun <$types, R> (($types) -> R).invoke() = this") - (1 until index).forEach { argCount -> - println( - "operator fun <$types, R> (($types) -> R).invoke(${argsWithType(argCount)}) = " + - "{ ${argsWithType(argCount + 1, index)} -> this(${args}) }" - ) - } - println() + fun buildCurryClass(index: Int) { + val args = args(index) + val argsWithType = argsWithType(index) + val types = types(index) + val invokeAction = "action$index($args)" + println(buildString { + append("open class Curry$index<$types, R>(\n") + append(" val action$index: ($argsWithType) -> R,\n") + append(") : Curry${index - 1}<${types(index - 1)}, Curry1>({ ${args(index - 1)} ->\n") + append(" Curry1 { a$index ->\n") + append(" action$index($args)\n") + append(" }\n") + append("}) {\n") + if (index > 2) (1..index - 2).forEach { overrideInvoke -> + append(" override operator fun invoke(${argsWithType(overrideInvoke)}): Curry${index - overrideInvoke}<${ + types(overrideInvoke + 1, index) + }, R> = Curry${index - overrideInvoke} { ${args(overrideInvoke + 1, index)} ->\n") + append(" $invokeAction\n") + append(" }\n") + append("\n") + } + append(" open operator fun invoke($argsWithType): R = $invokeAction\n") + append("}\n") + }) + } + + fun buildCurryMethod(index: Int) { + val args = args(index) + val argsWithType = argsWithType(index) + val types = types(index) + + println(buildString { + append("fun <$types, R> curry(action: ($types) -> R) =\n") + append(" Curry$index { $argsWithType ->\n") + append(" action($args)\n") + append(" }\n") + }) + } + + fun buildInvokeMethod(index: Int) { + val args = args(index) + val argsWithType = argsWithType(index) + val types = types(index) + + println(buildString { + append("operator fun <$types, R> ") + repeat(index - 1) { + append("Curry1", ">".repeat(index - 1), ".invoke($argsWithType): R {\n") + append(" return if (this is Curry$index) {\n") + append(" uncheckedCast>()($args)\n") + append(" } else {\n") + append(" invoke") + repeat(index) { an -> + append("(a${an + 1})") + } + append("\n") + append(" }\n") + append("}\n") + }) + } + + fun buildMethodInvoker(index: Int) { + val args = args(index) + val types = types(index) + + println("operator fun <$types, R> (($types) -> R).invoke() = this") + (1 until index).forEach { argCount -> + println( + "operator fun <$types, R> (($types) -> R).invoke(${argsWithType(argCount)}) = " + + "{ ${argsWithType(argCount + 1, index)} -> this(${args}) }" + ) } + println() + } } diff --git a/ts-core/ts-datastruct/src/main/kotlin/cn/tursom/core/datastruct/AbstractListIterator.kt b/ts-core/ts-datastruct/src/main/kotlin/cn/tursom/core/datastruct/AbstractListIterator.kt index a09d74d..5199655 100644 --- a/ts-core/ts-datastruct/src/main/kotlin/cn/tursom/core/datastruct/AbstractListIterator.kt +++ b/ts-core/ts-datastruct/src/main/kotlin/cn/tursom/core/datastruct/AbstractListIterator.kt @@ -2,7 +2,7 @@ package cn.tursom.core.datastruct open class AbstractListIterator( val list: List, - private var index: Int = 0 + private var index: Int = 0, ) : ListIterator { override fun hasNext(): Boolean = list.size > index override fun next(): E = list[index++] diff --git a/ts-core/ts-datastruct/src/main/kotlin/cn/tursom/core/datastruct/ArrayMap.kt b/ts-core/ts-datastruct/src/main/kotlin/cn/tursom/core/datastruct/ArrayMap.kt index 47e6a7b..7ff00f4 100644 --- a/ts-core/ts-datastruct/src/main/kotlin/cn/tursom/core/datastruct/ArrayMap.kt +++ b/ts-core/ts-datastruct/src/main/kotlin/cn/tursom/core/datastruct/ArrayMap.kt @@ -143,7 +143,7 @@ open class ArrayMap(initialCapacity: Int = 16) : SimpMap { class Node( override val key: K, - @Volatile override var value: V + @Volatile override var value: V, ) : MutableMap.MutableEntry, Comparable { override fun toString(): String = "$key=$value" override fun setValue(newValue: V): V = value.also { value = newValue } diff --git a/ts-core/ts-datastruct/src/main/kotlin/cn/tursom/core/datastruct/AtomicBitSet.kt b/ts-core/ts-datastruct/src/main/kotlin/cn/tursom/core/datastruct/AtomicBitSet.kt index 7511f14..8319627 100644 --- a/ts-core/ts-datastruct/src/main/kotlin/cn/tursom/core/datastruct/AtomicBitSet.kt +++ b/ts-core/ts-datastruct/src/main/kotlin/cn/tursom/core/datastruct/AtomicBitSet.kt @@ -217,7 +217,7 @@ class AtomicBitSet(beginSize: Long = 256, val defaultState: Boolean = false) : S startIndex: Int, length: Int = length(), asc: Boolean = true, - action: (index: Int, Long) -> Unit + action: (index: Int, Long) -> Unit, ) { repeat(length) { val index = if (asc) { diff --git a/ts-core/ts-datastruct/src/main/kotlin/cn/tursom/core/datastruct/KPropertyEntries.kt b/ts-core/ts-datastruct/src/main/kotlin/cn/tursom/core/datastruct/KPropertyEntries.kt index 6ca0a29..7923f80 100644 --- a/ts-core/ts-datastruct/src/main/kotlin/cn/tursom/core/datastruct/KPropertyEntries.kt +++ b/ts-core/ts-datastruct/src/main/kotlin/cn/tursom/core/datastruct/KPropertyEntries.kt @@ -4,7 +4,7 @@ import kotlin.reflect.KProperty1 class KPropertyEntries( val target: Any, - private val propertyMap: Map> = KPropertyValueMap[target] + private val propertyMap: Map> = KPropertyValueMap[target], ) : Set> { override val size: Int = propertyMap.size override fun isEmpty(): Boolean = propertyMap.isEmpty() diff --git a/ts-core/ts-datastruct/src/main/kotlin/cn/tursom/core/datastruct/KPropertyValueCollection.kt b/ts-core/ts-datastruct/src/main/kotlin/cn/tursom/core/datastruct/KPropertyValueCollection.kt index 4bd3cec..a15fd5f 100644 --- a/ts-core/ts-datastruct/src/main/kotlin/cn/tursom/core/datastruct/KPropertyValueCollection.kt +++ b/ts-core/ts-datastruct/src/main/kotlin/cn/tursom/core/datastruct/KPropertyValueCollection.kt @@ -4,7 +4,7 @@ import kotlin.reflect.KProperty1 class KPropertyValueCollection( val target: Any, - private val propertyMap: Map> = KPropertyValueMap[target] + private val propertyMap: Map> = KPropertyValueMap[target], ) : Collection { override val size: Int get() = propertyMap.size override fun isEmpty(): Boolean = propertyMap.isEmpty() diff --git a/ts-core/ts-datastruct/src/main/kotlin/cn/tursom/core/datastruct/MutableSubList.kt b/ts-core/ts-datastruct/src/main/kotlin/cn/tursom/core/datastruct/MutableSubList.kt index f312702..f84122e 100644 --- a/ts-core/ts-datastruct/src/main/kotlin/cn/tursom/core/datastruct/MutableSubList.kt +++ b/ts-core/ts-datastruct/src/main/kotlin/cn/tursom/core/datastruct/MutableSubList.kt @@ -3,7 +3,7 @@ package cn.tursom.core.datastruct class MutableSubList( val parent: MutableList, val fromIndex: Int, - val toIndex: Int + val toIndex: Int, ) : AbstractMutableList { override val size: Int get() = toIndex - fromIndex diff --git a/ts-core/ts-datastruct/src/main/kotlin/cn/tursom/core/datastruct/ParallelArrayMap.kt b/ts-core/ts-datastruct/src/main/kotlin/cn/tursom/core/datastruct/ParallelArrayMap.kt index 2675c08..8c9d1f8 100644 --- a/ts-core/ts-datastruct/src/main/kotlin/cn/tursom/core/datastruct/ParallelArrayMap.kt +++ b/ts-core/ts-datastruct/src/main/kotlin/cn/tursom/core/datastruct/ParallelArrayMap.kt @@ -192,7 +192,7 @@ open class ParallelArrayMap(initialCapacity: Int = 16) : SimpMap { class ParallelArrayMapEntry( val map: ParallelArrayMap, - val index: Int + val index: Int, ) : MutableMap.MutableEntry { override val key: K get() = map.getKeyByIndex(index).uncheckedCast() override val value: V get() = map.getByIndex(index).uncheckedCast() diff --git a/ts-core/ts-datastruct/src/main/kotlin/cn/tursom/core/datastruct/ReversedList.kt b/ts-core/ts-datastruct/src/main/kotlin/cn/tursom/core/datastruct/ReversedList.kt index 795e1b2..abbf731 100644 --- a/ts-core/ts-datastruct/src/main/kotlin/cn/tursom/core/datastruct/ReversedList.kt +++ b/ts-core/ts-datastruct/src/main/kotlin/cn/tursom/core/datastruct/ReversedList.kt @@ -1,7 +1,7 @@ package cn.tursom.core.datastruct class ReversedList( - val list: List + val list: List, ) : List by list { override fun get(index: Int): E = list[size - index - 1] diff --git a/ts-core/ts-datastruct/src/main/kotlin/cn/tursom/core/datastruct/SimpHashMap.kt b/ts-core/ts-datastruct/src/main/kotlin/cn/tursom/core/datastruct/SimpHashMap.kt index 30b84c4..64283d0 100644 --- a/ts-core/ts-datastruct/src/main/kotlin/cn/tursom/core/datastruct/SimpHashMap.kt +++ b/ts-core/ts-datastruct/src/main/kotlin/cn/tursom/core/datastruct/SimpHashMap.kt @@ -1,7 +1,7 @@ package cn.tursom.core.datastruct class SimpHashMap( - val hashMap: java.util.AbstractMap = HashMap() + val hashMap: java.util.AbstractMap = HashMap(), ) : SimpMap, MutableMap by hashMap { override fun delete(key: K): V? { return hashMap.remove(key) diff --git a/ts-core/ts-datastruct/src/main/kotlin/cn/tursom/core/datastruct/StringRadixTree.kt b/ts-core/ts-datastruct/src/main/kotlin/cn/tursom/core/datastruct/StringRadixTree.kt index 221ccfb..6fc7508 100644 --- a/ts-core/ts-datastruct/src/main/kotlin/cn/tursom/core/datastruct/StringRadixTree.kt +++ b/ts-core/ts-datastruct/src/main/kotlin/cn/tursom/core/datastruct/StringRadixTree.kt @@ -214,7 +214,7 @@ class StringRadixTree { var str: String = "", var value: T? = null, var parent: Node? = null, - var subNodes: SimpMap> = ArrayMap(0) + var subNodes: SimpMap> = ArrayMap(0), ) { constructor(parent: Node, str: String = "", value: T? = null) : this(str, value, parent, parent.subNodes) { parent.subNodes = ArrayMap(1) diff --git a/ts-core/ts-datastruct/src/main/kotlin/cn/tursom/core/datastruct/concurrent/ConcurrentLinkedList.kt b/ts-core/ts-datastruct/src/main/kotlin/cn/tursom/core/datastruct/concurrent/ConcurrentLinkedList.kt index 0efc026..1700a72 100644 --- a/ts-core/ts-datastruct/src/main/kotlin/cn/tursom/core/datastruct/concurrent/ConcurrentLinkedList.kt +++ b/ts-core/ts-datastruct/src/main/kotlin/cn/tursom/core/datastruct/concurrent/ConcurrentLinkedList.kt @@ -133,7 +133,7 @@ class ConcurrentLinkedList : AbstractMutableList { private inner class Iterator( var index: Int, - var p: Node = prevNodeOfIndex(index - 1) + var p: Node = prevNodeOfIndex(index - 1), ) : MutableListIterator { override fun hasPrevious(): Boolean = p.prev != root diff --git a/ts-core/ts-encrypt/src/main/kotlin/cn/tursom/core/encrypt/AES.kt b/ts-core/ts-encrypt/src/main/kotlin/cn/tursom/core/encrypt/AES.kt index c65a21e..97d4db4 100644 --- a/ts-core/ts-encrypt/src/main/kotlin/cn/tursom/core/encrypt/AES.kt +++ b/ts-core/ts-encrypt/src/main/kotlin/cn/tursom/core/encrypt/AES.kt @@ -7,7 +7,7 @@ import javax.crypto.spec.SecretKeySpec @Suppress("unused") class AES( - @Suppress("CanBeParameter") val secKey: SecretKey + @Suppress("CanBeParameter") val secKey: SecretKey, ) : Encrypt { private val decryptCipher = Cipher.getInstance("AES")!! private val encryptCipher = Cipher.getInstance("AES")!! diff --git a/ts-core/ts-encrypt/src/main/kotlin/cn/tursom/core/encrypt/AESPool.kt b/ts-core/ts-encrypt/src/main/kotlin/cn/tursom/core/encrypt/AESPool.kt index 2b60da2..8c9ee51 100644 --- a/ts-core/ts-encrypt/src/main/kotlin/cn/tursom/core/encrypt/AESPool.kt +++ b/ts-core/ts-encrypt/src/main/kotlin/cn/tursom/core/encrypt/AESPool.kt @@ -1,5 +1,5 @@ package cn.tursom.core.encrypt class AESPool( - initSize: Int = 16 + initSize: Int = 16, ) : EncryptPool(initSize, { AES() }) \ No newline at end of file diff --git a/ts-core/ts-encrypt/src/main/kotlin/cn/tursom/core/encrypt/DSA.kt b/ts-core/ts-encrypt/src/main/kotlin/cn/tursom/core/encrypt/DSA.kt index 66f67c8..ed5b0cb 100644 --- a/ts-core/ts-encrypt/src/main/kotlin/cn/tursom/core/encrypt/DSA.kt +++ b/ts-core/ts-encrypt/src/main/kotlin/cn/tursom/core/encrypt/DSA.kt @@ -10,7 +10,7 @@ import java.security.spec.X509EncodedKeySpec @Suppress("unused", "MemberVisibilityCanBePrivate") class DSA( publicKey: DSAPublicKey, - privateKey: DSAPrivateKey? = null + privateKey: DSAPrivateKey? = null, ) : AbstractPublicKeyEncrypt("DSA", publicKey, privateKey) { override val decryptMaxLen = Int.MAX_VALUE diff --git a/ts-core/ts-encrypt/src/main/kotlin/cn/tursom/core/encrypt/ECC.kt b/ts-core/ts-encrypt/src/main/kotlin/cn/tursom/core/encrypt/ECC.kt index 1ca6f46..d23f3aa 100644 --- a/ts-core/ts-encrypt/src/main/kotlin/cn/tursom/core/encrypt/ECC.kt +++ b/ts-core/ts-encrypt/src/main/kotlin/cn/tursom/core/encrypt/ECC.kt @@ -72,7 +72,7 @@ class ECC( val standardCurveLineSet by lazy { try { Unsafe { - Class.forName("sun.security.ec.CurveDB")["nameMap"].uncheckedCast>().keys + Class.forName("sun.security.ec.CurveDB").getField("nameMap").uncheckedCast>().keys } } catch (e: Exception) { emptySet() diff --git a/ts-core/ts-encrypt/src/main/kotlin/cn/tursom/core/encrypt/Encrypt.kt b/ts-core/ts-encrypt/src/main/kotlin/cn/tursom/core/encrypt/Encrypt.kt index 24a2420..4c515d3 100644 --- a/ts-core/ts-encrypt/src/main/kotlin/cn/tursom/core/encrypt/Encrypt.kt +++ b/ts-core/ts-encrypt/src/main/kotlin/cn/tursom/core/encrypt/Encrypt.kt @@ -17,7 +17,7 @@ interface Encrypt { buffer: ByteArray, bufferOffset: Int = 0, offset: Int = 0, - size: Int = data.size - offset + size: Int = data.size - offset, ): Int fun decrypt( @@ -25,7 +25,7 @@ interface Encrypt { buffer: ByteArray, bufferOffset: Int = 0, offset: Int = 0, - size: Int = data.size - offset + size: Int = data.size - offset, ): Int fun encrypt(data: ByteBuffer): ByteArray { diff --git a/ts-core/ts-encrypt/src/main/kotlin/cn/tursom/core/encrypt/EncryptPool.kt b/ts-core/ts-encrypt/src/main/kotlin/cn/tursom/core/encrypt/EncryptPool.kt index d166e58..11ef4d0 100644 --- a/ts-core/ts-encrypt/src/main/kotlin/cn/tursom/core/encrypt/EncryptPool.kt +++ b/ts-core/ts-encrypt/src/main/kotlin/cn/tursom/core/encrypt/EncryptPool.kt @@ -6,7 +6,7 @@ import cn.tursom.core.pool.Pool open class EncryptPool( initSize: Int = 0, - encryptBuilder: () -> T + encryptBuilder: () -> T, ) : Pool { private val aesPool = BlockingArrayList() diff --git a/ts-core/ts-encrypt/src/main/kotlin/cn/tursom/core/encrypt/RSAPool.kt b/ts-core/ts-encrypt/src/main/kotlin/cn/tursom/core/encrypt/RSAPool.kt index 4b439b7..5f59c5c 100644 --- a/ts-core/ts-encrypt/src/main/kotlin/cn/tursom/core/encrypt/RSAPool.kt +++ b/ts-core/ts-encrypt/src/main/kotlin/cn/tursom/core/encrypt/RSAPool.kt @@ -1,5 +1,5 @@ package cn.tursom.core.encrypt class RSAPool( - initSize: Int = 16 + initSize: Int = 16, ) : EncryptPool(initSize, { RSA() }) \ No newline at end of file diff --git a/ts-core/ts-log/src/main/kotlin/cn/tursom/log/LayoutEncoders.kt b/ts-core/ts-log/src/main/kotlin/cn/tursom/log/LayoutEncoders.kt index 75a1bc6..c6546dc 100644 --- a/ts-core/ts-log/src/main/kotlin/cn/tursom/log/LayoutEncoders.kt +++ b/ts-core/ts-log/src/main/kotlin/cn/tursom/log/LayoutEncoders.kt @@ -9,7 +9,7 @@ object LayoutEncoders { class JsonLayoutEncoder : CustomLayoutEncoder(JsonLayout()) operator fun invoke( - layout: Layout + layout: Layout, ): Encoder = CustomLayoutEncoder(layout) open class CustomLayoutEncoder( diff --git a/ts-core/ts-mail/src/main/kotlin/cn/tursom/mail/MailStructure.kt b/ts-core/ts-mail/src/main/kotlin/cn/tursom/mail/MailStructure.kt index 0f2a1ca..4742a99 100644 --- a/ts-core/ts-mail/src/main/kotlin/cn/tursom/mail/MailStructure.kt +++ b/ts-core/ts-mail/src/main/kotlin/cn/tursom/mail/MailStructure.kt @@ -4,5 +4,5 @@ import javax.activation.DataSource data class MailStructure( val to: String?, val subject: String?, val html: String?, val text: String? = null, - val image: Collection? = null, val attachment: Collection? = null + val image: Collection? = null, val attachment: Collection? = null, ) \ No newline at end of file diff --git a/ts-core/ts-mail/src/main/kotlin/cn/tursom/mail/read.kt b/ts-core/ts-mail/src/main/kotlin/cn/tursom/mail/read.kt index 57cd2b5..1475eee 100644 --- a/ts-core/ts-mail/src/main/kotlin/cn/tursom/mail/read.kt +++ b/ts-core/ts-mail/src/main/kotlin/cn/tursom/mail/read.kt @@ -20,7 +20,7 @@ fun addMailListener( freq: Long, timeUnit: TimeUnit, listener: MessageCountListener, newFolder: () -> Folder? = { null }, - onHeartBeat: Folder. () -> Unit = {} + onHeartBeat: Folder. () -> Unit = {}, ): ScheduledFuture<*> { folder.addMessageCountListener(listener) var mailFOlder = folder @@ -42,7 +42,7 @@ fun addMailListener( newFolder: () -> Folder, freq: Long, timeUnit: TimeUnit, listener: MessageCountListener, - onHeartBeat: Folder. () -> Unit = {} + onHeartBeat: Folder. () -> Unit = {}, ): ScheduledFuture<*> = addMailListener(newFolder(), freq, timeUnit, listener, newFolder, onHeartBeat) fun getStore(host: String, port: Int, account: String, password: String): Store { @@ -113,7 +113,7 @@ fun forEachUnreadMail( port: Int, account: String, password: String, - onMsg: (from: InternetAddress, msg: String) -> Boolean + onMsg: (from: InternetAddress, msg: String) -> Boolean, ) { forEachMail(host, port, account, password) { message -> // 跳过已读邮件 diff --git a/ts-core/ts-pool/src/main/kotlin/cn/tursom/core/RewriteFlvChecker.kt b/ts-core/ts-pool/src/main/kotlin/cn/tursom/core/RewriteFlvChecker.kt index b539ec7..a1f2997 100644 --- a/ts-core/ts-pool/src/main/kotlin/cn/tursom/core/RewriteFlvChecker.kt +++ b/ts-core/ts-pool/src/main/kotlin/cn/tursom/core/RewriteFlvChecker.kt @@ -44,7 +44,7 @@ class RewriteFlvChecker { inputStream: InputStream, outputStream: OutputStream, lastTimestampRead: IntArray, - lastTimestampWrite: IntArray + lastTimestampWrite: IntArray, ): Boolean { // 读取前一个tag size val frame = pool.get() @@ -100,7 +100,7 @@ class RewriteFlvChecker { timestamp: Int, tagType: Int, lastTimestampRead: IntArray, - lastTimestampWrite: IntArray + lastTimestampWrite: IntArray, ) { // 如果是首帧 if (lastTimestampRead[tagType] == -1) { diff --git a/ts-core/ts-pool/src/main/kotlin/cn/tursom/core/pool/DirectMemoryPool.kt b/ts-core/ts-pool/src/main/kotlin/cn/tursom/core/pool/DirectMemoryPool.kt index 55f1c55..ea28833 100644 --- a/ts-core/ts-pool/src/main/kotlin/cn/tursom/core/pool/DirectMemoryPool.kt +++ b/ts-core/ts-pool/src/main/kotlin/cn/tursom/core/pool/DirectMemoryPool.kt @@ -8,7 +8,7 @@ import cn.tursom.core.buffer.impl.HeapByteBuffer class DirectMemoryPool( blockSize: Int = 1024, blockCount: Int = 16, - emptyPoolBuffer: (blockSize: Int) -> ByteBuffer = ::HeapByteBuffer + emptyPoolBuffer: (blockSize: Int) -> ByteBuffer = ::HeapByteBuffer, ) : AbstractMemoryPool( blockSize, blockCount, diff --git a/ts-core/ts-pool/src/main/kotlin/cn/tursom/core/pool/HeapMemoryPool.kt b/ts-core/ts-pool/src/main/kotlin/cn/tursom/core/pool/HeapMemoryPool.kt index 88af606..4736573 100644 --- a/ts-core/ts-pool/src/main/kotlin/cn/tursom/core/pool/HeapMemoryPool.kt +++ b/ts-core/ts-pool/src/main/kotlin/cn/tursom/core/pool/HeapMemoryPool.kt @@ -8,7 +8,7 @@ import cn.tursom.core.buffer.impl.HeapByteBuffer class HeapMemoryPool( blockSize: Int = 1024, blockCount: Int = 16, - emptyPoolBuffer: (blockSize: Int) -> ByteBuffer = ::HeapByteBuffer + emptyPoolBuffer: (blockSize: Int) -> ByteBuffer = ::HeapByteBuffer, ) : AbstractMemoryPool( blockSize, blockCount, diff --git a/ts-core/ts-pool/src/main/kotlin/cn/tursom/core/pool/InstantMemoryPool.kt b/ts-core/ts-pool/src/main/kotlin/cn/tursom/core/pool/InstantMemoryPool.kt index 8a9fa3d..52c2f87 100644 --- a/ts-core/ts-pool/src/main/kotlin/cn/tursom/core/pool/InstantMemoryPool.kt +++ b/ts-core/ts-pool/src/main/kotlin/cn/tursom/core/pool/InstantMemoryPool.kt @@ -8,7 +8,7 @@ import java.util.concurrent.ConcurrentLinkedQueue class InstantMemoryPool( val blockSize: Int, - val newMemory: (blockSize: Int) -> ByteBuffer = ::HeapByteBuffer + val newMemory: (blockSize: Int) -> ByteBuffer = ::HeapByteBuffer, ) : MemoryPool { private val memoryList = ConcurrentLinkedQueue>() diff --git a/ts-core/ts-pool/src/main/kotlin/cn/tursom/core/pool/LongBitSetDirectMemoryPool.kt b/ts-core/ts-pool/src/main/kotlin/cn/tursom/core/pool/LongBitSetDirectMemoryPool.kt index 32b07b5..23e2418 100644 --- a/ts-core/ts-pool/src/main/kotlin/cn/tursom/core/pool/LongBitSetDirectMemoryPool.kt +++ b/ts-core/ts-pool/src/main/kotlin/cn/tursom/core/pool/LongBitSetDirectMemoryPool.kt @@ -5,7 +5,7 @@ import cn.tursom.core.buffer.impl.DirectByteBuffer class LongBitSetDirectMemoryPool( blockSize: Int, - emptyPoolBuffer: (blockSize: Int) -> ByteBuffer = ::DirectByteBuffer + emptyPoolBuffer: (blockSize: Int) -> ByteBuffer = ::DirectByteBuffer, ) : LongBitSetAbstractMemoryPool(blockSize, emptyPoolBuffer, DirectByteBuffer(64 * blockSize)) { override fun toString(): String { return "LongBitSetDirectMemoryPool(blockSize=$blockSize, blockCount=$blockCount, allocated=$allocated)" diff --git a/ts-core/ts-pool/src/main/kotlin/cn/tursom/core/pool/LongBitSetHeapMemoryPool.kt b/ts-core/ts-pool/src/main/kotlin/cn/tursom/core/pool/LongBitSetHeapMemoryPool.kt index 5ff1af7..22c814d 100644 --- a/ts-core/ts-pool/src/main/kotlin/cn/tursom/core/pool/LongBitSetHeapMemoryPool.kt +++ b/ts-core/ts-pool/src/main/kotlin/cn/tursom/core/pool/LongBitSetHeapMemoryPool.kt @@ -5,7 +5,7 @@ import cn.tursom.core.buffer.impl.HeapByteBuffer class LongBitSetHeapMemoryPool( blockSize: Int, - emptyPoolBuffer: (blockSize: Int) -> ByteBuffer = ::HeapByteBuffer + emptyPoolBuffer: (blockSize: Int) -> ByteBuffer = ::HeapByteBuffer, ) : LongBitSetAbstractMemoryPool(blockSize, emptyPoolBuffer, HeapByteBuffer(64 * blockSize)) { override fun toString(): String { return "LongBitSetDirectMemoryPool(blockSize=$blockSize, blockCount=$blockCount, allocated=$allocated)" diff --git a/ts-core/ts-pool/src/main/kotlin/cn/tursom/core/pool/ThreadLocalMemoryPool.kt b/ts-core/ts-pool/src/main/kotlin/cn/tursom/core/pool/ThreadLocalMemoryPool.kt index c7edb65..fa7501e 100644 --- a/ts-core/ts-pool/src/main/kotlin/cn/tursom/core/pool/ThreadLocalMemoryPool.kt +++ b/ts-core/ts-pool/src/main/kotlin/cn/tursom/core/pool/ThreadLocalMemoryPool.kt @@ -3,7 +3,7 @@ package cn.tursom.core.pool import cn.tursom.core.buffer.ByteBuffer class ThreadLocalMemoryPool( - private val poolFactory: () -> MemoryPool + private val poolFactory: () -> MemoryPool, ) : MemoryPool { private val threadLocal = ThreadLocal() diff --git a/ts-core/ts-reflect/src/main/kotlin/cn/tursom/reflect/utils.kt b/ts-core/ts-reflect/src/main/kotlin/cn/tursom/reflect/utils.kt index f4cff99..2437910 100644 --- a/ts-core/ts-reflect/src/main/kotlin/cn/tursom/reflect/utils.kt +++ b/ts-core/ts-reflect/src/main/kotlin/cn/tursom/reflect/utils.kt @@ -1,6 +1,6 @@ package cn.tursom.reflect -import cn.tursom.core.Unsafe.get +import cn.tursom.core.Unsafe.getField import cn.tursom.core.companionObjectInstanceOrNull import cn.tursom.core.uncheckedCast import java.lang.reflect.Field @@ -21,7 +21,7 @@ fun Class<*>.getStaticField(name: String): T? { val companionObjectInstance = kotlin.companionObjectInstanceOrNull if (companionObjectInstance != null) { - return companionObjectInstance[name]?.uncheckedCast() + return companionObjectInstance.getField(name)?.uncheckedCast() } return null diff --git a/ts-core/ts-ws-client/src/main/kotlin/cn/tursom/core/ws/WebSocketClient.kt b/ts-core/ts-ws-client/src/main/kotlin/cn/tursom/core/ws/WebSocketClient.kt index 472e3ab..7cdcb15 100644 --- a/ts-core/ts-ws-client/src/main/kotlin/cn/tursom/core/ws/WebSocketClient.kt +++ b/ts-core/ts-ws-client/src/main/kotlin/cn/tursom/core/ws/WebSocketClient.kt @@ -137,12 +137,7 @@ open class WebSocketClient, H : WebSocketHandler data.byteBuf - else -> Unpooled.wrappedBuffer(data.getBytes()) - } - ) + BinaryWebSocketFrame(NettyByteBuffer.toByteBuf(data)) ) } @@ -152,12 +147,7 @@ open class WebSocketClient, H : WebSocketHandler data.byteBuf - else -> Unpooled.wrappedBuffer(data.getBytes()) - } - ) + TextWebSocketFrame(NettyByteBuffer.toByteBuf(data)) ) } @@ -171,12 +161,7 @@ open class WebSocketClient, H : WebSocketHandler data.byteBuf - else -> Unpooled.wrappedBuffer(data.getBytes()) - } - ) + PingWebSocketFrame(NettyByteBuffer.toByteBuf(data)) ) } @@ -189,14 +174,7 @@ open class WebSocketClient, H : WebSocketHandler data.byteBuf - else -> Unpooled.wrappedBuffer(data.getBytes()) - } - ) - ) + return ch!!.writeAndFlush(PongWebSocketFrame(NettyByteBuffer.toByteBuf(data))) } fun pong(data: ByteBuf): ChannelFuture { diff --git a/ts-core/ts-xml/src/main/kotlin/cn/tursom/core/xml/Xml.kt b/ts-core/ts-xml/src/main/kotlin/cn/tursom/core/xml/Xml.kt index 022b6b6..9909e76 100644 --- a/ts-core/ts-xml/src/main/kotlin/cn/tursom/core/xml/Xml.kt +++ b/ts-core/ts-xml/src/main/kotlin/cn/tursom/core/xml/Xml.kt @@ -197,7 +197,7 @@ object Xml { elementName: String, builder: StringBuilder, indentation: String, - advanceIndentation: String + advanceIndentation: String, ): Boolean { val clazz = obj.javaClass getAnnotation(ToXml::class.java)?.let { getter -> @@ -279,7 +279,7 @@ object Xml { obj: kotlin.Array<*>, rootName: String = obj.javaClass.elementName, indentation: String = " ", - fieldName: String? = "i" + fieldName: String? = "i", ): String { val stringBuilder = StringBuilder() arrayXml(obj, rootName, stringBuilder, "", indentation, fieldName) @@ -292,7 +292,7 @@ object Xml { subElementName: String, builder: StringBuilder, subIndentation: String, - advanceIndentation: String + advanceIndentation: String, ) { val type = value.javaClass @@ -318,7 +318,7 @@ object Xml { indentation: String, advanceIndentation: String, fieldName: String? = "i", - multipleField: Boolean = false + multipleField: Boolean = false, ) { if (obj.isEmpty()) return val clazz = obj.javaClass @@ -347,7 +347,7 @@ object Xml { obj: Iterable<*>, rootName: String, indentation: String, - fieldName: String? = "i" + fieldName: String? = "i", ): String { val stringBuilder = StringBuilder() iterableXml(obj, rootName, stringBuilder, "", indentation, fieldName) @@ -360,7 +360,7 @@ object Xml { builder: StringBuilder, indentation: String, advanceIndentation: String, - fieldName: String? = "i" + fieldName: String? = "i", ) { val subIndentation = "$advanceIndentation$indentation" builder.append("$indentation<$elementName>") @@ -388,7 +388,7 @@ object Xml { fun mapXml( obj: Map<*, *>, rootName: String, - indentation: String + indentation: String, ): String { val stringBuilder = StringBuilder() mapXml(obj, rootName, stringBuilder, "", indentation) @@ -400,7 +400,7 @@ object Xml { elementName: String, builder: StringBuilder, indentation: String, - advanceIndentation: String + advanceIndentation: String, ) { val subIndentation = "$advanceIndentation$indentation" builder.append("$indentation<$elementName>") @@ -429,7 +429,7 @@ object Xml { elementName: String, builder: StringBuilder, indentation: String, - advanceIndentation: String + advanceIndentation: String, ) { val clazz = obj.javaClass val textField = clazz.textField @@ -491,7 +491,7 @@ object Xml { builder: StringBuilder, indentation: String, advanceIndentation: String, - field: Field? = null + field: Field? = null, ) { try { obj as Pair<*, *> @@ -556,7 +556,7 @@ object Xml { elementName: String, builder: StringBuilder, fieldName: String? = "i", - multi: Boolean = false + multi: Boolean = false, ) { val clazz = obj.javaClass if (clazz.isArray) { diff --git a/ts-core/ts-xml/src/main/kotlin/cn/tursom/core/xml/XmlDocument.kt b/ts-core/ts-xml/src/main/kotlin/cn/tursom/core/xml/XmlDocument.kt index 976aa51..91f4078 100644 --- a/ts-core/ts-xml/src/main/kotlin/cn/tursom/core/xml/XmlDocument.kt +++ b/ts-core/ts-xml/src/main/kotlin/cn/tursom/core/xml/XmlDocument.kt @@ -29,7 +29,7 @@ object XmlDocument { fun subElement( name: String? = null, - action: (ElementContainerPotableXmlElement.() -> Unit)? = null + action: (ElementContainerPotableXmlElement.() -> Unit)? = null, ): ElementContainerXmlElement { val container = ElementContainer() if (name != null) container.name = name @@ -42,7 +42,7 @@ object XmlDocument { operator fun invoke( advanceIndentation: String = " ", indentation: String = "", - action: XmlDocument.() -> XmlElement + action: XmlDocument.() -> XmlElement, ): String { return this.action().toString(StringBuilder(), indentation, advanceIndentation) } diff --git a/ts-core/ts-xml/src/main/kotlin/cn/tursom/core/xml/interfaces/XmlElement.kt b/ts-core/ts-xml/src/main/kotlin/cn/tursom/core/xml/interfaces/XmlElement.kt index 12118d5..74901eb 100644 --- a/ts-core/ts-xml/src/main/kotlin/cn/tursom/core/xml/interfaces/XmlElement.kt +++ b/ts-core/ts-xml/src/main/kotlin/cn/tursom/core/xml/interfaces/XmlElement.kt @@ -7,7 +7,7 @@ interface XmlElement { fun toString( builder: StringBuilder, indentation: String, - advanceIndentation: String + advanceIndentation: String, ): String { builder.append(indentation) when (this) { diff --git a/ts-database/ts-mongodb/src/main/kotlin/cn/tursom/database/mongodb/Aggregate.kt b/ts-database/ts-mongodb/src/main/kotlin/cn/tursom/database/mongodb/Aggregate.kt index 318964d..7c52961 100644 --- a/ts-database/ts-mongodb/src/main/kotlin/cn/tursom/database/mongodb/Aggregate.kt +++ b/ts-database/ts-mongodb/src/main/kotlin/cn/tursom/database/mongodb/Aggregate.kt @@ -15,13 +15,13 @@ object Aggregate { fun bucket( groupBy: TExpression, - boundaries: List + boundaries: List, ): Bson = Aggregates.bucket(groupBy, boundaries) fun bucket( groupBy: TExpression, boundaries: List, - options: BucketOptions + options: BucketOptions, ): Bson = Aggregates.bucket(groupBy, boundaries, options) @@ -30,7 +30,7 @@ object Aggregate { fun bucketAuto( groupBy: TExpression, buckets: Int, - options: BucketAutoOptions + options: BucketAutoOptions, ): Bson = Aggregates.bucketAuto(groupBy, buckets, options) fun count(): Bson = Aggregates.count() @@ -48,7 +48,7 @@ object Aggregate { from: String, localField: String, foreignField: String, - `as`: String + `as`: String, ): Bson = Aggregates.lookup(from, localField, foreignField, `as`) fun lookup(from: String, pipeline: List, `as`: String): Bson = Aggregates.lookup(from, pipeline, `as`) @@ -56,7 +56,7 @@ object Aggregate { from: String, let: List>? = null, pipeline: List, - `as`: String + `as`: String, ): Bson = Aggregates.lookup(from, let, pipeline, `as`) @@ -68,7 +68,7 @@ object Aggregate { startWith: TExpression, connectFromField: String, connectToField: String, - `as`: String + `as`: String, ): Bson = Aggregates.graphLookup(from, startWith, connectFromField, connectToField, `as`) fun graphLookup( @@ -77,18 +77,18 @@ object Aggregate { connectFromField: String, connectToField: String, `as`: String, - options: GraphLookupOptions + options: GraphLookupOptions, ): Bson = Aggregates.graphLookup(from, startWith, connectFromField, connectToField, `as`, options) fun group( id: TExpression? = null, - vararg fieldAccumulators: BsonField + vararg fieldAccumulators: BsonField, ): Bson = Aggregates.group(id, fieldAccumulators.asList()) fun group( id: TExpression? = null, - fieldAccumulators: List + fieldAccumulators: List, ): Bson = Aggregates.group(id, fieldAccumulators) fun unwind(field: KProperty1<*, *>): Bson = Aggregates.unwind(MongoUtil.fieldName(field)) diff --git a/ts-database/ts-mongodb/src/main/kotlin/cn/tursom/database/mongodb/operator/MongoOperator.kt b/ts-database/ts-mongodb/src/main/kotlin/cn/tursom/database/mongodb/operator/MongoOperator.kt index efee97b..78511f2 100644 --- a/ts-database/ts-mongodb/src/main/kotlin/cn/tursom/database/mongodb/operator/MongoOperator.kt +++ b/ts-database/ts-mongodb/src/main/kotlin/cn/tursom/database/mongodb/operator/MongoOperator.kt @@ -27,7 +27,7 @@ interface MongoOperator : BsonFactory, Closeable { suspend fun saveDocument( documents: List, - options: InsertManyOptions = InsertManyOptions() + options: InsertManyOptions = InsertManyOptions(), ): InsertManyResult? suspend fun insertOne(entity: T, options: InsertOneOptions = InsertOneOptions()): InsertOneResult? { diff --git a/ts-database/ts-mongodb/ts-mongodb-spring/src/main/kotlin/cn/tursom/database/mongodb/spring/AggregationBuilder.kt b/ts-database/ts-mongodb/ts-mongodb-spring/src/main/kotlin/cn/tursom/database/mongodb/spring/AggregationBuilder.kt index aab8781..e527ccb 100644 --- a/ts-database/ts-mongodb/ts-mongodb-spring/src/main/kotlin/cn/tursom/database/mongodb/spring/AggregationBuilder.kt +++ b/ts-database/ts-mongodb/ts-mongodb-spring/src/main/kotlin/cn/tursom/database/mongodb/spring/AggregationBuilder.kt @@ -7,49 +7,49 @@ import kotlin.reflect.KProperty @Suppress("unused") object AggregationBuilder : MongoName { inline infix operator fun invoke( - operatorBuilder: AggregationBuilder.(MutableList) -> MutableList + operatorBuilder: AggregationBuilder.(MutableList) -> MutableList, ): Aggregation { val operator = this.operatorBuilder(ArrayList()) return Aggregation.newAggregation(operator) } infix operator fun MutableList.plus( - operation: AggregationOperation + operation: AggregationOperation, ): MutableList { add(operation) return this } infix fun MutableList.match( - builder: QueryBuilder.() -> Unit + builder: QueryBuilder.() -> Unit, ): MutableList { add(Aggregation.match(QueryBuilder criteria builder)) return this } infix fun MutableList.group( - builder: GroupBuilder.() -> AggregationOperation + builder: GroupBuilder.() -> AggregationOperation, ): MutableList { add(GroupBuilder.builder()) return this } infix fun MutableList.project( - builder: ProjectBuilder.() -> AggregationOperation + builder: ProjectBuilder.() -> AggregationOperation, ): MutableList { add(ProjectBuilder.builder()) return this } infix fun MutableList.unwind( - field: String + field: String, ): MutableList { add(Aggregation.unwind(field)) return this } infix fun MutableList.unwind( - field: KProperty<*> + field: KProperty<*>, ): MutableList { add(Aggregation.unwind(field.mongoName)) return this @@ -57,21 +57,21 @@ object AggregationBuilder : MongoName { @JvmName("unwindString") infix fun MutableList.unwind( - field: () -> String + field: () -> String, ): MutableList { add(Aggregation.unwind(field())) return this } infix fun MutableList.unwind( - field: () -> KProperty<*> + field: () -> KProperty<*>, ): MutableList { add(Aggregation.unwind(field().mongoName)) return this } infix fun MutableList.sort( - builder: SortBuilder.() -> Unit + builder: SortBuilder.() -> Unit, ): MutableList { val sortBuilder = SortBuilder() sortBuilder.invoke(builder) @@ -80,14 +80,14 @@ object AggregationBuilder : MongoName { } infix fun MutableList.skip( - skip: Long + skip: Long, ): MutableList { add(Aggregation.skip(skip)) return this } infix fun MutableList.limit( - limit: Long + limit: Long, ): MutableList { add(Aggregation.limit(limit)) return this diff --git a/ts-database/ts-mongodb/ts-mongodb-spring/src/main/kotlin/cn/tursom/database/mongodb/spring/MongoUtil.kt b/ts-database/ts-mongodb/ts-mongodb-spring/src/main/kotlin/cn/tursom/database/mongodb/spring/MongoUtil.kt index 6ac9eda..055825e 100644 --- a/ts-database/ts-mongodb/ts-mongodb-spring/src/main/kotlin/cn/tursom/database/mongodb/spring/MongoUtil.kt +++ b/ts-database/ts-mongodb/ts-mongodb-spring/src/main/kotlin/cn/tursom/database/mongodb/spring/MongoUtil.kt @@ -30,9 +30,9 @@ object MongoUtil { entity.javaClass.declaredFields.filter { it.isAccessible = true !it.isStatic() - && !it.isTransient() - //&& it.getAnnotation(Ignore::class.java) == null - && (it.type != Lazy::class.java || it.get(entity).uncheckedCast>().isInitialized()) + && !it.isTransient() + //&& it.getAnnotation(Ignore::class.java) == null + && (it.type != Lazy::class.java || it.get(entity).uncheckedCast>().isInitialized()) }.forEach { injectValue(bson, it.get(entity) ?: return@forEach, it) } diff --git a/ts-database/ts-mongodb/ts-mongodb-spring/src/main/kotlin/cn/tursom/database/mongodb/spring/utils.kt b/ts-database/ts-mongodb/ts-mongodb-spring/src/main/kotlin/cn/tursom/database/mongodb/spring/utils.kt index be95462..570c8a4 100644 --- a/ts-database/ts-mongodb/ts-mongodb-spring/src/main/kotlin/cn/tursom/database/mongodb/spring/utils.kt +++ b/ts-database/ts-mongodb/ts-mongodb-spring/src/main/kotlin/cn/tursom/database/mongodb/spring/utils.kt @@ -42,7 +42,7 @@ internal val criteriaChainField: java.lang.reflect.Field? = try { } fun List.toAndCriteria( - uniqueField: Boolean = toSetNotNull { it.key }.size == size + uniqueField: Boolean = toSetNotNull { it.key }.size == size, ) = when (size) { 0 -> Criteria() 1 -> first() diff --git a/ts-database/ts-mybatisplus/src/main/kotlin/cn/tursom/database/mybatisplus/EnhanceExtension.kt b/ts-database/ts-mybatisplus/src/main/kotlin/cn/tursom/database/mybatisplus/EnhanceExtension.kt index 991f134..ead58a6 100644 --- a/ts-database/ts-mybatisplus/src/main/kotlin/cn/tursom/database/mybatisplus/EnhanceExtension.kt +++ b/ts-database/ts-mybatisplus/src/main/kotlin/cn/tursom/database/mybatisplus/EnhanceExtension.kt @@ -4,44 +4,46 @@ import com.baomidou.mybatisplus.core.conditions.AbstractWrapper import com.baomidou.mybatisplus.core.conditions.Wrapper inline fun , T, W : AbstractWrapper, Children : Wrapper> C.compare( - compare: EnhanceCompare.() -> Unit + compare: EnhanceCompare.() -> Unit, ): C { compare() return this } inline fun , T, Children : Wrapper> C.func( - func: FuncEnhance.() -> Unit + func: FuncEnhance.() -> Unit, ): C { func() return this } inline fun , Children> C.join( - join: JoinEnhance.() -> Unit + join: JoinEnhance.() -> Unit, ): C { join() return this } inline fun , T, Children : Wrapper> C.query( - query: EnhanceQuery.() -> Unit + query: EnhanceQuery.() -> Unit, ): C { query() return this } inline fun , T, Children : Wrapper> C.update( - update: EnhanceUpdate.() -> Unit + update: EnhanceUpdate.() -> Unit, ): C { update() return this } -inline fun , - T, W : AbstractWrapper, EnhanceWrapper : Wrapper> +inline fun < + C : KtEnhanceWrapper, + T, W : AbstractWrapper, EnhanceWrapper : Wrapper, + > C.query( - query: KtEnhanceWrapper.() -> Unit + query: KtEnhanceWrapper.() -> Unit, ): C { query() return this diff --git a/ts-database/ts-mybatisplus/src/main/kotlin/cn/tursom/database/mybatisplus/IServiceEnhance.kt b/ts-database/ts-mybatisplus/src/main/kotlin/cn/tursom/database/mybatisplus/IServiceEnhance.kt index 4a1b9cf..5a82ff2 100644 --- a/ts-database/ts-mybatisplus/src/main/kotlin/cn/tursom/database/mybatisplus/IServiceEnhance.kt +++ b/ts-database/ts-mybatisplus/src/main/kotlin/cn/tursom/database/mybatisplus/IServiceEnhance.kt @@ -6,70 +6,70 @@ import com.baomidou.mybatisplus.extension.service.IService inline fun IService.update( - wrapperBuilder: KtEnhanceUpdateWrapper.() -> Unit + wrapperBuilder: KtEnhanceUpdateWrapper.() -> Unit, ): Boolean { - val wrapper = KtEnhanceUpdateWrapper() - wrapper.wrapperBuilder() - return update(wrapper) + val wrapper = KtEnhanceUpdateWrapper() + wrapper.wrapperBuilder() + return update(wrapper) } inline fun IService.update( - queryBuilder: KtEnhanceWrapper, KtEnhanceUpdateWrapper>.() -> Unit, - updateBuilder: EnhanceUpdate>.() -> Unit + queryBuilder: KtEnhanceWrapper, KtEnhanceUpdateWrapper>.() -> Unit, + updateBuilder: EnhanceUpdate>.() -> Unit, ): Boolean { - val wrapper = KtEnhanceUpdateWrapper() - wrapper.queryBuilder() - wrapper.updateBuilder() - return update(wrapper) + val wrapper = KtEnhanceUpdateWrapper() + wrapper.queryBuilder() + wrapper.updateBuilder() + return update(wrapper) } inline fun IService.remove( - wrapperBuilder: KtEnhanceQueryWrapper.() -> Unit + wrapperBuilder: KtEnhanceQueryWrapper.() -> Unit, ): Boolean { - val wrapper = KtEnhanceQueryWrapper() - wrapper.wrapperBuilder() - return remove(wrapper) + val wrapper = KtEnhanceQueryWrapper() + wrapper.wrapperBuilder() + return remove(wrapper) } inline fun IService.getOne( - throwEx: Boolean = true, - wrapperBuilder: KtEnhanceQueryWrapper.() -> Unit + throwEx: Boolean = true, + wrapperBuilder: KtEnhanceQueryWrapper.() -> Unit, ): T { - val wrapper = KtEnhanceQueryWrapper() - wrapper.wrapperBuilder() - return getOne(wrapper, throwEx) + val wrapper = KtEnhanceQueryWrapper() + wrapper.wrapperBuilder() + return getOne(wrapper, throwEx) } inline fun IService.count( - wrapperBuilder: KtEnhanceQueryWrapper.() -> Unit + wrapperBuilder: KtEnhanceQueryWrapper.() -> Unit, ): Long { - val wrapper = KtEnhanceQueryWrapper() - wrapper.wrapperBuilder() - return count(wrapper) + val wrapper = KtEnhanceQueryWrapper() + wrapper.wrapperBuilder() + return count(wrapper) } inline fun IService.list( - wrapperBuilder: KtEnhanceQueryWrapper.() -> Unit + wrapperBuilder: KtEnhanceQueryWrapper.() -> Unit, ): List { - val wrapper = KtEnhanceQueryWrapper() - wrapper.wrapperBuilder() - return list(wrapper) + val wrapper = KtEnhanceQueryWrapper() + wrapper.wrapperBuilder() + return list(wrapper) } inline fun > IService.page( - page: E, - wrapperBuilder: KtEnhanceQueryWrapper.() -> Unit + page: E, + wrapperBuilder: KtEnhanceQueryWrapper.() -> Unit, ): E { - val wrapper = KtEnhanceQueryWrapper() - wrapper.wrapperBuilder() - return page(page, wrapper) + val wrapper = KtEnhanceQueryWrapper() + wrapper.wrapperBuilder() + return page(page, wrapper) } inline fun >> IService.pageMaps( - page: E, - wrapperBuilder: KtEnhanceQueryWrapper.() -> Unit + page: E, + wrapperBuilder: KtEnhanceQueryWrapper.() -> Unit, ): E { - val wrapper = KtEnhanceQueryWrapper() - wrapper.wrapperBuilder() - return pageMaps(page, wrapper) + val wrapper = KtEnhanceQueryWrapper() + wrapper.wrapperBuilder() + return pageMaps(page, wrapper) } diff --git a/ts-database/ts-mybatisplus/src/main/kotlin/cn/tursom/database/mybatisplus/KtEnhanceQueryWrapper.kt b/ts-database/ts-mybatisplus/src/main/kotlin/cn/tursom/database/mybatisplus/KtEnhanceQueryWrapper.kt index df1d263..de6eb13 100644 --- a/ts-database/ts-mybatisplus/src/main/kotlin/cn/tursom/database/mybatisplus/KtEnhanceQueryWrapper.kt +++ b/ts-database/ts-mybatisplus/src/main/kotlin/cn/tursom/database/mybatisplus/KtEnhanceQueryWrapper.kt @@ -3,7 +3,7 @@ package cn.tursom.database.mybatisplus import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper class KtEnhanceQueryWrapper( - override var enhanceEntityClass: Class + override var enhanceEntityClass: Class, ) : QueryWrapper(), EnhanceQuery>, KtEnhanceWrapper, KtEnhanceQueryWrapper> { diff --git a/ts-database/ts-mybatisplus/src/main/kotlin/cn/tursom/database/mybatisplus/RegexAbstractWrapperEnhance.kt b/ts-database/ts-mybatisplus/src/main/kotlin/cn/tursom/database/mybatisplus/RegexAbstractWrapperEnhance.kt index 4ddd6b8..974db77 100644 --- a/ts-database/ts-mybatisplus/src/main/kotlin/cn/tursom/database/mybatisplus/RegexAbstractWrapperEnhance.kt +++ b/ts-database/ts-mybatisplus/src/main/kotlin/cn/tursom/database/mybatisplus/RegexAbstractWrapperEnhance.kt @@ -9,7 +9,7 @@ interface RegexAbstractWrapperEnhance.regex( diff --git a/ts-database/ts-mybatisplus/src/main/kotlin/cn/tursom/database/mybatisplus/TableField.kt b/ts-database/ts-mybatisplus/src/main/kotlin/cn/tursom/database/mybatisplus/TableField.kt index badc063..a01c9c8 100644 --- a/ts-database/ts-mybatisplus/src/main/kotlin/cn/tursom/database/mybatisplus/TableField.kt +++ b/ts-database/ts-mybatisplus/src/main/kotlin/cn/tursom/database/mybatisplus/TableField.kt @@ -23,129 +23,129 @@ import kotlin.reflect.full.findAnnotation import kotlin.reflect.jvm.javaField data class FieldData( - val field: Field, - val name: String, - val selectionName: String, - val tableField: TableField?, - val column: String, - val exist: Boolean = !field.transient && !field.static && tableField?.exist ?: true, + val field: Field, + val name: String, + val selectionName: String, + val tableField: TableField?, + val column: String, + val exist: Boolean = !field.transient && !field.static && tableField?.exist ?: true, ) val String.sqlName: String - get() { - val sb = StringBuilder() - val iterator = iterator() - sb.append(iterator.nextChar().lowercaseChar()) - iterator.forEach { - if (it.isUpperCase()) { - sb.append('_') - sb.append(it.lowercaseChar()) - } else { - sb.append(it) - } - } - return sb.toString() + get() { + val sb = StringBuilder() + val iterator = iterator() + sb.append(iterator.nextChar().lowercaseChar()) + iterator.forEach { + if (it.isUpperCase()) { + sb.append('_') + sb.append(it.lowercaseChar()) + } else { + sb.append(it) + } } + return sb.toString() + } val Class<*>.tableName - get() = getAnnotation()?.value ?: simpleName.sqlName + get() = getAnnotation()?.value ?: simpleName.sqlName internal val allSelectionFieldMap = ConcurrentHashMap, Array>() internal val fieldDataMap = ConcurrentHashMap() internal val kPropertyFieldDataMap = ConcurrentHashMap, StrongReference>() val Iterable.filterNotExists - get() = asSequence().filter { - it.getFieldData().exist - } + get() = asSequence().filter { + it.getFieldData().exist + } @get:JvmName("filterNotExistsField") val Sequence.filterNotExists - get() = filter { - it.getFieldData().exist - } + get() = filter { + it.getFieldData().exist + } @get:JvmName("filterNotExistsKProperty") val > Sequence.filterNotExists - get() = filter { - it.getFieldData()?.exist ?: false - } + get() = filter { + it.getFieldData()?.exist ?: false + } fun Field.getFieldData(): FieldData = fieldDataMap.getOrPut(this) { - val tableField = getAnnotation() - try { - val tableInfo = TableInfoHelper.getTableInfo(declaringClass) - tableInfo?.fieldList?.firstOrNull { - it.field == this - }?.let { tableFieldInfo -> - FieldData( - field = tableFieldInfo.field, - name = "${tableInfo.tableName}.${tableFieldInfo.column}", - selectionName = "${tableInfo.tableName}.${tableFieldInfo.column} as ${name.sqlName}", - tableField = getAnnotation(), - column = tableFieldInfo.column, - ) - } ?: run { - if (tableInfo != null) { - FieldData( - field = this, - name = "${tableInfo.tableName}.${name.sqlName}", - selectionName = "${tableInfo.tableName}.${name.sqlName}", - tableField = tableField, - column = tableField?.value ?: name.sqlName, - ) - } else null - } - } catch (e: Throwable) { - null + val tableField = getAnnotation() + try { + val tableInfo = TableInfoHelper.getTableInfo(declaringClass) + tableInfo?.fieldList?.firstOrNull { + it.field == this + }?.let { tableFieldInfo -> + FieldData( + field = tableFieldInfo.field, + name = "${tableInfo.tableName}.${tableFieldInfo.column}", + selectionName = "${tableInfo.tableName}.${tableFieldInfo.column} as ${name.sqlName}", + tableField = getAnnotation(), + column = tableFieldInfo.column, + ) } ?: run { - val tableName = declaringClass.tableName + if (tableInfo != null) { FieldData( - field = this, - name = "$tableName.${tableField?.value ?: name.sqlName}", - selectionName = if (tableField == null) { - "$tableName.${name.sqlName}" - } else { - "$tableName.${tableField.value} as ${name.sqlName}" - }, - tableField = tableField, - column = tableField?.value ?: name.sqlName, + field = this, + name = "${tableInfo.tableName}.${name.sqlName}", + selectionName = "${tableInfo.tableName}.${name.sqlName}", + tableField = tableField, + column = tableField?.value ?: name.sqlName, ) + } else null } + } catch (e: Throwable) { + null + } ?: run { + val tableName = declaringClass.tableName + FieldData( + field = this, + name = "$tableName.${tableField?.value ?: name.sqlName}", + selectionName = if (tableField == null) { + "$tableName.${name.sqlName}" + } else { + "$tableName.${tableField.value} as ${name.sqlName}" + }, + tableField = tableField, + column = tableField?.value ?: name.sqlName, + ) + } } fun KProperty<*>.getFieldData(): FieldData? { - return kPropertyFieldDataMap.getOrPut(this) { - StrongReference(javaField?.getFieldData() ?: run { - val owner = owner ?: return@run null - val enhanceField = findAnnotation() ?: return@run null - if (enhanceField.field.isBlank()) { - return@run null - } - owner.kotlin.allMemberPropertiesSequence.firstOrNull { - it.name == enhanceField.field - }?.getFieldData() - }) - }?.r + return kPropertyFieldDataMap.getOrPut(this) { + StrongReference(javaField?.getFieldData() ?: run { + val owner = owner ?: return@run null + val enhanceField = findAnnotation() ?: return@run null + if (enhanceField.field.isBlank()) { + return@run null + } + owner.kotlin.allMemberPropertiesSequence.firstOrNull { + it.name == enhanceField.field + }?.getFieldData() + }) + }?.r } fun getAllSelectionFieldArray(clazz: Class<*>): Array = allSelectionFieldMap.getOrPut(clazz) { - clazz.allFieldsSequence.filterNotExists.map { - it.getFieldData().column - }.toList().toTypedArray() + clazz.allFieldsSequence.filterNotExists.map { + it.getFieldData().column + }.toList().toTypedArray() } fun getAllSelectionField(clazz: Class<*>): List = allSelectionFieldMap.getOrPut(clazz) { - clazz.allFieldsSequence.filterNotExists.map { - it.getFieldData().column - }.toList().toTypedArray() + clazz.allFieldsSequence.filterNotExists.map { + it.getFieldData().column + }.toList().toTypedArray() }.asList() fun getSelectionField(vararg columns: KProperty<*>): Sequence = getSelectionField(columns.asSequence()) fun getSelectionField(columns: Iterable>): Sequence = getSelectionField(columns.asSequence()) fun getSelectionField(columns: Sequence>): Sequence = columns.map { - it.getFieldData() + it.getFieldData() }.filterNotNull().map { - it.column + it.column } diff --git a/ts-socket/build.gradle.kts b/ts-socket/build.gradle.kts index f751067..8a21199 100644 --- a/ts-socket/build.gradle.kts +++ b/ts-socket/build.gradle.kts @@ -6,6 +6,7 @@ plugins { dependencies { implementation(project(":ts-core")) + implementation(project(":ts-core:ts-coroutine")) implementation(project(":ts-core:ts-encrypt")) implementation(project(":ts-core:ts-buffer")) implementation(project(":ts-core:ts-pool")) diff --git a/ts-socket/src/main/kotlin/cn/tursom/channel/AsyncChannel.kt b/ts-socket/src/main/kotlin/cn/tursom/channel/AsyncChannel.kt index 5835903..f6c43c8 100644 --- a/ts-socket/src/main/kotlin/cn/tursom/channel/AsyncChannel.kt +++ b/ts-socket/src/main/kotlin/cn/tursom/channel/AsyncChannel.kt @@ -1,75 +1,16 @@ package cn.tursom.channel -import cn.tursom.core.buffer.ByteBuffer -import cn.tursom.core.buffer.impl.HeapByteBuffer import cn.tursom.core.pool.MemoryPool import java.io.Closeable import java.net.SocketAddress -import java.net.SocketException -import java.nio.channels.FileChannel -import java.nio.charset.Charset -interface AsyncChannel : Closeable { +interface AsyncChannel : Closeable, WritableAsyncChannel, ReadableAsyncChannel { val open: Boolean val remoteAddress: SocketAddress fun getBuffed(pool: MemoryPool): BufferedAsyncChannel = BufferedAsyncChannelImpl(pool, this) - suspend fun write(buffer: Array, timeout: Long = 0L): Long - suspend fun read(buffer: Array, timeout: Long = 0L): Long - suspend fun write(buffer: List, timeout: Long = 0L): Long = write(buffer.toTypedArray(), timeout) - suspend fun read(buffer: List, timeout: Long = 0L): Long = read(buffer.toTypedArray(), timeout) - suspend fun write(buffer: ByteBuffer, timeout: Long = 0L): Int = write(arrayOf(buffer), timeout).toInt() - suspend fun read(buffer: ByteBuffer, timeout: Long = 0L): Int = read(arrayOf(buffer), timeout).toInt() - //suspend fun write(buffer: MultipleByteBuffer, timeout: Long = 0L): Long = write(buffer.buffersArray, timeout) - //suspend fun read(buffer: MultipleByteBuffer, timeout: Long = 0L): Long = read(buffer.buffersArray, timeout) - - suspend fun write( - file: FileChannel, - position: Long, - count: Long, - timeout: Long = 0, - ): Long - - suspend fun read( - file: FileChannel, - position: Long, - count: Long, - timeout: Long = 0, - ): Long - - suspend fun write(bytes: ByteArray, offset: Int = 0, len: Int = bytes.size - offset): Int { - return write(HeapByteBuffer(bytes, offset, len)) - } - - suspend fun write(str: String, charset: Charset = Charsets.UTF_8): Int { - return write(str.toByteArray(charset)) - } - - suspend fun read(pool: MemoryPool, timeout: Long = 0L): ByteBuffer - - /** - * 如果通道已断开则会抛出异常 - */ - suspend fun recv(buffer: ByteBuffer, timeout: Long = 0): Int { - if (buffer.writeable == 0) return emptyBufferCode - val readSize = read(buffer, timeout) - if (readSize < 0) { - throw SocketException("channel closed") - } - return readSize - } - - suspend fun recv(buffers: Array, timeout: Long = 0): Long { - if (buffers.isEmpty()) return emptyBufferLongCode - val readSize = read(buffers, timeout) - if (readSize < 0) { - throw SocketException("channel closed") - } - return readSize - } - companion object { const val emptyBufferCode = 0 const val emptyBufferLongCode = 0L } -} \ No newline at end of file +} diff --git a/ts-socket/src/main/kotlin/cn/tursom/channel/AsyncChannelEnhance.kt b/ts-socket/src/main/kotlin/cn/tursom/channel/AsyncChannelEnhance.kt index 6c6816f..64e388e 100644 --- a/ts-socket/src/main/kotlin/cn/tursom/channel/AsyncChannelEnhance.kt +++ b/ts-socket/src/main/kotlin/cn/tursom/channel/AsyncChannelEnhance.kt @@ -20,5 +20,5 @@ fun ChannelWriter.string() = StringWriter(this) fun EnhanceChannel.string() = StringChannel(this) fun ChannelWriter.stringObjectWriter( - toString: (obj: Any) -> String = { it.toString() } + toString: (obj: Any) -> String = { it.toString() }, ): StringObjectWriter = StringObjectWriter(this, toString) \ No newline at end of file diff --git a/ts-socket/src/main/kotlin/cn/tursom/channel/AsyncNioChannel.kt b/ts-socket/src/main/kotlin/cn/tursom/channel/AsyncNioChannel.kt index ff639a6..7252199 100644 --- a/ts-socket/src/main/kotlin/cn/tursom/channel/AsyncNioChannel.kt +++ b/ts-socket/src/main/kotlin/cn/tursom/channel/AsyncNioChannel.kt @@ -1,6 +1,5 @@ package cn.tursom.channel -import cn.tursom.channel.AsyncChannel.Companion.emptyBufferCode import cn.tursom.channel.AsyncChannel.Companion.emptyBufferLongCode import cn.tursom.core.buffer.ByteBuffer import cn.tursom.core.buffer.impl.HeapByteBuffer @@ -20,13 +19,8 @@ interface AsyncNioChannel : AsyncChannel { val key: SelectionKey val nioThread: NioThread val channel: SelectableChannel get() = key.channel() - - override suspend fun write(buffer: Array, timeout: Long): Long - override suspend fun read(buffer: Array, timeout: Long): Long - override suspend fun write(buffer: ByteBuffer, timeout: Long): Int = write(arrayOf(buffer), timeout).toInt() - override suspend fun read(buffer: ByteBuffer, timeout: Long): Int = read(arrayOf(buffer), timeout).toInt() - //override suspend fun write(buffer: MultipleByteBuffer, timeout: Long): Long = write(buffer.buffers, timeout) - //override suspend fun read(buffer: MultipleByteBuffer, timeout: Long): Long = read(buffer.buffers, timeout) + override suspend fun write(buffer: ByteBuffer, timeout: Long): Long = write(arrayOf(buffer), timeout) + override suspend fun read(buffer: ByteBuffer, timeout: Long): Long = read(arrayOf(buffer), timeout) override suspend fun write( file: FileChannel, @@ -46,11 +40,11 @@ interface AsyncNioChannel : AsyncChannel { file.transferFrom(channel as ReadableByteChannel, position, count) } - override suspend fun write(bytes: ByteArray, offset: Int, len: Int): Int { + override suspend fun write(bytes: ByteArray, offset: Int, len: Int): Long { return write(HeapByteBuffer(bytes, offset, len)) } - override suspend fun write(str: String, charset: Charset): Int { + override suspend fun write(str: String, charset: Charset): Long { return write(str.toByteArray(charset)) } @@ -96,8 +90,8 @@ interface AsyncNioChannel : AsyncChannel { /** * 如果通道已断开则会抛出异常 */ - override suspend fun recv(buffer: ByteBuffer, timeout: Long): Int { - if (buffer.writeable == 0) return emptyBufferCode + override suspend fun recv(buffer: ByteBuffer, timeout: Long): Long { + if (buffer.writeable == 0) return emptyBufferLongCode val readSize = read(buffer, timeout) if (readSize < 0) { throw SocketException("channel closed") diff --git a/ts-socket/src/main/kotlin/cn/tursom/channel/ReadableAsyncChannel.kt b/ts-socket/src/main/kotlin/cn/tursom/channel/ReadableAsyncChannel.kt new file mode 100644 index 0000000..ef6f2e0 --- /dev/null +++ b/ts-socket/src/main/kotlin/cn/tursom/channel/ReadableAsyncChannel.kt @@ -0,0 +1,52 @@ +package cn.tursom.channel + +import cn.tursom.core.buffer.ByteBuffer +import cn.tursom.core.buffer.impl.ArrayByteBuffer +import cn.tursom.core.pool.MemoryPool +import java.net.SocketException +import java.nio.channels.FileChannel + +interface ReadableAsyncChannel { + suspend fun read(buffer: ByteBuffer, timeout: Long = 0L): Long + suspend fun read( + buffer: Array, + timeout: Long = 0L, + ): Long = read(buffer, 0, buffer.size, timeout) + + suspend fun read( + buffer: Array, + offset: Int, + length: Int, + timeout: Long = 0L, + ): Long = read(ArrayByteBuffer(buffer, offset, length), timeout) + + suspend fun read( + file: FileChannel, + position: Long, + count: Long, + timeout: Long = 0, + ): Long + + suspend fun read(pool: MemoryPool, timeout: Long = 0L): ByteBuffer + + /** + * 如果通道已断开则会抛出异常 + */ + suspend fun recv(buffer: ByteBuffer, timeout: Long = 0): Long { + if (buffer.writeable == 0) return AsyncChannel.emptyBufferLongCode + val readSize = read(buffer, timeout) + if (readSize < 0) { + throw SocketException("channel closed") + } + return readSize + } + + suspend fun recv(buffers: Array, timeout: Long = 0): Long { + if (buffers.isEmpty()) return AsyncChannel.emptyBufferLongCode + val readSize = read(buffers, timeout) + if (readSize < 0) { + throw SocketException("channel closed") + } + return readSize + } +} diff --git a/ts-socket/src/main/kotlin/cn/tursom/channel/WritableAsyncChannel.kt b/ts-socket/src/main/kotlin/cn/tursom/channel/WritableAsyncChannel.kt new file mode 100644 index 0000000..8ab949b --- /dev/null +++ b/ts-socket/src/main/kotlin/cn/tursom/channel/WritableAsyncChannel.kt @@ -0,0 +1,34 @@ +package cn.tursom.channel + +import cn.tursom.core.buffer.ByteBuffer +import cn.tursom.core.buffer.impl.ArrayByteBuffer +import cn.tursom.core.buffer.impl.HeapByteBuffer +import java.nio.channels.FileChannel +import java.nio.charset.Charset + +interface WritableAsyncChannel { + suspend fun write(buffer: ByteBuffer, timeout: Long = 0L): Long + + suspend fun write(buffer: Array, timeout: Long = 0L): Long = write(buffer, 0, buffer.size, timeout) + suspend fun write( + buffer: Array, + offset: Int, + length: Int, + timeout: Long = 0L, + ): Long = write(ArrayByteBuffer(buffer)) + + suspend fun write( + file: FileChannel, + position: Long, + count: Long, + timeout: Long = 0, + ): Long + + suspend fun write(bytes: ByteArray, offset: Int = 0, len: Int = bytes.size - offset): Long { + return write(HeapByteBuffer(bytes, offset, len)) + } + + suspend fun write(str: String, charset: Charset = Charsets.UTF_8): Long { + return write(str.toByteArray(charset)) + } +} diff --git a/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/ChannelPipeline.kt b/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/ChannelPipeline.kt index 85d9e89..16628e0 100644 --- a/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/ChannelPipeline.kt +++ b/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/ChannelPipeline.kt @@ -1,10 +1,10 @@ package cn.tursom.channel.enhance import cn.tursom.core.ShutdownHook +import cn.tursom.core.coroutine.GlobalScope import cn.tursom.core.pool.HeapMemoryPool import cn.tursom.core.pool.MemoryPool import kotlinx.coroutines.DelicateCoroutinesApi -import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch import java.io.Closeable import kotlin.coroutines.CoroutineContext diff --git a/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/BufferedChannelReaderImpl.kt b/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/BufferedChannelReaderImpl.kt index 707d9a4..3f68019 100644 --- a/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/BufferedChannelReaderImpl.kt +++ b/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/BufferedChannelReaderImpl.kt @@ -6,7 +6,7 @@ import cn.tursom.core.buffer.ByteBuffer import cn.tursom.core.pool.MemoryPool class BufferedChannelReaderImpl( - private val socket: BufferedAsyncChannel + private val socket: BufferedAsyncChannel, ) : ChannelReader { suspend fun read(timeout: Long) = socket.read(socket.pool, timeout) override suspend fun read(pool: MemoryPool, timeout: Long) = socket.read(pool, timeout) diff --git a/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/ByteArrayWriter.kt b/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/ByteArrayWriter.kt index ae2120d..00972fe 100644 --- a/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/ByteArrayWriter.kt +++ b/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/ByteArrayWriter.kt @@ -5,7 +5,7 @@ import cn.tursom.core.buffer.ByteBuffer import cn.tursom.core.buffer.impl.HeapByteBuffer class ByteArrayWriter( - private val prevWriter: ChannelWriter + private val prevWriter: ChannelWriter, ) : ChannelWriter { override suspend fun write(value: ByteArray) { prevWriter.write(HeapByteBuffer(value)) diff --git a/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/ChannelReaderImpl.kt b/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/ChannelReaderImpl.kt index 3a63306..991a1fb 100644 --- a/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/ChannelReaderImpl.kt +++ b/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/ChannelReaderImpl.kt @@ -6,7 +6,7 @@ import cn.tursom.core.buffer.ByteBuffer import cn.tursom.core.pool.MemoryPool class ChannelReaderImpl( - private val socket: AsyncChannel + private val socket: AsyncChannel, ) : ChannelReader { override suspend fun read(pool: MemoryPool, timeout: Long) = socket.read(pool, timeout) override fun close() = socket.close() diff --git a/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/ChannelWriterImpl.kt b/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/ChannelWriterImpl.kt index 53a2bc2..5521693 100644 --- a/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/ChannelWriterImpl.kt +++ b/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/ChannelWriterImpl.kt @@ -5,7 +5,7 @@ import cn.tursom.channel.enhance.ChannelWriter import cn.tursom.core.buffer.ByteBuffer class ChannelWriterImpl( - private val socket: AsyncChannel + private val socket: AsyncChannel, ) : ChannelWriter { private val bufList = ArrayList(4) override suspend fun write(value: ByteBuffer) { @@ -15,7 +15,7 @@ class ChannelWriterImpl( override suspend fun flush(timeout: Long): Long { val read = when (bufList.size) { 0 -> 0 - 1 -> socket.write(bufList[0], timeout).toLong() + 1 -> socket.write(bufList[0], timeout) else -> socket.write(bufList.toTypedArray(), timeout) } bufList.clear() @@ -24,7 +24,7 @@ class ChannelWriterImpl( override suspend fun writeAndFlush(value: ByteBuffer, timeout: Long): Long { return if (bufList.isEmpty()) { - socket.write(value, timeout).toLong() + socket.write(value, timeout) } else { super.writeAndFlush(value, timeout) } diff --git a/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/EnhanceChannel.kt b/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/EnhanceChannel.kt index 62654ed..c1a86e0 100644 --- a/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/EnhanceChannel.kt +++ b/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/EnhanceChannel.kt @@ -4,7 +4,7 @@ import cn.tursom.channel.AsyncChannel import cn.tursom.core.buffer.ByteBuffer class EnhanceChannel( - val channel: Channel + val channel: Channel, ) : EnhanceChannelImpl( ChannelReaderImpl(channel), ChannelWriterImpl(channel) diff --git a/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/EnhanceChannelImpl.kt b/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/EnhanceChannelImpl.kt index e2437dd..5b94ab1 100644 --- a/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/EnhanceChannelImpl.kt +++ b/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/EnhanceChannelImpl.kt @@ -6,7 +6,7 @@ import cn.tursom.channel.enhance.EnhanceChannel open class EnhanceChannelImpl( override val reader: ChannelReader, - override val writer: ChannelWriter + override val writer: ChannelWriter, ) : EnhanceChannel, ChannelReader by reader, ChannelWriter by writer { override fun close() { reader.close() diff --git a/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/LengthFieldBasedFrameReader.kt b/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/LengthFieldBasedFrameReader.kt index ffade19..4c2918d 100644 --- a/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/LengthFieldBasedFrameReader.kt +++ b/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/LengthFieldBasedFrameReader.kt @@ -9,7 +9,7 @@ import cn.tursom.core.pool.LongBitSetDirectMemoryPool import cn.tursom.core.pool.MemoryPool class LengthFieldBasedFrameReader( - private val prevReader: ChannelReader + private val prevReader: ChannelReader, ) : ChannelReader { private var lastRead: ByteBuffer? = null @@ -20,16 +20,16 @@ class LengthFieldBasedFrameReader( it.close() size } - val bufList = ArrayList() + val bufList = ListByteBuffer() var readSize = 0 lastRead?.let { buffer -> - bufList.add(buffer) + bufList.append(buffer) readSize += buffer.readable } while (readSize < maxSize) { val buffer = prevReader.read(pool, timeout - (CurrentTimeMillisClock.now - startTime)) readSize += buffer.readable - bufList.add( + bufList.append( if (readSize > maxSize) { lastRead = buffer.slice( buffer.readPosition + readSize - maxSize, @@ -48,7 +48,7 @@ class LengthFieldBasedFrameReader( } ) } - return ListByteBuffer(bufList) + return bufList } override fun close() = prevReader.close() diff --git a/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/LengthFieldChannel.kt b/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/LengthFieldChannel.kt index 7ec8d49..a3ce3b6 100644 --- a/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/LengthFieldChannel.kt +++ b/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/LengthFieldChannel.kt @@ -7,7 +7,7 @@ import cn.tursom.core.buffer.ByteBuffer class LengthFieldChannel( reader: ChannelReader, - writer: ChannelWriter + writer: ChannelWriter, ) : EnhanceChannelImpl( LengthFieldBasedFrameReader(reader), LengthFieldPrependWriter(writer) diff --git a/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/LengthFieldPrependWriter.kt b/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/LengthFieldPrependWriter.kt index 6b143c5..d132d1f 100644 --- a/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/LengthFieldPrependWriter.kt +++ b/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/LengthFieldPrependWriter.kt @@ -6,7 +6,7 @@ import cn.tursom.core.pool.ExpandableMemoryPool import cn.tursom.core.pool.LongBitSetDirectMemoryPool class LengthFieldPrependWriter( - private val prevWriter: ChannelWriter + private val prevWriter: ChannelWriter, ) : ChannelWriter { private val bufList = ArrayList(4) diff --git a/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/ListStringReader.kt b/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/ListStringReader.kt index 4692c94..e6555b5 100644 --- a/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/ListStringReader.kt +++ b/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/ListStringReader.kt @@ -7,7 +7,7 @@ import cn.tursom.core.buffer.readable import cn.tursom.core.pool.MemoryPool class ListStringReader( - private val prevReader: ChannelReader> + private val prevReader: ChannelReader>, ) : ChannelReader { override suspend fun read(pool: MemoryPool, timeout: Long): String { val read = prevReader.read(pool, timeout) diff --git a/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/SingleListChannelReader.kt b/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/SingleListChannelReader.kt index 645f766..83a00f5 100644 --- a/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/SingleListChannelReader.kt +++ b/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/SingleListChannelReader.kt @@ -5,7 +5,7 @@ import cn.tursom.core.buffer.ByteBuffer import cn.tursom.core.pool.MemoryPool class SingleListChannelReader( - private val prevReader: ChannelReader + private val prevReader: ChannelReader, ) : ChannelReader> { override suspend fun read(pool: MemoryPool, timeout: Long): List = listOf(prevReader.read(pool, timeout)) override fun close() = prevReader.close() diff --git a/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/StringChannel.kt b/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/StringChannel.kt index 9177b77..a36a24b 100644 --- a/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/StringChannel.kt +++ b/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/StringChannel.kt @@ -7,7 +7,7 @@ import cn.tursom.core.buffer.ByteBuffer class StringChannel( prevReader: ChannelReader, - prevWriter: ChannelWriter + prevWriter: ChannelWriter, ) : EnhanceChannelImpl( StringReader(prevReader), StringWriter(prevWriter) diff --git a/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/StringObjectWriter.kt b/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/StringObjectWriter.kt index e2e0a67..ce87453 100644 --- a/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/StringObjectWriter.kt +++ b/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/StringObjectWriter.kt @@ -4,7 +4,7 @@ import cn.tursom.channel.enhance.ChannelWriter class StringObjectWriter( private val prevWriter: ChannelWriter, - private val toString: (obj: Any) -> String = { it.toString() } + private val toString: (obj: Any) -> String = { it.toString() }, ) : ChannelWriter { override suspend fun write(value: Any) = prevWriter.write(toString(value)) override suspend fun flush(timeout: Long) = prevWriter.flush(timeout) diff --git a/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/StringReader.kt b/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/StringReader.kt index af0605a..4445801 100644 --- a/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/StringReader.kt +++ b/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/StringReader.kt @@ -5,7 +5,7 @@ import cn.tursom.core.buffer.ByteBuffer import cn.tursom.core.pool.MemoryPool class StringReader( - private val prevReader: ChannelReader + private val prevReader: ChannelReader, ) : ChannelReader { override suspend fun read(pool: MemoryPool, timeout: Long) = prevReader.read(pool, timeout).let { buffer -> val string = buffer.getString() diff --git a/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/StringWriter.kt b/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/StringWriter.kt index f2e9b54..97b4e71 100644 --- a/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/StringWriter.kt +++ b/ts-socket/src/main/kotlin/cn/tursom/channel/enhance/impl/StringWriter.kt @@ -5,7 +5,7 @@ import cn.tursom.core.buffer.ByteBuffer import cn.tursom.core.buffer.impl.HeapByteBuffer class StringWriter( - private val prevWriter: ChannelWriter + private val prevWriter: ChannelWriter, ) : ChannelWriter { private val stringList = ArrayList() override suspend fun write(value: String) { diff --git a/ts-socket/src/main/kotlin/cn/tursom/datagram/AsyncDatagram.kt b/ts-socket/src/main/kotlin/cn/tursom/datagram/AsyncDatagram.kt index bcafb95..da941a5 100644 --- a/ts-socket/src/main/kotlin/cn/tursom/datagram/AsyncDatagram.kt +++ b/ts-socket/src/main/kotlin/cn/tursom/datagram/AsyncDatagram.kt @@ -4,7 +4,6 @@ import cn.tursom.channel.AsyncNioChannel import cn.tursom.channel.read import cn.tursom.core.buffer.ByteBuffer import cn.tursom.core.buffer.read -import cn.tursom.core.buffer.write import cn.tursom.core.pool.MemoryPool import java.net.SocketException import java.nio.channels.DatagramChannel @@ -13,11 +12,6 @@ interface AsyncDatagram : AsyncNioChannel { override val channel: DatagramChannel override fun getBuffed(pool: MemoryPool): BufferedAsyncDatagram = BufferedNioDatagram(pool, this) - override suspend fun write(buffer: Array, timeout: Long): Long = channel.write(buffer) - - override suspend fun read(buffer: Array, timeout: Long): Long = - read(timeout) { channel.read(buffer) } - /** * 在有数据读取的时候自动由内存池分配内存 */ diff --git a/ts-socket/src/main/kotlin/cn/tursom/datagram/server/AsyncDatagramServer.kt b/ts-socket/src/main/kotlin/cn/tursom/datagram/server/AsyncDatagramServer.kt index c9611d7..9339161 100644 --- a/ts-socket/src/main/kotlin/cn/tursom/datagram/server/AsyncDatagramServer.kt +++ b/ts-socket/src/main/kotlin/cn/tursom/datagram/server/AsyncDatagramServer.kt @@ -1,6 +1,6 @@ package cn.tursom.datagram.server -import kotlinx.coroutines.GlobalScope +import cn.tursom.core.coroutine.GlobalScope import kotlinx.coroutines.launch import java.lang.ref.SoftReference import java.net.SocketAddress @@ -8,7 +8,7 @@ import java.util.concurrent.ConcurrentHashMap open class AsyncDatagramServer( port: Int, - private val handler: suspend ServerNioDatagram.() -> Unit + private val handler: suspend ServerNioDatagram.() -> Unit, ) : LoopDatagramServer(port, DatagramProtocol) { private val channelMap = ConcurrentHashMap>() diff --git a/ts-socket/src/main/kotlin/cn/tursom/datagram/server/BufferedAsyncDatagramServer.kt b/ts-socket/src/main/kotlin/cn/tursom/datagram/server/BufferedAsyncDatagramServer.kt index afb5f95..f0ccc00 100644 --- a/ts-socket/src/main/kotlin/cn/tursom/datagram/server/BufferedAsyncDatagramServer.kt +++ b/ts-socket/src/main/kotlin/cn/tursom/datagram/server/BufferedAsyncDatagramServer.kt @@ -5,5 +5,5 @@ import cn.tursom.core.pool.MemoryPool class BufferedAsyncDatagramServer( port: Int, private val memoryPool: MemoryPool, - private val handler: suspend BufferedServerNioDatagram.() -> Unit + private val handler: suspend BufferedServerNioDatagram.() -> Unit, ) : AsyncDatagramServer(port, { handler(BufferedServerNioDatagram(memoryPool, this)) }) \ No newline at end of file diff --git a/ts-socket/src/main/kotlin/cn/tursom/datagram/server/LoopDatagramServer.kt b/ts-socket/src/main/kotlin/cn/tursom/datagram/server/LoopDatagramServer.kt index c466955..c374a19 100644 --- a/ts-socket/src/main/kotlin/cn/tursom/datagram/server/LoopDatagramServer.kt +++ b/ts-socket/src/main/kotlin/cn/tursom/datagram/server/LoopDatagramServer.kt @@ -15,10 +15,10 @@ open class LoopDatagramServer( protocol: NioProtocol, nioThreadFactory: ( threadName: String, - workLoop: (thread: NioThread, key: SelectionKey) -> Unit + workLoop: (thread: NioThread, key: SelectionKey) -> Unit, ) -> NioThread = { name, workLoop -> WorkerLoopNioThread(name, workLoop = workLoop, daemon = false) - } + }, ) : SocketServer { protected val listenChannel: DatagramChannel = DatagramChannel.open() val bossNioThread = nioThreadFactory("nio-boss", WorkerLoopHandler(protocol)) diff --git a/ts-socket/src/main/kotlin/cn/tursom/datagram/server/ServerNioDatagram.kt b/ts-socket/src/main/kotlin/cn/tursom/datagram/server/ServerNioDatagram.kt index 5bb776b..7d818ac 100644 --- a/ts-socket/src/main/kotlin/cn/tursom/datagram/server/ServerNioDatagram.kt +++ b/ts-socket/src/main/kotlin/cn/tursom/datagram/server/ServerNioDatagram.kt @@ -1,13 +1,12 @@ package cn.tursom.datagram.server import cn.tursom.core.buffer.ByteBuffer -import cn.tursom.core.buffer.NioBuffers.finishRead -import cn.tursom.core.buffer.NioBuffers.getReadNioBufferList import cn.tursom.core.pool.MemoryPool import cn.tursom.core.timer.TimerTask import cn.tursom.core.timer.WheelTimer import cn.tursom.datagram.NioDatagram import cn.tursom.niothread.NioThread +import kotlinx.coroutines.suspendCancellableCoroutine import java.net.SocketAddress import java.nio.channels.DatagramChannel import java.nio.channels.SelectionKey @@ -15,14 +14,13 @@ import java.util.concurrent.ConcurrentLinkedQueue import java.util.concurrent.TimeoutException import kotlin.coroutines.Continuation import kotlin.coroutines.resumeWithException -import kotlin.coroutines.suspendCoroutine class ServerNioDatagram( override val remoteAddress: SocketAddress, val server: AsyncDatagramServer, channel: DatagramChannel, key: SelectionKey, - nioThread: NioThread + nioThread: NioThread, ) : NioDatagram(channel, key, nioThread) { companion object { val timer = WheelTimer.timer @@ -37,24 +35,8 @@ class ServerNioDatagram( bufferList.add(buffer) } - override suspend fun write(buffer: Array, timeout: Long): Long { - val nioBufferList = buffer.getReadNioBufferList() - buffer.finishRead(nioBufferList.iterator()) - var write = 0L - nioBufferList.forEach { buf -> - if (buf.remaining() != 0) { - val send = channel.send(buf, remoteAddress) - if (send <= 0) { - return write - } - write += send - } - } - return write - } - override suspend fun waitRead(timeout: Long) { - suspendCoroutine { cont -> + suspendCancellableCoroutine { cont -> this.cont = cont if (timeout > 0) { timeoutTask = timer.exec(timeout) { @@ -66,22 +48,6 @@ class ServerNioDatagram( timeoutTask?.cancel() } - override suspend fun read(buffer: Array, timeout: Long): Long { - if (bufferList.isEmpty()) waitRead() - val bufferIterator = buffer.iterator() - var write = 0L - while (bufferIterator.hasNext()) { - val buf = bufferIterator.next() - while (buf.writeable != 0) { - if (readBuffer == null || readBuffer?.readable == 0) { - readBuffer = bufferList.poll() ?: return write - } - write += buf.put(readBuffer!!) - } - } - return write - } - override suspend fun read(pool: MemoryPool, timeout: Long): ByteBuffer { if (bufferList.isEmpty()) waitRead() val buf = pool.get() diff --git a/ts-socket/src/main/kotlin/cn/tursom/niothread/ThreadPoolNioThread.kt b/ts-socket/src/main/kotlin/cn/tursom/niothread/ThreadPoolNioThread.kt index b5bae9c..866e247 100644 --- a/ts-socket/src/main/kotlin/cn/tursom/niothread/ThreadPoolNioThread.kt +++ b/ts-socket/src/main/kotlin/cn/tursom/niothread/ThreadPoolNioThread.kt @@ -11,7 +11,7 @@ class ThreadPoolNioThread( override val selector: Selector = Selector.open(), override val daemon: Boolean = false, override val timeout: Long = 3000, - override val workLoop: (thread: NioThread, key: SelectionKey) -> Unit + override val workLoop: (thread: NioThread, key: SelectionKey) -> Unit, ) : NioThread { override lateinit var thread: Thread val threadPool: ExecutorService = ThreadPoolExecutor(1, 1, diff --git a/ts-socket/src/main/kotlin/cn/tursom/niothread/WorkerLoopNioThread.kt b/ts-socket/src/main/kotlin/cn/tursom/niothread/WorkerLoopNioThread.kt index 0e90bee..45bfec2 100644 --- a/ts-socket/src/main/kotlin/cn/tursom/niothread/WorkerLoopNioThread.kt +++ b/ts-socket/src/main/kotlin/cn/tursom/niothread/WorkerLoopNioThread.kt @@ -10,7 +10,7 @@ class WorkerLoopNioThread( override var selector: Selector = Selector.open(), override val daemon: Boolean = false, override val timeout: Long = 3000, - override val workLoop: (thread: NioThread, key: SelectionKey) -> Unit + override val workLoop: (thread: NioThread, key: SelectionKey) -> Unit, ) : NioThread { override val closed: Boolean get() = !selector.isOpen diff --git a/ts-socket/src/main/kotlin/cn/tursom/niothread/loophandler/BossLoopHandler.kt b/ts-socket/src/main/kotlin/cn/tursom/niothread/loophandler/BossLoopHandler.kt index 92aa1a9..8b61648 100644 --- a/ts-socket/src/main/kotlin/cn/tursom/niothread/loophandler/BossLoopHandler.kt +++ b/ts-socket/src/main/kotlin/cn/tursom/niothread/loophandler/BossLoopHandler.kt @@ -7,7 +7,7 @@ import java.nio.channels.ServerSocketChannel open class BossLoopHandler( private val protocol: NioProtocol, - private val workerThread: NioThread? = null + private val workerThread: NioThread? = null, ) : (NioThread, SelectionKey) -> Unit { override fun invoke(nioThread: NioThread, key: SelectionKey) { val workerThread: NioThread = workerThread ?: nioThread diff --git a/ts-socket/src/main/kotlin/cn/tursom/niothread/loophandler/MultithreadingBossLoopHandler.kt b/ts-socket/src/main/kotlin/cn/tursom/niothread/loophandler/MultithreadingBossLoopHandler.kt index 666ab3c..121ff76 100644 --- a/ts-socket/src/main/kotlin/cn/tursom/niothread/loophandler/MultithreadingBossLoopHandler.kt +++ b/ts-socket/src/main/kotlin/cn/tursom/niothread/loophandler/MultithreadingBossLoopHandler.kt @@ -7,7 +7,7 @@ import java.nio.channels.SelectionKey class MultithreadingBossLoopHandler( protocol: NioProtocol, - private val workerThread: List = emptyList() + private val workerThread: List = emptyList(), ) : BossLoopHandler(protocol, null) { override fun invoke(nioThread: NioThread, key: SelectionKey) { val workerThread: NioThread = if (workerThread.isEmpty()) { diff --git a/ts-socket/src/main/kotlin/cn/tursom/socket/AsyncSocket.kt b/ts-socket/src/main/kotlin/cn/tursom/socket/AsyncSocket.kt index 56d24ab..262db41 100644 --- a/ts-socket/src/main/kotlin/cn/tursom/socket/AsyncSocket.kt +++ b/ts-socket/src/main/kotlin/cn/tursom/socket/AsyncSocket.kt @@ -5,8 +5,9 @@ import cn.tursom.channel.BufferedAsyncChannel import cn.tursom.channel.read import cn.tursom.channel.write import cn.tursom.core.buffer.ByteBuffer +import cn.tursom.core.buffer.NioBuffers.readNioBuffers +import cn.tursom.core.buffer.NioBuffers.writeNioBuffers import cn.tursom.core.buffer.read -import cn.tursom.core.buffer.write import cn.tursom.core.pool.MemoryPool import java.net.SocketAddress import java.net.SocketException @@ -19,17 +20,17 @@ interface AsyncSocket : AsyncNioChannel { override val remoteAddress: SocketAddress get() = channel.remoteAddress override fun getBuffed(pool: MemoryPool): BufferedAsyncChannel = BufferedNioSocket(this, pool) - override suspend fun write(buffer: Array, timeout: Long): Long = - write(timeout) { channel.write(buffer) } + override suspend fun write(buffer: Array, offset: Int, length: Int, timeout: Long): Long = + write(timeout) { buffer.readNioBuffers(offset, length) { channel.write(it) } } - override suspend fun read(buffer: Array, timeout: Long): Long = - read(timeout) { channel.read(buffer) } + override suspend fun read(buffer: Array, offset: Int, length: Int, timeout: Long): Long = + read(timeout) { buffer.writeNioBuffers(offset, length) { channel.read(it) } } override suspend fun write( file: FileChannel, position: Long, count: Long, - timeout: Long + timeout: Long, ): Long = write(timeout) { file.transferTo(position, count, channel) } @@ -38,7 +39,7 @@ interface AsyncSocket : AsyncNioChannel { file: FileChannel, position: Long, count: Long, - timeout: Long + timeout: Long, ): Long = read(timeout) { file.transferFrom(channel, position, count) } diff --git a/ts-socket/src/main/kotlin/cn/tursom/socket/BufferedNioSocket.kt b/ts-socket/src/main/kotlin/cn/tursom/socket/BufferedNioSocket.kt index cc7f89d..3bd1957 100644 --- a/ts-socket/src/main/kotlin/cn/tursom/socket/BufferedNioSocket.kt +++ b/ts-socket/src/main/kotlin/cn/tursom/socket/BufferedNioSocket.kt @@ -4,5 +4,5 @@ import cn.tursom.core.pool.MemoryPool class BufferedNioSocket( override val prevChannel: AsyncSocket, - override val pool: MemoryPool + override val pool: MemoryPool, ) : BufferedAsyncSocket, AsyncSocket by prevChannel \ No newline at end of file diff --git a/ts-socket/src/main/kotlin/cn/tursom/socket/NioSocket.kt b/ts-socket/src/main/kotlin/cn/tursom/socket/NioSocket.kt index 7ff3dba..b989f0f 100644 --- a/ts-socket/src/main/kotlin/cn/tursom/socket/NioSocket.kt +++ b/ts-socket/src/main/kotlin/cn/tursom/socket/NioSocket.kt @@ -1,8 +1,6 @@ package cn.tursom.socket -import cn.tursom.channel.AsyncChannel.Companion.emptyBufferCode import cn.tursom.channel.AsyncChannel.Companion.emptyBufferLongCode -import cn.tursom.channel.read import cn.tursom.channel.write import cn.tursom.core.buffer.ByteBuffer import cn.tursom.core.buffer.read @@ -29,29 +27,15 @@ class NioSocket internal constructor( override val channel: SocketChannel = key.channel() as SocketChannel override val open: Boolean get() = channel.isOpen && key.isValid - override suspend fun read(buffer: ByteBuffer, timeout: Long): Int { - if (buffer.writeable == 0) return emptyBufferCode + override suspend fun read(buffer: ByteBuffer, timeout: Long): Long { + if (buffer.writeable == 0) return emptyBufferLongCode return write(timeout) { channel.read(buffer) } } - override suspend fun read(buffer: Array, timeout: Long): Long { - if (buffer.isEmpty() && buffer.all { it.writeable != 0 }) return emptyBufferLongCode - return read(timeout) { - channel.read(buffer) - } - } - - override suspend fun write(buffer: ByteBuffer, timeout: Long): Int { - if (buffer.readable == 0) return emptyBufferCode - return write(timeout) { - channel.write(buffer) - } - } - - override suspend fun write(buffer: Array, timeout: Long): Long { - if (buffer.isEmpty() && buffer.all { it.readable != 0 }) return emptyBufferLongCode + override suspend fun write(buffer: ByteBuffer, timeout: Long): Long { + if (buffer.readable == 0) return emptyBufferLongCode return write(timeout) { channel.write(buffer) } diff --git a/ts-socket/src/main/kotlin/cn/tursom/socket/security/AsyncSocketSecurityUtil.kt b/ts-socket/src/main/kotlin/cn/tursom/socket/security/AsyncSocketSecurityUtil.kt index 2891f91..db86f77 100644 --- a/ts-socket/src/main/kotlin/cn/tursom/socket/security/AsyncSocketSecurityUtil.kt +++ b/ts-socket/src/main/kotlin/cn/tursom/socket/security/AsyncSocketSecurityUtil.kt @@ -25,7 +25,7 @@ object AsyncSocketSecurityUtil { suspend fun initPassiveAESSocket( socket: AsyncSocket, - publicKeyEncryptBuilder: (key: ByteArray) -> PublicKeyEncrypt = { RSA(it) } + publicKeyEncryptBuilder: (key: ByteArray) -> PublicKeyEncrypt = { RSA(it) }, ): EnhanceChannel { // 接受RSA公钥 val rsaKey = socket.read(memoryPool) diff --git a/ts-socket/src/main/kotlin/cn/tursom/socket/security/SecurityEnhanceChannel.kt b/ts-socket/src/main/kotlin/cn/tursom/socket/security/SecurityEnhanceChannel.kt index ae9f1b5..13ceda2 100644 --- a/ts-socket/src/main/kotlin/cn/tursom/socket/security/SecurityEnhanceChannel.kt +++ b/ts-socket/src/main/kotlin/cn/tursom/socket/security/SecurityEnhanceChannel.kt @@ -10,7 +10,7 @@ import cn.tursom.core.pool.MemoryPool class SecurityEnhanceChannel( val preReader: ChannelReader, val preWriter: ChannelWriter, - val aes: AES + val aes: AES, ) : EnhanceChannel { override val reader: ChannelReader get() = this override val writer: ChannelWriter get() = this diff --git a/ts-socket/src/main/kotlin/cn/tursom/socket/security/SecurityNioServer.kt b/ts-socket/src/main/kotlin/cn/tursom/socket/security/SecurityNioServer.kt index 30dba3a..c020657 100644 --- a/ts-socket/src/main/kotlin/cn/tursom/socket/security/SecurityNioServer.kt +++ b/ts-socket/src/main/kotlin/cn/tursom/socket/security/SecurityNioServer.kt @@ -1,10 +1,10 @@ package cn.tursom.socket.security +import cn.tursom.core.coroutine.GlobalScope import cn.tursom.core.encrypt.RSA import cn.tursom.socket.AsyncSocket import cn.tursom.socket.server.NioServer import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.GlobalScope class SecurityNioServer( port: Int, @@ -12,7 +12,7 @@ class SecurityNioServer( coroutineScope: CoroutineScope = GlobalScope, autoCloseSocket: Boolean = true, @Suppress("MemberVisibilityCanBePrivate") val rsa: RSA = RSA(), - val handler: suspend AsyncSocket.() -> Unit + val handler: suspend AsyncSocket.() -> Unit, ) : NioServer(port, backlog, coroutineScope, autoCloseSocket, { AsyncSocketSecurityUtil.initActiveAESSocket(this, rsa) handler() @@ -23,6 +23,6 @@ class SecurityNioServer( backlog: Int = 50, coroutineScope: CoroutineScope = GlobalScope, autoCloseSocket: Boolean = true, - handler: suspend AsyncSocket.() -> Unit + handler: suspend AsyncSocket.() -> Unit, ) : this(port, backlog, coroutineScope, autoCloseSocket, RSA(keySize), handler) } \ No newline at end of file diff --git a/ts-socket/src/main/kotlin/cn/tursom/socket/server/BufferedNioServer.kt b/ts-socket/src/main/kotlin/cn/tursom/socket/server/BufferedNioServer.kt index 2b3a2a9..e10955d 100644 --- a/ts-socket/src/main/kotlin/cn/tursom/socket/server/BufferedNioServer.kt +++ b/ts-socket/src/main/kotlin/cn/tursom/socket/server/BufferedNioServer.kt @@ -1,5 +1,6 @@ package cn.tursom.socket.server +import cn.tursom.core.coroutine.GlobalScope import cn.tursom.core.pool.DirectMemoryPool import cn.tursom.core.pool.ExpandableMemoryPool import cn.tursom.core.pool.MarkedMemoryPool @@ -7,7 +8,6 @@ import cn.tursom.core.pool.MemoryPool import cn.tursom.socket.BufferedAsyncSocket import cn.tursom.socket.BufferedNioSocket import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.GlobalScope /** * 带内存池的 NIO 套接字服务器。 @@ -19,7 +19,7 @@ open class BufferedNioServer( backlog: Int = 50, coroutineScope: CoroutineScope = GlobalScope, autoCloseSocket: Boolean = true, - handler: suspend BufferedAsyncSocket.() -> Unit + handler: suspend BufferedAsyncSocket.() -> Unit, ) : NioServer(port, backlog, coroutineScope, autoCloseSocket, { MarkedMemoryPool(memoryPool).use { marked -> BufferedNioSocket(this, marked).handler() @@ -32,7 +32,7 @@ open class BufferedNioServer( backlog: Int = 50, coroutineScope: CoroutineScope = GlobalScope, autoCloseSocket: Boolean = true, - handler: suspend BufferedAsyncSocket.() -> Unit + handler: suspend BufferedAsyncSocket.() -> Unit, ) : this( port, ExpandableMemoryPool { DirectMemoryPool(blockSize, blockCount) }, diff --git a/ts-socket/src/main/kotlin/cn/tursom/socket/server/MultithreadingNioLoopServer.kt b/ts-socket/src/main/kotlin/cn/tursom/socket/server/MultithreadingNioLoopServer.kt index 6841dbf..cbfd021 100644 --- a/ts-socket/src/main/kotlin/cn/tursom/socket/server/MultithreadingNioLoopServer.kt +++ b/ts-socket/src/main/kotlin/cn/tursom/socket/server/MultithreadingNioLoopServer.kt @@ -21,10 +21,10 @@ class MultithreadingNioLoopServer( val workerThreads: Int = Runtime.getRuntime().availableProcessors(), nioThreadFactory: ( threadName: String, - workLoop: (thread: NioThread, key: SelectionKey) -> Unit + workLoop: (thread: NioThread, key: SelectionKey) -> Unit, ) -> NioThread = { name, workLoop -> WorkerLoopNioThread(name, workLoop = workLoop, daemon = false) - } + }, ) : SocketServer { private val listenChannel = ServerSocketChannel.open() private val workerNioThread = Array(workerThreads) { diff --git a/ts-socket/src/main/kotlin/cn/tursom/socket/server/NioLoopServer.kt b/ts-socket/src/main/kotlin/cn/tursom/socket/server/NioLoopServer.kt index 15f1e21..eb4aa59 100644 --- a/ts-socket/src/main/kotlin/cn/tursom/socket/server/NioLoopServer.kt +++ b/ts-socket/src/main/kotlin/cn/tursom/socket/server/NioLoopServer.kt @@ -19,10 +19,10 @@ class NioLoopServer( private val backLog: Int = 50, nioThreadFactory: ( threadName: String, - workLoop: (thread: NioThread, key: SelectionKey) -> Unit + workLoop: (thread: NioThread, key: SelectionKey) -> Unit, ) -> NioThread = { name, workLoop -> WorkerLoopNioThread(name, workLoop = workLoop, daemon = false) - } + }, ) : SocketServer { private val listenChannel = ServerSocketChannel.open() private val workerNioThread = nioThreadFactory("nio-worker", WorkerLoopHandler(protocol)) diff --git a/ts-socket/src/main/kotlin/cn/tursom/socket/server/NioServer.kt b/ts-socket/src/main/kotlin/cn/tursom/socket/server/NioServer.kt index 5d0687d..ad5c292 100644 --- a/ts-socket/src/main/kotlin/cn/tursom/socket/server/NioServer.kt +++ b/ts-socket/src/main/kotlin/cn/tursom/socket/server/NioServer.kt @@ -1,12 +1,12 @@ package cn.tursom.socket.server import cn.tursom.channel.AsyncProtocol +import cn.tursom.core.coroutine.GlobalScope import cn.tursom.niothread.NioProtocol import cn.tursom.niothread.NioThread import cn.tursom.socket.AsyncSocket import cn.tursom.socket.NioSocket import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch import java.nio.channels.SelectionKey @@ -19,7 +19,7 @@ open class NioServer( backlog: Int = 50, coroutineScope: CoroutineScope = GlobalScope, var autoCloseSocket: Boolean = true, - private val handler: suspend AsyncSocket.() -> Unit + private val handler: suspend AsyncSocket.() -> Unit, ) : SocketServer by NioLoopServer(port, object : NioProtocol by AsyncProtocol { override fun handleConnect(key: SelectionKey, nioThread: NioThread) { coroutineScope.launch { @@ -29,7 +29,7 @@ open class NioServer( } finally { if (autoCloseSocket) try { socket.close() - } catch (e: Exception) { + } catch (_: Exception) { } } } diff --git a/ts-socket/src/test/kotlin/cn/tursom/datagram/server/test.kt b/ts-socket/src/test/kotlin/cn/tursom/datagram/server/test.kt index e82346c..18ed332 100644 --- a/ts-socket/src/test/kotlin/cn/tursom/datagram/server/test.kt +++ b/ts-socket/src/test/kotlin/cn/tursom/datagram/server/test.kt @@ -1,11 +1,16 @@ package cn.tursom.datagram.server import cn.tursom.channel.BufferedAsyncChannel +import cn.tursom.core.ByteBufferUtil +import cn.tursom.core.ThreadLocalSimpleDateFormat +import cn.tursom.core.buffer.impl.ArrayByteBuffer +import cn.tursom.core.coroutine.GlobalScope import cn.tursom.core.pool.DirectMemoryPool import cn.tursom.datagram.AsyncDatagramClient import cn.tursom.log.impl.Slf4jImpl import cn.tursom.socket.NioClient import cn.tursom.socket.server.BufferedNioServer +import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking val logger = Slf4jImpl.getLogger() @@ -14,12 +19,12 @@ val echoHandler: suspend BufferedAsyncChannel.() -> Unit = { while (true) { val buffer = read() logger.debug("$this recv from client $remoteAddress: ${buffer.toString(buffer.readable)}") - Throwable().printStackTrace() write(buffer) } } fun main() { + GlobalScope.launch {} val port = 12345 val pool = DirectMemoryPool(1024, 16) val server = BufferedNioServer(port, pool, handler = echoHandler) @@ -45,7 +50,12 @@ fun main() { print(">>>") val line = input.readLine() if (line.isEmpty()) continue - client.write(line) + client.write(ArrayByteBuffer( + ByteBufferUtil.wrap("["), + ByteBufferUtil.wrap(ThreadLocalSimpleDateFormat.cn.now()), + ByteBufferUtil.wrap("] send from client: "), + ByteBufferUtil.wrap(line), + )) val read = try { client.read(3000) } catch (e: Exception) { diff --git a/ts-web/src/main/kotlin/cn/tursom/web/ResponseHeaderAdapter.kt b/ts-web/src/main/kotlin/cn/tursom/web/ResponseHeaderAdapter.kt index 20a6846..f810492 100644 --- a/ts-web/src/main/kotlin/cn/tursom/web/ResponseHeaderAdapter.kt +++ b/ts-web/src/main/kotlin/cn/tursom/web/ResponseHeaderAdapter.kt @@ -16,7 +16,7 @@ interface ResponseHeaderAdapter { fun cacheControl( cacheControl: CacheControl, maxAge: Int? = null, - mustRevalidate: Boolean = false + mustRevalidate: Boolean = false, ) = setResponseHeader( "Cache-Control", "$cacheControl${ if (maxAge != null && maxAge > 0) ", max-age=$maxAge" else "" @@ -32,7 +32,7 @@ interface ResponseHeaderAdapter { maxAge: Long = 0, domain: String? = null, path: String? = null, - sameSite: SameSite? = null + sameSite: SameSite? = null, ) = addCookie(Cookie(name, value.toString(), maxAge = maxAge, domain = domain, path = path, sameSite = sameSite)) fun setLanguage(language: String) { diff --git a/ts-web/src/main/kotlin/cn/tursom/web/client/HttpClient.kt b/ts-web/src/main/kotlin/cn/tursom/web/client/HttpClient.kt index ff37be9..802d680 100644 --- a/ts-web/src/main/kotlin/cn/tursom/web/client/HttpClient.kt +++ b/ts-web/src/main/kotlin/cn/tursom/web/client/HttpClient.kt @@ -1,5 +1,5 @@ package cn.tursom.web.client -interface HttpClient { - suspend fun request(method: String, url: String): HttpRequest +interface HttpClient> { + suspend fun request(method: String, url: String): T } diff --git a/ts-web/src/main/kotlin/cn/tursom/web/client/HttpClientGet.kt b/ts-web/src/main/kotlin/cn/tursom/web/client/HttpClientGet.kt new file mode 100644 index 0000000..ff59647 --- /dev/null +++ b/ts-web/src/main/kotlin/cn/tursom/web/client/HttpClientGet.kt @@ -0,0 +1,11 @@ +package cn.tursom.web.client + +suspend fun > HttpClient.get( + url: String, + params: Map = emptyMap(), + headers: Map = emptyMap(), +): R { + return request("GET", url) + .addParams(params) + .addHeaders(headers) +} diff --git a/ts-web/src/main/kotlin/cn/tursom/web/client/HttpRequest.kt b/ts-web/src/main/kotlin/cn/tursom/web/client/HttpRequest.kt index f7535ee..01ff91e 100644 --- a/ts-web/src/main/kotlin/cn/tursom/web/client/HttpRequest.kt +++ b/ts-web/src/main/kotlin/cn/tursom/web/client/HttpRequest.kt @@ -1,26 +1,38 @@ package cn.tursom.web.client +import cn.tursom.core.ByteBufferUtil import cn.tursom.core.buffer.ByteBuffer +import cn.tursom.core.uncheckedCast +import kotlinx.coroutines.channels.ReceiveChannel +import java.io.File -interface HttpRequest { +interface HttpRequest> : ParamsSetter { var version: String var method: String var path: String + var paramType: ParamType val params: Map> - fun addParam(key: String, value: String) - fun addParams(params: Map) { + override fun addParams(params: Map): T { params.forEach(::addParam) + return uncheckedCast() } val headers: Iterable> - fun addHeader(key: String, value: Any): HttpRequest - fun addHeaders(headers: Map): HttpRequest { + fun addHeader(key: String, value: Any): T + fun addHeaders(headers: Map): T { headers.forEach(::addHeader) - return this + return uncheckedCast() } - fun body(data: ByteBuffer) + fun body(channel: ReceiveChannel): T + fun body(data: ByteBuffer): T + fun body(bytes: ByteArray): T = body(ByteBufferUtil.wrap(bytes, false)) + fun body(string: String): T = body(string.toByteArray()) + fun body(file: File): T { + body(ByteBufferUtil.wrap(file.readBytes(), false)) + return uncheckedCast() + } suspend fun send(): HttpResponse } diff --git a/ts-web/src/main/kotlin/cn/tursom/web/client/ParamType.kt b/ts-web/src/main/kotlin/cn/tursom/web/client/ParamType.kt new file mode 100644 index 0000000..dec704c --- /dev/null +++ b/ts-web/src/main/kotlin/cn/tursom/web/client/ParamType.kt @@ -0,0 +1,5 @@ +package cn.tursom.web.client + +enum class ParamType { + URL, WEB_FORM +} \ No newline at end of file diff --git a/ts-web/src/main/kotlin/cn/tursom/web/client/ParamsHolder.kt b/ts-web/src/main/kotlin/cn/tursom/web/client/ParamsHolder.kt new file mode 100644 index 0000000..b98e5f0 --- /dev/null +++ b/ts-web/src/main/kotlin/cn/tursom/web/client/ParamsHolder.kt @@ -0,0 +1,24 @@ +package cn.tursom.web.client + +import cn.tursom.core.uncheckedCast +import cn.tursom.core.urlEncode + +interface ParamsHolder : ParamsSetter { + val params: MutableMap> + val paramStr: String + get() = buildString { + params.forEach { (k, list) -> + list.forEach { v -> + if (isNotEmpty()) { + append('&') + } + append("$k=$v") + } + } + } + + override fun addParam(key: String, value: String): T { + params.getOrPut(key.urlEncode) { ArrayList() }.add(value.urlEncode) + return uncheckedCast() + } +} \ No newline at end of file diff --git a/ts-web/src/main/kotlin/cn/tursom/web/client/ParamsSetter.kt b/ts-web/src/main/kotlin/cn/tursom/web/client/ParamsSetter.kt new file mode 100644 index 0000000..f927182 --- /dev/null +++ b/ts-web/src/main/kotlin/cn/tursom/web/client/ParamsSetter.kt @@ -0,0 +1,11 @@ +package cn.tursom.web.client + +import cn.tursom.core.uncheckedCast + +interface ParamsSetter { + fun addParam(key: String, value: String): T + fun addParams(params: Map): T { + params.forEach(::addParam) + return uncheckedCast() + } +} diff --git a/ts-web/src/main/kotlin/cn/tursom/web/mapping/ConnectMapping.kt b/ts-web/src/main/kotlin/cn/tursom/web/mapping/ConnectMapping.kt index 0bace78..46ac878 100644 --- a/ts-web/src/main/kotlin/cn/tursom/web/mapping/ConnectMapping.kt +++ b/ts-web/src/main/kotlin/cn/tursom/web/mapping/ConnectMapping.kt @@ -1,5 +1,5 @@ package cn.tursom.web.mapping annotation class ConnectMapping( - vararg val route: String + vararg val route: String, ) \ No newline at end of file diff --git a/ts-web/src/main/kotlin/cn/tursom/web/mapping/DeleteMapping.kt b/ts-web/src/main/kotlin/cn/tursom/web/mapping/DeleteMapping.kt index 44b2695..26cabae 100644 --- a/ts-web/src/main/kotlin/cn/tursom/web/mapping/DeleteMapping.kt +++ b/ts-web/src/main/kotlin/cn/tursom/web/mapping/DeleteMapping.kt @@ -1,5 +1,5 @@ package cn.tursom.web.mapping annotation class DeleteMapping( - vararg val route: String + vararg val route: String, ) \ No newline at end of file diff --git a/ts-web/src/main/kotlin/cn/tursom/web/mapping/GetMapping.kt b/ts-web/src/main/kotlin/cn/tursom/web/mapping/GetMapping.kt index a75c2be..84f4f3b 100644 --- a/ts-web/src/main/kotlin/cn/tursom/web/mapping/GetMapping.kt +++ b/ts-web/src/main/kotlin/cn/tursom/web/mapping/GetMapping.kt @@ -1,5 +1,5 @@ package cn.tursom.web.mapping annotation class GetMapping( - vararg val route: String + vararg val route: String, ) \ No newline at end of file diff --git a/ts-web/src/main/kotlin/cn/tursom/web/mapping/HeadMapping.kt b/ts-web/src/main/kotlin/cn/tursom/web/mapping/HeadMapping.kt index 6ce01c2..62d8fbb 100644 --- a/ts-web/src/main/kotlin/cn/tursom/web/mapping/HeadMapping.kt +++ b/ts-web/src/main/kotlin/cn/tursom/web/mapping/HeadMapping.kt @@ -1,5 +1,5 @@ package cn.tursom.web.mapping annotation class HeadMapping( - vararg val route: String + vararg val route: String, ) \ No newline at end of file diff --git a/ts-web/src/main/kotlin/cn/tursom/web/mapping/Mapping.kt b/ts-web/src/main/kotlin/cn/tursom/web/mapping/Mapping.kt index 64f3966..f8a94e5 100644 --- a/ts-web/src/main/kotlin/cn/tursom/web/mapping/Mapping.kt +++ b/ts-web/src/main/kotlin/cn/tursom/web/mapping/Mapping.kt @@ -5,5 +5,5 @@ import cn.tursom.web.utils.MethodEnum annotation class Mapping( vararg val route: String, val method: String = "", - val methodEnum: MethodEnum = MethodEnum.NONE + val methodEnum: MethodEnum = MethodEnum.NONE, ) \ No newline at end of file diff --git a/ts-web/src/main/kotlin/cn/tursom/web/mapping/OptionsMapping.kt b/ts-web/src/main/kotlin/cn/tursom/web/mapping/OptionsMapping.kt index 1c33822..562ef47 100644 --- a/ts-web/src/main/kotlin/cn/tursom/web/mapping/OptionsMapping.kt +++ b/ts-web/src/main/kotlin/cn/tursom/web/mapping/OptionsMapping.kt @@ -1,5 +1,5 @@ package cn.tursom.web.mapping annotation class OptionsMapping( - vararg val route: String + vararg val route: String, ) \ No newline at end of file diff --git a/ts-web/src/main/kotlin/cn/tursom/web/mapping/PatchMapping.kt b/ts-web/src/main/kotlin/cn/tursom/web/mapping/PatchMapping.kt index 61285e2..abe2cf1 100644 --- a/ts-web/src/main/kotlin/cn/tursom/web/mapping/PatchMapping.kt +++ b/ts-web/src/main/kotlin/cn/tursom/web/mapping/PatchMapping.kt @@ -1,5 +1,5 @@ package cn.tursom.web.mapping annotation class PatchMapping( - vararg val route: String + vararg val route: String, ) \ No newline at end of file diff --git a/ts-web/src/main/kotlin/cn/tursom/web/mapping/PostMapping.kt b/ts-web/src/main/kotlin/cn/tursom/web/mapping/PostMapping.kt index 906cf67..9a6b0ef 100644 --- a/ts-web/src/main/kotlin/cn/tursom/web/mapping/PostMapping.kt +++ b/ts-web/src/main/kotlin/cn/tursom/web/mapping/PostMapping.kt @@ -1,5 +1,5 @@ package cn.tursom.web.mapping annotation class PostMapping( - vararg val route: String + vararg val route: String, ) \ No newline at end of file diff --git a/ts-web/src/main/kotlin/cn/tursom/web/mapping/PutMapping.kt b/ts-web/src/main/kotlin/cn/tursom/web/mapping/PutMapping.kt index 2cfa1b2..d42a52c 100644 --- a/ts-web/src/main/kotlin/cn/tursom/web/mapping/PutMapping.kt +++ b/ts-web/src/main/kotlin/cn/tursom/web/mapping/PutMapping.kt @@ -1,5 +1,5 @@ package cn.tursom.web.mapping annotation class PutMapping( - vararg val route: String + vararg val route: String, ) \ No newline at end of file diff --git a/ts-web/src/main/kotlin/cn/tursom/web/mapping/TraceMapping.kt b/ts-web/src/main/kotlin/cn/tursom/web/mapping/TraceMapping.kt index f891b1e..8b7e895 100644 --- a/ts-web/src/main/kotlin/cn/tursom/web/mapping/TraceMapping.kt +++ b/ts-web/src/main/kotlin/cn/tursom/web/mapping/TraceMapping.kt @@ -1,5 +1,5 @@ package cn.tursom.web.mapping annotation class TraceMapping( - vararg val route: String + vararg val route: String, ) \ No newline at end of file diff --git a/ts-web/src/main/kotlin/cn/tursom/web/router/MappedMethod.kt b/ts-web/src/main/kotlin/cn/tursom/web/router/MappedMethod.kt index 2c14a18..d173f6a 100644 --- a/ts-web/src/main/kotlin/cn/tursom/web/router/MappedMethod.kt +++ b/ts-web/src/main/kotlin/cn/tursom/web/router/MappedMethod.kt @@ -4,5 +4,5 @@ import java.lang.reflect.Method data class MappedMethod( val method: Method, - val aspect: List + val aspect: List, ) \ No newline at end of file diff --git a/ts-web/src/main/kotlin/cn/tursom/web/router/RoutedHttpHandler.kt b/ts-web/src/main/kotlin/cn/tursom/web/router/RoutedHttpHandler.kt index 7ed35f2..0d5f46a 100644 --- a/ts-web/src/main/kotlin/cn/tursom/web/router/RoutedHttpHandler.kt +++ b/ts-web/src/main/kotlin/cn/tursom/web/router/RoutedHttpHandler.kt @@ -36,7 +36,7 @@ import java.util.concurrent.atomic.AtomicInteger @Suppress("MemberVisibilityCanBePrivate", "unused") open class RoutedHttpHandler( vararg target: Any, - val routerMaker: () -> Router Any?>> = { SimpleRouter() } + val routerMaker: () -> Router Any?>> = { SimpleRouter() }, ) : HttpHandler { protected val router: Router Any?>> = routerMaker() protected val routerMap: HashMap Any?>>> = HashMap() diff --git a/ts-web/src/main/kotlin/cn/tursom/web/router/Router.kt b/ts-web/src/main/kotlin/cn/tursom/web/router/Router.kt index 5f8918e..771239c 100644 --- a/ts-web/src/main/kotlin/cn/tursom/web/router/Router.kt +++ b/ts-web/src/main/kotlin/cn/tursom/web/router/Router.kt @@ -7,7 +7,7 @@ interface Router { operator fun set( route: String, onDestroy: ((oldValue: T) -> Unit)? = null, - value: T? + value: T?, ) = addSubRoute(route, value, onDestroy) operator fun get(route: String): Pair>> diff --git a/ts-web/src/main/kotlin/cn/tursom/web/router/impl/CurlyBracesRouter.kt b/ts-web/src/main/kotlin/cn/tursom/web/router/impl/CurlyBracesRouter.kt index 94bee31..a8ae89a 100644 --- a/ts-web/src/main/kotlin/cn/tursom/web/router/impl/CurlyBracesRouter.kt +++ b/ts-web/src/main/kotlin/cn/tursom/web/router/impl/CurlyBracesRouter.kt @@ -41,7 +41,7 @@ class CurlyBracesRouter : Router { @Suppress("MemberVisibilityCanBePrivate") class RouteContext( val nodeList: List, - var location: Int = 0 + var location: Int = 0, ) { constructor(route: String) : this(route.substringBefore('?').split('/').filter { it.isNotEmpty() }) diff --git a/ts-web/src/main/kotlin/cn/tursom/web/router/impl/FilterRouter.kt b/ts-web/src/main/kotlin/cn/tursom/web/router/impl/FilterRouter.kt index 32f0d3b..5def945 100644 --- a/ts-web/src/main/kotlin/cn/tursom/web/router/impl/FilterRouter.kt +++ b/ts-web/src/main/kotlin/cn/tursom/web/router/impl/FilterRouter.kt @@ -7,7 +7,7 @@ import kotlin.concurrent.read import kotlin.concurrent.write class FilterRouter( - val matchPair: Pair = '{' to '}' + val matchPair: Pair = '{' to '}', ) : Router { companion object { val slashOnceMore = Regex("/+") @@ -52,7 +52,7 @@ class FilterRouter( val route: String, val value: T?, val onDestroy: ((oldValue: T) -> Unit)?, - val matcher: Matcher + val matcher: Matcher, ) class DefaultMatcher(route: String, matchPair: Pair = '{' to '}') : Matcher { diff --git a/ts-web/src/main/kotlin/cn/tursom/web/router/impl/colonnode/AnyColonNode.kt b/ts-web/src/main/kotlin/cn/tursom/web/router/impl/colonnode/AnyColonNode.kt index 0ca9736..732f4c1 100644 --- a/ts-web/src/main/kotlin/cn/tursom/web/router/impl/colonnode/AnyColonNode.kt +++ b/ts-web/src/main/kotlin/cn/tursom/web/router/impl/colonnode/AnyColonNode.kt @@ -3,7 +3,7 @@ package cn.tursom.web.router.impl.colonnode class AnyColonNode( route: List, index: Int, - value: T? = null + value: T? = null, ) : ColonNode(route, index, value) { override fun match(route: List, startIndex: Int) = true to 1 } \ No newline at end of file diff --git a/ts-web/src/main/kotlin/cn/tursom/web/router/impl/colonnode/ColonNode.kt b/ts-web/src/main/kotlin/cn/tursom/web/router/impl/colonnode/ColonNode.kt index 24063a8..52cbc24 100644 --- a/ts-web/src/main/kotlin/cn/tursom/web/router/impl/colonnode/ColonNode.kt +++ b/ts-web/src/main/kotlin/cn/tursom/web/router/impl/colonnode/ColonNode.kt @@ -6,7 +6,7 @@ import cn.tursom.core.binarySearch open class ColonNode( var routeList: List, var index: Int, - override var value: T? = null + override var value: T? = null, ) : IColonNode { val route: String = routeList[index] var wildSubRouter: AnyColonNode? = null @@ -24,7 +24,7 @@ open class ColonNode( open fun match( route: List, - startIndex: Int + startIndex: Int, ): Pair = (route.size > startIndex && route[startIndex] == this.route) to 1 fun addNode(route: List, startIndex: Int, value: T? = null): Int { @@ -95,7 +95,7 @@ open class ColonNode( operator fun get( route: List, startIndex: Int = 0, - routeList: java.util.AbstractList> + routeList: java.util.AbstractList>, ): Pair?, Int> { val r = route[startIndex] if (r.isEmpty()) { @@ -152,13 +152,13 @@ open class ColonNode( operator fun get( route: List, - routeList: java.util.AbstractList> + routeList: java.util.AbstractList>, ) = getRoute(route, 0, routeList) fun getRoute( route: List, startIndex: Int = 0, - routeList: java.util.AbstractList> + routeList: java.util.AbstractList>, ): ColonNode? { var index = startIndex var routeNode = this diff --git a/ts-web/src/main/kotlin/cn/tursom/web/router/impl/colonnode/PlaceholderColonNode.kt b/ts-web/src/main/kotlin/cn/tursom/web/router/impl/colonnode/PlaceholderColonNode.kt index 9c6f0e8..028dc14 100644 --- a/ts-web/src/main/kotlin/cn/tursom/web/router/impl/colonnode/PlaceholderColonNode.kt +++ b/ts-web/src/main/kotlin/cn/tursom/web/router/impl/colonnode/PlaceholderColonNode.kt @@ -4,7 +4,7 @@ class PlaceholderColonNode( route: List, private val startIndex: Int = 0, endIndex: Int = startIndex + route.matchLength(startIndex), - value: T? = null + value: T? = null, ) : ColonNode(route, endIndex - 1, value) { override val placeholderRouterList: ArrayList>? get() = null @@ -23,7 +23,7 @@ class PlaceholderColonNode( override fun match( route: List, - startIndex: Int + startIndex: Int, ): Pair = (size == route.matchLength(startIndex)) to size diff --git a/ts-web/src/main/kotlin/cn/tursom/web/utils/Cookie.kt b/ts-web/src/main/kotlin/cn/tursom/web/utils/Cookie.kt index a5e6622..5e50a16 100644 --- a/ts-web/src/main/kotlin/cn/tursom/web/utils/Cookie.kt +++ b/ts-web/src/main/kotlin/cn/tursom/web/utils/Cookie.kt @@ -6,7 +6,7 @@ class Cookie( var domain: String? = null, var path: String? = null, var maxAge: Long = 0, - var sameSite: SameSite? = null + var sameSite: SameSite? = null, ) { override fun toString(): String { return "$name=$value${ diff --git a/ts-web/src/main/kotlin/cn/tursom/web/utils/EmptyHttpContent.kt b/ts-web/src/main/kotlin/cn/tursom/web/utils/EmptyHttpContent.kt index fce08e0..11c7a89 100644 --- a/ts-web/src/main/kotlin/cn/tursom/web/utils/EmptyHttpContent.kt +++ b/ts-web/src/main/kotlin/cn/tursom/web/utils/EmptyHttpContent.kt @@ -16,7 +16,7 @@ class EmptyHttpContent( override val remoteAddress: SocketAddress = InetSocketAddress(0), override val method: String = "GET", override val cookieMap: Map = mapOf(), - override val requestSendFully: Boolean + override val requestSendFully: Boolean, ) : HttpContent { override fun getHeader(header: String): String? = null override fun getHeaders(header: String): List = listOf() diff --git a/ts-web/ts-web-coroutine/build.gradle.kts b/ts-web/ts-web-coroutine/build.gradle.kts index 09796ec..00e89cb 100644 --- a/ts-web/ts-web-coroutine/build.gradle.kts +++ b/ts-web/ts-web-coroutine/build.gradle.kts @@ -8,6 +8,7 @@ dependencies { implementation(project(":")) implementation(project(":ts-web")) implementation(project(":ts-core")) + implementation(project(":ts-core:ts-coroutine")) implementation(project(":ts-core:ts-buffer")) implementation(project(":ts-core:ts-json")) implementation(group = "org.slf4j", name = "slf4j-api", version = "1.7.32") diff --git a/ts-web/ts-web-coroutine/src/main/kotlin/cn/tursom/web/router/AsyncRoutedHttpHandler.kt b/ts-web/ts-web-coroutine/src/main/kotlin/cn/tursom/web/router/AsyncRoutedHttpHandler.kt index ed8b523..9de7506 100644 --- a/ts-web/ts-web-coroutine/src/main/kotlin/cn/tursom/web/router/AsyncRoutedHttpHandler.kt +++ b/ts-web/ts-web-coroutine/src/main/kotlin/cn/tursom/web/router/AsyncRoutedHttpHandler.kt @@ -1,13 +1,13 @@ package cn.tursom.web.router import cn.tursom.core.allMethodsSequence +import cn.tursom.core.coroutine.GlobalScope import cn.tursom.web.HttpContent import cn.tursom.web.MutableHttpContent import cn.tursom.web.mapping.* import cn.tursom.web.result.* import cn.tursom.web.router.impl.SimpleRouter import cn.tursom.web.utils.ContextTypeEnum -import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch import org.slf4j.LoggerFactory import java.io.ByteArrayOutputStream @@ -22,7 +22,7 @@ import kotlin.reflect.jvm.kotlinFunction open class AsyncRoutedHttpHandler( vararg target: Any, routerMaker: () -> Router Any?>> = { SimpleRouter() }, - val asyncRouterMaker: () -> Router Unit>> = { SimpleRouter() } + val asyncRouterMaker: () -> Router Unit>> = { SimpleRouter() }, ) : RoutedHttpHandler(target = target, routerMaker = routerMaker) { protected val asyncRouter: Router Unit>> = asyncRouterMaker() protected val asyncRouterMap: HashMap Unit>>> = HashMap() @@ -65,7 +65,7 @@ open class AsyncRoutedHttpHandler( fun getAsyncHandler( method: String, - route: String + route: String, ): Pair Unit>?, List>> { val safeRoute = safeRoute(route) val router = getAsyncRouter(method)[safeRoute] @@ -126,7 +126,7 @@ open class AsyncRoutedHttpHandler( obj: Any, method: KCallable<*>, route: String, - router: Router Unit>> + router: Router Unit>>, ) { val doLog = method.doLog router[safeRoute(route)] = if (method.parameters.size == 1) { diff --git a/ts-web/ts-web-netty-client/src/main/kotlin/cn/tursom/web/client/netty/Http2ClientInitializer.kt b/ts-web/ts-web-netty-client/src/main/kotlin/cn/tursom/web/client/netty/Http2ClientInitializer.kt new file mode 100644 index 0000000..677a7f8 --- /dev/null +++ b/ts-web/ts-web-netty-client/src/main/kotlin/cn/tursom/web/client/netty/Http2ClientInitializer.kt @@ -0,0 +1,127 @@ +package cn.tursom.web.client.netty + +import io.netty.buffer.Unpooled +import io.netty.channel.ChannelHandlerContext +import io.netty.channel.ChannelInboundHandlerAdapter +import io.netty.channel.ChannelInitializer +import io.netty.channel.ChannelPipeline +import io.netty.channel.socket.SocketChannel +import io.netty.handler.codec.http.* +import io.netty.handler.codec.http2.* +import io.netty.handler.logging.LogLevel +import io.netty.handler.ssl.ApplicationProtocolNames +import io.netty.handler.ssl.ApplicationProtocolNegotiationHandler +import io.netty.handler.ssl.SslContext +import java.net.InetSocketAddress + +/** + * Configures the client pipeline to support HTTP/2 frames. + */ +class Http2ClientInitializer( + private val sslCtx: SslContext?, + private val maxContentLength: Int, +) : + ChannelInitializer() { + @Throws(Exception::class) + public override fun initChannel(ch: SocketChannel) { + val connection = DefaultHttp2Connection(false) + val connectionHandler = HttpToHttp2ConnectionHandlerBuilder() + .frameListener(DelegatingDecompressorFrameListener( + connection, + InboundHttp2ToHttpAdapterBuilder(connection) + .maxContentLength(maxContentLength) + .propagateSettings(true) + .build())) + .frameLogger(logger) + .connection(connection) + .build() + if (sslCtx != null) { + configureSsl(ch, connectionHandler) + } else { + configureClearText(ch, connectionHandler) + } + } + + + protected fun configureEndOfPipeline(pipeline: ChannelPipeline) { + } + + /** + * Configure the pipeline for TLS NPN negotiation to HTTP/2. + */ + private fun configureSsl( + ch: SocketChannel, + connectionHandler: HttpToHttp2ConnectionHandler, + ) { + val pipeline = ch.pipeline() + // Specify Host in SSLContext New Handler to add TLS SNI Extension + pipeline.addLast(sslCtx!!.newHandler(ch.alloc(), "Http2Client.HOST", 0)) + // We must wait for the handshake to finish and the protocol to be negotiated before configuring + // the HTTP/2 components of the pipeline. + pipeline.addLast(object : ApplicationProtocolNegotiationHandler("") { + override fun configurePipeline(ctx: ChannelHandlerContext, protocol: String) { + if (ApplicationProtocolNames.HTTP_2 == protocol) { + val p = ctx.pipeline() + p.addLast(connectionHandler) + configureEndOfPipeline(p) + return + } + ctx.close() + throw IllegalStateException("unknown protocol: $protocol") + } + }) + } + + /** + * Configure the pipeline for a cleartext upgrade from HTTP to HTTP/2. + */ + private fun configureClearText(ch: SocketChannel, connectionHandler: HttpToHttp2ConnectionHandler) { + val sourceCodec = HttpClientCodec() + val upgradeCodec = Http2ClientUpgradeCodec(connectionHandler) + val upgradeHandler = HttpClientUpgradeHandler(sourceCodec, upgradeCodec, 65536) + ch.pipeline().addLast(sourceCodec, + upgradeHandler, + UpgradeRequestHandler(), + UserEventLogger()) + } + + /** + * A handler that triggers the cleartext upgrade to HTTP/2 by sending an initial HTTP request. + */ + private inner class UpgradeRequestHandler : ChannelInboundHandlerAdapter() { + @Throws(Exception::class) + override fun channelActive(ctx: ChannelHandlerContext) { + val upgradeRequest = DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.GET, "/", Unpooled.EMPTY_BUFFER) + + // Set HOST header as the remote peer may require it. + val remote = ctx.channel().remoteAddress() as InetSocketAddress + var hostString = remote.hostString + if (hostString == null) { + hostString = remote.address.hostAddress + } + upgradeRequest.headers()[HttpHeaderNames.HOST] = hostString + ':' + remote.port + ctx.writeAndFlush(upgradeRequest) + ctx.fireChannelActive() + + // Done with this handler, remove it from the pipeline. + ctx.pipeline().remove(this) + configureEndOfPipeline(ctx.pipeline()) + } + } + + /** + * Class that logs any User Events triggered on this channel. + */ + private class UserEventLogger : ChannelInboundHandlerAdapter() { + @Throws(Exception::class) + override fun userEventTriggered(ctx: ChannelHandlerContext, evt: Any) { + println("User Event Triggered: $evt") + ctx.fireUserEventTriggered(evt) + } + } + + companion object { + val logger = Http2FrameLogger(LogLevel.INFO, + Http2ClientInitializer::class.java) + } +} \ No newline at end of file diff --git a/ts-web/ts-web-netty-client/src/main/kotlin/cn/tursom/web/client/netty/HttpConnectionPool.kt b/ts-web/ts-web-netty-client/src/main/kotlin/cn/tursom/web/client/netty/HttpConnectionPool.kt index 6094388..cb66ee0 100644 --- a/ts-web/ts-web-netty-client/src/main/kotlin/cn/tursom/web/client/netty/HttpConnectionPool.kt +++ b/ts-web/ts-web-netty-client/src/main/kotlin/cn/tursom/web/client/netty/HttpConnectionPool.kt @@ -1,7 +1,9 @@ package cn.tursom.web.client.netty +import cn.tursom.core.seconds import io.netty.handler.timeout.WriteTimeoutHandler import kotlinx.coroutines.channels.Channel +import kotlinx.coroutines.delay import java.util.concurrent.ConcurrentHashMap import java.util.concurrent.atomic.AtomicInteger @@ -21,10 +23,10 @@ class HttpConnectionPool( } private val group = HttpExecutor.group(host, port, ssl) { - it.attr(NettyHttpResultResume.countKey).set(conn) it.pipeline() .addLast(NettyHttpResultResume) .addLast(WriteTimeoutHandler(60)) + it.attr(NettyHttpResultResume.countKey).set(conn) } private val pool = Channel(maxConn) private val conn = AtomicInteger() @@ -36,6 +38,7 @@ class HttpConnectionPool( conn.decrementAndGet() pool.receive() } + delay(10.seconds().toMillis()) val result = try { handler(client) } catch (e: Exception) { diff --git a/ts-web/ts-web-netty-client/src/main/kotlin/cn/tursom/web/client/netty/HttpExecutor.kt b/ts-web/ts-web-netty-client/src/main/kotlin/cn/tursom/web/client/netty/HttpExecutor.kt index 488651c..be4c4b8 100644 --- a/ts-web/ts-web-netty-client/src/main/kotlin/cn/tursom/web/client/netty/HttpExecutor.kt +++ b/ts-web/ts-web-netty-client/src/main/kotlin/cn/tursom/web/client/netty/HttpExecutor.kt @@ -1,18 +1,33 @@ package cn.tursom.web.client.netty +import cn.tursom.core.seconds import io.netty.bootstrap.Bootstrap import io.netty.channel.ChannelHandlerContext import io.netty.channel.ChannelInitializer +import io.netty.channel.SimpleChannelInboundHandler import io.netty.channel.nio.NioEventLoopGroup import io.netty.channel.socket.SocketChannel import io.netty.channel.socket.nio.NioSocketChannel import io.netty.handler.codec.http.HttpClientCodec import io.netty.handler.codec.http.HttpContentDecompressor -import io.netty.handler.ssl.SslContextBuilder +import io.netty.handler.codec.http2.* +import io.netty.handler.logging.LogLevel +import io.netty.handler.logging.LoggingHandler +import io.netty.handler.ssl.* import io.netty.handler.ssl.util.InsecureTrustManagerFactory +import kotlinx.coroutines.delay + object HttpExecutor { - private val group = NioEventLoopGroup() + private val sslProvider = when { + SslProvider.isAlpnSupported(SslProvider.OPENSSL) -> SslProvider.OPENSSL + else -> SslProvider.JDK + } + private val group = NioEventLoopGroup { + val thread = Thread(it) + thread.isDaemon = true + thread + } fun group( host: String, @@ -22,7 +37,18 @@ object HttpExecutor { ): suspend () -> NettyHttpConnection { val sslCtx = if (ssl) { SslContextBuilder.forClient() - .trustManager(InsecureTrustManagerFactory.INSTANCE).build() + .sslProvider(sslProvider) + .ciphers(Http2SecurityUtil.CIPHERS, SupportedCipherSuiteFilter.INSTANCE) + .trustManager(InsecureTrustManagerFactory.INSTANCE) + .applicationProtocolConfig(ApplicationProtocolConfig( + ApplicationProtocolConfig.Protocol.ALPN, + // NO_ADVERTISE is currently the only mode supported by both OpenSsl and JDK providers. + ApplicationProtocolConfig.SelectorFailureBehavior.NO_ADVERTISE, + // ACCEPT is currently the only mode supported by both OpenSsl and JDK providers. + ApplicationProtocolConfig.SelectedListenerFailureBehavior.ACCEPT, + ApplicationProtocolNames.HTTP_2, ApplicationProtocolNames.HTTP_1_1 + )) + .build() } else { null } @@ -34,16 +60,23 @@ object HttpExecutor { ch.pipeline().apply { if (sslCtx != null) { addLast(sslCtx.newHandler(ch.alloc(), host, port)) + addLast(Http2FrameCodecBuilder.forClient() + // unnecessary + //.initialSettings(Http2Settings.defaultSettings()) + .build()) } + addLast(LoggingHandler(LogLevel.INFO)) addLast(HttpClientCodec()) addLast(HttpContentDecompressor()) + addLast(Http2MultiplexHandler(object : SimpleChannelInboundHandler() { + override fun channelRead0(ctx: ChannelHandlerContext, msg: Any) { + // 处理inbound streams + println("Http2MultiplexHandler接收到消息: $msg") + } + })) } initChannel(ch) } - - override fun exceptionCaught(ctx: ChannelHandlerContext?, cause: Throwable?) { - super.exceptionCaught(ctx, cause) - } }) return { val channelFuture = bootstrap.connect(host, port) @@ -65,3 +98,25 @@ object HttpExecutor { override val channel: SocketChannel, ) : NettyHttpConnection } + +suspend fun main() { + val group = HttpExecutor.group("api.vc.bilibili.com", 443, true) + val connection = group() + val bootstrap = Http2StreamChannelBootstrap(connection.channel) + val streamChannel = bootstrap.open().syncUninterruptibly().now + //val streamFrameResponseHandler = Http2ClientStreamFrameHandler() + streamChannel.pipeline() + .addLast(object : SimpleChannelInboundHandler() { + override fun channelRead0(ctx: ChannelHandlerContext, msg: Any) { + // 处理inbound streams + println("Http2MultiplexHandler接收到消息: $msg") + } + }) + val headers = DefaultHttp2Headers() + headers.method("GET") + headers.path("/dynamic_svr/v1/dynamic_svr/dynamic_history") + headers.scheme("https") + val headersFrame = DefaultHttp2HeadersFrame(headers, true) + streamChannel.writeAndFlush(headersFrame); + delay(10.seconds().toMillis()) +} diff --git a/ts-web/ts-web-netty-client/src/main/kotlin/cn/tursom/web/client/netty/NettyHttpClient.kt b/ts-web/ts-web-netty-client/src/main/kotlin/cn/tursom/web/client/netty/NettyHttpClient.kt index 4b909d0..b3d29eb 100644 --- a/ts-web/ts-web-netty-client/src/main/kotlin/cn/tursom/web/client/netty/NettyHttpClient.kt +++ b/ts-web/ts-web-netty-client/src/main/kotlin/cn/tursom/web/client/netty/NettyHttpClient.kt @@ -1,11 +1,10 @@ package cn.tursom.web.client.netty import cn.tursom.web.client.HttpClient -import cn.tursom.web.client.HttpRequest import java.net.URI -open class NettyHttpClient : HttpClient { - override suspend fun request(method: String, url: String): HttpRequest { +open class NettyHttpClient : HttpClient { + override suspend fun request(method: String, url: String): NettyHttpRequest { val uri = URI.create(url) val port = if (uri.port < 0) { when (uri.scheme ?: "http") { diff --git a/ts-web/ts-web-netty-client/src/main/kotlin/cn/tursom/web/client/netty/NettyHttpConnection.kt b/ts-web/ts-web-netty-client/src/main/kotlin/cn/tursom/web/client/netty/NettyHttpConnection.kt index 356a0dc..ee62d3f 100644 --- a/ts-web/ts-web-netty-client/src/main/kotlin/cn/tursom/web/client/netty/NettyHttpConnection.kt +++ b/ts-web/ts-web-netty-client/src/main/kotlin/cn/tursom/web/client/netty/NettyHttpConnection.kt @@ -1,18 +1,52 @@ package cn.tursom.web.client.netty +import cn.tursom.core.buffer.ByteBuffer +import cn.tursom.core.buffer.impl.NettyByteBuffer +import cn.tursom.core.coroutine.GlobalScope import io.netty.channel.socket.SocketChannel -import io.netty.handler.codec.http.FullHttpRequest +import io.netty.handler.codec.http.DefaultHttpContent import io.netty.handler.codec.http.HttpObject +import io.netty.handler.codec.http.HttpRequest import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.channels.ReceiveChannel +import kotlinx.coroutines.flow.receiveAsFlow +import kotlinx.coroutines.launch interface NettyHttpConnection { + companion object { + suspend fun request( + pool: HttpConnectionPool, + request: HttpRequest, + bodyChannel: ReceiveChannel? = null, + ): ReceiveChannel { + val ktChannel = Channel(Channel.UNLIMITED) + if (bodyChannel != null) GlobalScope.launch { + pool.useConnection { conn -> + conn.request(request, bodyChannel, ktChannel) + } + } else pool.useConnection { conn -> + conn.request(request, bodyChannel, ktChannel) + } + return ktChannel + } + } + val channel: SocketChannel - suspend fun request(request: FullHttpRequest): ReceiveChannel { - val ktChannel = Channel(Channel.UNLIMITED) + suspend fun request( + request: HttpRequest, + bodyChannel: ReceiveChannel? = null, + ktChannel: Channel = Channel(Channel.UNLIMITED), + ): ReceiveChannel { channel.attr(NettyHttpResultResume.recvChannelKey).set(ktChannel) channel.writeAndFlush(request) + bodyChannel?.receiveAsFlow()?.collect { + send(it) + } return ktChannel } + + fun send(byteBuffer: ByteBuffer) { + channel.writeAndFlush(DefaultHttpContent(NettyByteBuffer.toByteBuf(byteBuffer))) + } } \ No newline at end of file diff --git a/ts-web/ts-web-netty-client/src/main/kotlin/cn/tursom/web/client/netty/NettyHttpRequest.kt b/ts-web/ts-web-netty-client/src/main/kotlin/cn/tursom/web/client/netty/NettyHttpRequest.kt index a260292..de5d3f2 100644 --- a/ts-web/ts-web-netty-client/src/main/kotlin/cn/tursom/web/client/netty/NettyHttpRequest.kt +++ b/ts-web/ts-web-netty-client/src/main/kotlin/cn/tursom/web/client/netty/NettyHttpRequest.kt @@ -1,25 +1,44 @@ package cn.tursom.web.client.netty +import cn.tursom.core.AsyncFile +import cn.tursom.core.Unsafe.setField import cn.tursom.core.buffer.ByteBuffer import cn.tursom.core.buffer.impl.NettyByteBuffer import cn.tursom.core.toStartWith import cn.tursom.log.impl.Slf4jImpl import cn.tursom.web.client.HttpRequest import cn.tursom.web.client.HttpResponse -import io.netty.buffer.Unpooled -import io.netty.handler.codec.http.DefaultFullHttpRequest -import io.netty.handler.codec.http.FullHttpRequest -import io.netty.handler.codec.http.HttpMethod -import io.netty.handler.codec.http.HttpVersion +import cn.tursom.web.client.ParamType +import cn.tursom.web.client.ParamsHolder +import io.netty.buffer.ByteBuf +import io.netty.handler.codec.http.* +import kotlinx.coroutines.channels.ReceiveChannel +import java.io.File +@Suppress("MemberVisibilityCanBePrivate") class NettyHttpRequest( private val pool: HttpConnectionPool, val scheme: String, val host: String, val port: Int, path: String, -) : HttpRequest { - companion object : Slf4jImpl() +) : HttpRequest, ParamsHolder { + companion object : Slf4jImpl() { + val http2 = HttpVersion.valueOf("HTTP/2.0") + private fun HttpHeaders.defaultContentType(contentType: CharSequence) { + defaultHeader(HttpHeaderNames.CONTENT_TYPE, contentType) + } + + private fun HttpHeaders.defaultHeader(header: CharSequence, contentType: CharSequence) { + if (this[header] == null) { + this[header] = contentType + } + } + + init { + http2.setField("bytes", "h2".toByteArray()) + } + } private val portStr: String get() = if (port <= 0) { @@ -28,12 +47,21 @@ class NettyHttpRequest( ":$port" } - private var request: FullHttpRequest = DefaultFullHttpRequest(HttpVersion.HTTP_1_0, HttpMethod.GET, "") + private var request: DefaultHttpRequest = DefaultHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.GET, "") override var version: String get() = request.protocolVersion().text() set(value) { - request.protocolVersion = HttpVersion.valueOf(value) + request.protocolVersion = if (value == "h2") { + http2 + } else { + HttpVersion.valueOf(value) + } + } + var httpVersion: HttpVersion + get() = request.protocolVersion() + set(value) { + request.protocolVersion = value } override var method: String @@ -46,50 +74,76 @@ class NettyHttpRequest( set(value) { field = value.toStartWith('/') } + override var paramType: ParamType = if (method in setOf("POST", "PUT", "PATCH")) ParamType.WEB_FORM else ParamType.URL - override val params = HashMap>().withDefault { ArrayList() } + override val params = HashMap>() - override fun addParam(key: String, value: String) { - params[key]!!.add(value) - } - - override val headers: Iterable> + override val headers: HttpHeaders get() = request.headers() override fun addHeader(key: String, value: Any): NettyHttpRequest { - request.headers().add(key, value) + request.headers().add(key, value.toString()) return this } - override fun body(data: ByteBuffer) { - val byteBuf = if (data is NettyByteBuffer) { - data.byteBuf - } else { - Unpooled.wrappedBuffer(data.getBytes()) - } - request = request.replace(byteBuf) + override fun addHeaders(headers: Map): NettyHttpRequest { + super.addHeaders(headers) + return this + } + + private var bodyChannel: ReceiveChannel? = null + private var body: ByteBuf? = null + override fun body(channel: ReceiveChannel): NettyHttpRequest { + bodyChannel = channel + return this + } + + override fun body(data: ByteBuffer): NettyHttpRequest { + body = NettyByteBuffer.toByteBuf(data) + return this + } + + override fun body(file: File): NettyHttpRequest { + // TODO + headers.defaultContentType("") + AsyncFile(file.path) + return super.body(file) + } + + override fun body(string: String): NettyHttpRequest { + headers.defaultContentType("text/plain;charset=utf-8") + return super.body(string) } override suspend fun send(): HttpResponse { + val paramStr = paramStr request.uri = buildString { - append("$scheme://$host$portStr$path") - append(buildString { - params.forEach { (key, params) -> - if (isEmpty()) { - append("?") - } - params.forEach { param -> - if (isNotEmpty()) { - append('&') - } - append("$key=$param") - } + //append("$scheme://$host$portStr$path") + append(path) + if (paramType == ParamType.URL) { + if (paramStr.isNotEmpty()) { + append("&") + append(paramStr) } - }) + } } - val receiveChannel = pool.useConnection { - it.request(request) + if (paramType == ParamType.WEB_FORM && bodyChannel == null && body == null) { + headers.defaultContentType("application/x-www-form-urlencoded") + body(paramStr) } + headers["Host"] = host + if (headers["Accept-Encoding"] == null) { + headers["Accept-Encoding"] = "gzip, deflate, br" + } + if (request.protocolVersion() != HttpVersion.HTTP_1_0) { + headers["Connection"] = HttpHeaderValues.KEEP_ALIVE + } + if (bodyChannel == null && body != null) { + request = DefaultFullHttpRequest( + request.protocolVersion(), request.method(), request.uri(), + body, request.headers(), DefaultHttpHeaders(true)) + } + val receiveChannel = NettyHttpConnection.request(pool, request, bodyChannel) val httpResponse = receiveChannel.receive() as io.netty.handler.codec.http.HttpResponse return NettyHttpResponse(httpResponse, receiveChannel) } diff --git a/ts-web/ts-web-netty-client/src/test/kotlin/cn/tursom/web/client/netty/NettyHttpClientTest.kt b/ts-web/ts-web-netty-client/src/test/kotlin/cn/tursom/web/client/netty/NettyHttpClientTest.kt index fd6ea6d..485b3a6 100644 --- a/ts-web/ts-web-netty-client/src/test/kotlin/cn/tursom/web/client/netty/NettyHttpClientTest.kt +++ b/ts-web/ts-web-netty-client/src/test/kotlin/cn/tursom/web/client/netty/NettyHttpClientTest.kt @@ -17,4 +17,47 @@ internal class NettyHttpClientTest { println(response.body.string()) } } + + @Test + fun testH2() { + runBlocking { + testH2suspend() + } + } + + suspend fun testH2suspend() { + val client = NettyHttpClient() + //client.get("https://www.baidu.com/").send() + //return + val request = client.request( + "GET", + "https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/dynamic_history", + ).addParams(mapOf( + "type" to "8", + "from" to "", + "platform" to "web", + "uid" to "1837471", + "offset_dynamic_id" to "645924525475627026", + )).addHeaders(mapOf( + //"Accept" to "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9", + //"Accept-Encoding" to "gzip, deflate, br", + //"Accept-Language" to "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7,ja;q=0.6", + //"Cache-Control" to "max-age=0", + //"Sec-Ch-Ua" to "\" Not A;Brand\";v=\"99\", \"Chromium\";v=\"100\", \"Google Chrome\";v=\"100\"", + //"Sec-Ch-Ua-Mobile" to "?0", + //"Sec-Ch-Ua-Platform" to "\"Windows\"", + //"Sec-Fetch-Dest" to "document", + //"Sec-Fetch-Mode" to "navigate", + //"Sec-Fetch-Site" to "none", + //"Sec-Fetch-User" to "?1", + //"Upgrade-Insecure-Requests" to "1", + "Cookie" to "l=v; buvid3=13A9BD44-479F-4FC1-AA29-8EB2C3206B6674612infoc; i-wanna-go-back=-1; _uuid=9B77BDF4-773C-2101D-5F10F-E4665164DFE674981infoc; buvid4=8DD0C63B-7F1C-D4DC-AC8D-4CE99C5200C075805-022040411-FRmBv7s/ltkIAOlM97A+aQ%3D%3D; sid=it9v6m7q; buvid_fp_plain=undefined; DedeUserID=1837471; DedeUserID__ckMd5=5678a12a5b7d1691; SESSDATA=48f843c6%2C1664594400%2C9e2b9*41; bili_jct=02bad9065c947f90286a1bcd937d7ea8; b_ut=5; buvid_fp=2f9e2646e762e56e33e0c37ee7338300; LIVE_BUVID=AUTO3116490424152121; blackside_state=0; CURRENT_BLACKGAP=0; rpdid=|(umRk|JmYJm0J'uYRm|Rk)JR; nostalgia_conf=-1; CURRENT_QUALITY=112; fingerprint=2f9e2646e762e56e33e0c37ee7338300; fingerprint3=4d4eeb83e1c12babb9274ebc0470c3bb; innersign=1; CURRENT_FNVAL=4048; bsource=share_source_qqchat; bp_video_offset_1837471=647420312255725600; PVID=6; bp_t_offset_1837471=647481829084889088; b_lsid=4B24DCFF_18013AB5E6E", + "Origin" to "https://t.bilibili.com", + "Referer" to "https://t.bilibili.com/", + "User-Agent" to "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36", + )) + request.version = "h2" + val response = request.send() + println(response.body.string()) + } } \ No newline at end of file diff --git a/ts-web/ts-web-netty/src/main/kotlin/cn/tursom/web/netty/NettyChunkedByteBuffer.kt b/ts-web/ts-web-netty/src/main/kotlin/cn/tursom/web/netty/NettyChunkedByteBuffer.kt index a9e457c..86c4638 100644 --- a/ts-web/ts-web-netty/src/main/kotlin/cn/tursom/web/netty/NettyChunkedByteBuffer.kt +++ b/ts-web/ts-web-netty/src/main/kotlin/cn/tursom/web/netty/NettyChunkedByteBuffer.kt @@ -11,7 +11,7 @@ import io.netty.handler.stream.ChunkedInput import org.slf4j.LoggerFactory class NettyChunkedByteBuffer( - private val bufList: Iterable<() -> ByteBuffer> + private val bufList: Iterable<() -> ByteBuffer>, ) : ChunkedInput { constructor(vararg bufList: ByteBuffer) : this(bufList.map { { it } } as Iterable<() -> ByteBuffer>) constructor(vararg bufList: () -> ByteBuffer) : this(bufList.asList()) diff --git a/ts-web/ts-web-netty/src/main/kotlin/cn/tursom/web/netty/NettyExceptionContent.kt b/ts-web/ts-web-netty/src/main/kotlin/cn/tursom/web/netty/NettyExceptionContent.kt index 7745b8b..cd1828a 100644 --- a/ts-web/ts-web-netty/src/main/kotlin/cn/tursom/web/netty/NettyExceptionContent.kt +++ b/ts-web/ts-web-netty/src/main/kotlin/cn/tursom/web/netty/NettyExceptionContent.kt @@ -14,7 +14,7 @@ import org.slf4j.LoggerFactory @Suppress("MemberVisibilityCanBePrivate") class NettyExceptionContent( val ctx: ChannelHandlerContext, - override val cause: Throwable + override val cause: Throwable, ) : ExceptionContent, NettyResponseHeaderAdapter() { override var finished: Boolean = false val responseBodyBuf: CompositeByteBuf = ctx.alloc().compositeBuffer()!! diff --git a/ts-web/ts-web-netty/src/main/kotlin/cn/tursom/web/netty/NettyHttpContent.kt b/ts-web/ts-web-netty/src/main/kotlin/cn/tursom/web/netty/NettyHttpContent.kt index a467a60..2ed076e 100644 --- a/ts-web/ts-web-netty/src/main/kotlin/cn/tursom/web/netty/NettyHttpContent.kt +++ b/ts-web/ts-web-netty/src/main/kotlin/cn/tursom/web/netty/NettyHttpContent.kt @@ -22,7 +22,7 @@ import kotlin.collections.set @Suppress("MemberVisibilityCanBePrivate", "unused") open class NettyHttpContent( val ctx: ChannelHandlerContext, - val request: HttpRequest + val request: HttpRequest, ) : MutableHttpContent, NettyResponseHeaderAdapter() { val decoder = HttpPostRequestDecoder(request) override var requestSendFully: Boolean = false diff --git a/ts-web/ts-web-netty/src/main/kotlin/cn/tursom/web/netty/NettyHttpHandler.kt b/ts-web/ts-web-netty/src/main/kotlin/cn/tursom/web/netty/NettyHttpHandler.kt index 58eefb8..54077a1 100644 --- a/ts-web/ts-web-netty/src/main/kotlin/cn/tursom/web/netty/NettyHttpHandler.kt +++ b/ts-web/ts-web-netty/src/main/kotlin/cn/tursom/web/netty/NettyHttpHandler.kt @@ -11,7 +11,7 @@ import org.slf4j.LoggerFactory @ChannelHandler.Sharable class NettyHttpHandler( - private val handler: HttpHandler + private val handler: HttpHandler, ) : SimpleChannelInboundHandler() { override fun channelActive(ctx: ChannelHandlerContext) { handler.newRequest() diff --git a/ts-web/ts-web-netty/src/main/kotlin/cn/tursom/web/netty/NettyHttpObjectHandler.kt b/ts-web/ts-web-netty/src/main/kotlin/cn/tursom/web/netty/NettyHttpObjectHandler.kt index aa614b0..79e8045 100644 --- a/ts-web/ts-web-netty/src/main/kotlin/cn/tursom/web/netty/NettyHttpObjectHandler.kt +++ b/ts-web/ts-web-netty/src/main/kotlin/cn/tursom/web/netty/NettyHttpObjectHandler.kt @@ -11,7 +11,7 @@ import io.netty.util.AttributeKey @ChannelHandler.Sharable class NettyHttpObjectHandler( - private val handler: HttpHandler + private val handler: HttpHandler, ) : SimpleChannelInboundHandler() { companion object { private val context = AttributeKey.newInstance("NettyHttpContent") diff --git a/ts-web/ts-web-netty/src/main/kotlin/cn/tursom/web/netty/NettyWebSocketContent.kt b/ts-web/ts-web-netty/src/main/kotlin/cn/tursom/web/netty/NettyWebSocketContent.kt index d39ad0d..b34b477 100644 --- a/ts-web/ts-web-netty/src/main/kotlin/cn/tursom/web/netty/NettyWebSocketContent.kt +++ b/ts-web/ts-web-netty/src/main/kotlin/cn/tursom/web/netty/NettyWebSocketContent.kt @@ -13,7 +13,7 @@ import org.slf4j.LoggerFactory import java.net.SocketAddress class NettyWebSocketContent( - val channel: Channel + val channel: Channel, ) : WebSocketContent { override val remoteAddress: SocketAddress get() = channel.remoteAddress() override fun writeText(buffer: ByteBuffer) { diff --git a/ts-web/ts-web-netty/src/main/kotlin/cn/tursom/web/netty/NettyWebSocketHandler.kt b/ts-web/ts-web-netty/src/main/kotlin/cn/tursom/web/netty/NettyWebSocketHandler.kt index 176a44f..622fc4b 100644 --- a/ts-web/ts-web-netty/src/main/kotlin/cn/tursom/web/netty/NettyWebSocketHandler.kt +++ b/ts-web/ts-web-netty/src/main/kotlin/cn/tursom/web/netty/NettyWebSocketHandler.kt @@ -11,7 +11,7 @@ import io.netty.handler.codec.http.websocketx.WebSocketFrame class NettyWebSocketHandler( channel: Channel, - private val handler: WebSocketHandler + private val handler: WebSocketHandler, ) : SimpleChannelInboundHandler() { private val webSocketContext = NettyWebSocketContent(channel) diff --git a/ts-web/ts-web-netty/src/main/kotlin/cn/tursom/web/netty/ParamParser.kt b/ts-web/ts-web-netty/src/main/kotlin/cn/tursom/web/netty/ParamParser.kt index db61631..3e84fbc 100644 --- a/ts-web/ts-web-netty/src/main/kotlin/cn/tursom/web/netty/ParamParser.kt +++ b/ts-web/ts-web-netty/src/main/kotlin/cn/tursom/web/netty/ParamParser.kt @@ -34,7 +34,7 @@ object ParamParser { fun parse( req: HttpRequest, body: HttpContent, - paramMap: MutableMap> + paramMap: MutableMap>, ): MutableMap> { try { val decoder = HttpPostRequestDecoder(req) diff --git a/ts-web/ts-web-okhttp/build.gradle.kts b/ts-web/ts-web-okhttp/build.gradle.kts index 96b15fb..fb47428 100644 --- a/ts-web/ts-web-okhttp/build.gradle.kts +++ b/ts-web/ts-web-okhttp/build.gradle.kts @@ -14,6 +14,7 @@ dependencies { api(group = "io.netty", name = "netty-all", version = "4.1.72.Final") api(group = "org.slf4j", name = "slf4j-api", version = "1.7.32") testApi(group = "junit", name = "junit", version = "4.13.2") + testApi(group = "com.squareup.okhttp3", name = "logging-interceptor", version = "4.9.3") } diff --git a/ts-web/ts-web-okhttp/src/main/kotlin/cn/tursom/web/client/okhttp/OkhttpHttpClient.kt b/ts-web/ts-web-okhttp/src/main/kotlin/cn/tursom/web/client/okhttp/OkhttpHttpClient.kt index 6cfabc0..ce0c655 100644 --- a/ts-web/ts-web-okhttp/src/main/kotlin/cn/tursom/web/client/okhttp/OkhttpHttpClient.kt +++ b/ts-web/ts-web-okhttp/src/main/kotlin/cn/tursom/web/client/okhttp/OkhttpHttpClient.kt @@ -8,7 +8,7 @@ import java.net.SocketAddress class OkhttpHttpClient( private val client: OkHttpClient, -) : HttpClient { +) : HttpClient { companion object { val direct = OkhttpHttpClient(OkHttpClient().newBuilder() .retryOnConnectionFailure(true) diff --git a/ts-web/ts-web-okhttp/src/main/kotlin/cn/tursom/web/client/okhttp/OkhttpHttpRequest.kt b/ts-web/ts-web-okhttp/src/main/kotlin/cn/tursom/web/client/okhttp/OkhttpHttpRequest.kt index 5513222..7747427 100644 --- a/ts-web/ts-web-okhttp/src/main/kotlin/cn/tursom/web/client/okhttp/OkhttpHttpRequest.kt +++ b/ts-web/ts-web-okhttp/src/main/kotlin/cn/tursom/web/client/okhttp/OkhttpHttpRequest.kt @@ -2,8 +2,14 @@ package cn.tursom.web.client.okhttp import cn.tursom.core.buffer.ByteBuffer import cn.tursom.web.client.HttpRequest +import cn.tursom.web.client.ParamType +import cn.tursom.web.client.ParamsHolder +import kotlinx.coroutines.channels.ReceiveChannel import okhttp3.* +import okhttp3.MediaType.Companion.toMediaTypeOrNull +import okhttp3.RequestBody.Companion.asRequestBody import okhttp3.RequestBody.Companion.toRequestBody +import java.io.File import java.io.IOException import java.net.URL import kotlin.coroutines.resume @@ -14,7 +20,7 @@ class OkhttpHttpRequest( private val client: OkHttpClient, override var method: String, url: String, -) : HttpRequest { +) : HttpRequest, ParamsHolder { override var version: String = "" private val protocol: String private val host: String @@ -27,9 +33,10 @@ class OkhttpHttpRequest( "/$value" } } + override var paramType: ParamType = if (method in setOf("POST", "PUT", "PATCH")) ParamType.WEB_FORM else ParamType.URL override val params = HashMap>() private var ref: String? - private var body: ByteBuffer? = null + private var body: RequestBody? = null init { val url = URL(url) @@ -56,22 +63,6 @@ class OkhttpHttpRequest( ":$port" } - private val paramStr: String - get() = buildString { - params.forEach { (k, list) -> - list.forEach { v -> - if (isNotEmpty()) { - append('&') - } - append("$k=$v") - } - } - } - - override fun addParam(key: String, value: String) { - params.getOrPut(key) { ArrayList() }.add(value) - } - data class Header(override val key: String, override val value: String) : Map.Entry override val headers = ArrayList
() @@ -81,17 +72,28 @@ class OkhttpHttpRequest( return this } - override fun body(data: ByteBuffer) { - body = data + override fun body(channel: ReceiveChannel) = throw UnsupportedOperationException() + override fun body(data: ByteBuffer) = body(data.getBytes()) + override fun body(bytes: ByteArray) = body(bytes.toRequestBody()) + override fun body(string: String) = body(string.toRequestBody("text/plain;charset=utf-8".toMediaTypeOrNull())) + override fun body(file: File) = body(file.asRequestBody("application/octet-stream".toMediaTypeOrNull())) + + fun body(body: RequestBody): OkhttpHttpRequest { + this.body = body + return this } override suspend fun send(): OkhttpHttpResponse { + val paramStr = paramStr + var body = body + if (body == null && paramType == ParamType.WEB_FORM) { + body = paramStr.toByteArray().toRequestBody() + } val builder = Request.Builder() - .method(method, body?.getBytes()?.toRequestBody()) + .method(method, body) .url(buildString { append("$protocol://$host$portStr$path") - val paramStr = paramStr - if (paramStr.isNotEmpty()) { + if (paramType == ParamType.URL && paramStr.isNotEmpty()) { append("?$paramStr") } if (ref != null) { @@ -101,7 +103,7 @@ class OkhttpHttpRequest( headers.forEach { (key, value) -> builder.addHeader(key, value) } - return OkhttpHttpResponse(suspendCoroutine { + return OkhttpHttpResponse(suspendCoroutine { client.newCall(builder.build()).enqueue(object : Callback { override fun onFailure(call: Call, e: IOException) { it.resumeWithException(e) diff --git a/ts-web/ts-web-okhttp/src/test/kotlin/cn/tursom/web/client/okhttp/OkhttpHttpClientTest.kt b/ts-web/ts-web-okhttp/src/test/kotlin/cn/tursom/web/client/okhttp/OkhttpHttpClientTest.kt index 499952d..170f7da 100644 --- a/ts-web/ts-web-okhttp/src/test/kotlin/cn/tursom/web/client/okhttp/OkhttpHttpClientTest.kt +++ b/ts-web/ts-web-okhttp/src/test/kotlin/cn/tursom/web/client/okhttp/OkhttpHttpClientTest.kt @@ -1,18 +1,57 @@ package cn.tursom.web.client.okhttp +import cn.tursom.log.impl.Slf4jImpl import kotlinx.coroutines.runBlocking +import okhttp3.OkHttpClient +import okhttp3.logging.HttpLoggingInterceptor import org.junit.Test +import java.util.concurrent.TimeUnit + + +private fun okhttpclient(): OkHttpClient { + val logInterceptor = HttpLoggingInterceptor(HttpLogger()) + logInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY) + return OkHttpClient.Builder() + .connectTimeout(15, TimeUnit.SECONDS) + .addNetworkInterceptor(logInterceptor) + .build() +} internal class OkhttpHttpClientTest { - private val client = OkhttpHttpClient.default + private val client = OkhttpHttpClient(okhttpclient()) @Test fun request() { runBlocking { - val response = client.request("GET", "https://cdn.segmentfault.com/r-e032f7ee/umi.js") - .addHeader("accept-encoding", "gzip, deflate, br") - .send() + val response = client.request( + "GET", + "https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/dynamic_history", + ).addParams(mapOf( + "type" to "8", + "from" to "", + "platform" to "web", + "uid" to "1837471", + "offset_dynamic_id" to "645924525475627026", + )).addHeaders(mapOf( + "Cookie" to "l=v; buvid3=13A9BD44-479F-4FC1-AA29-8EB2C3206B6674612infoc; i-wanna-go-back=-1; _uuid=9B77BDF4-773C-2101D-5F10F-E4665164DFE674981infoc; buvid4=8DD0C63B-7F1C-D4DC-AC8D-4CE99C5200C075805-022040411-FRmBv7s/ltkIAOlM97A+aQ%3D%3D; sid=it9v6m7q; buvid_fp_plain=undefined; DedeUserID=1837471; DedeUserID__ckMd5=5678a12a5b7d1691; SESSDATA=48f843c6%2C1664594400%2C9e2b9*41; bili_jct=02bad9065c947f90286a1bcd937d7ea8; b_ut=5; buvid_fp=2f9e2646e762e56e33e0c37ee7338300; LIVE_BUVID=AUTO3116490424152121; CURRENT_BLACKGAP=0; blackside_state=0; rpdid=", + "Origin" to "https://t.bilibili.com", + "Referer" to "https://t.bilibili.com/", + "User-Agent" to "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36", + )).send() + //val response = client.request("GET", "https://cdn.segmentfault.com/r-e032f7ee/umi.js") + // .addHeader("accept-encoding", "gzip, deflate, br") + // .send() + response.response.protocol println(response.body.string()) } } +} + +class HttpLogger : HttpLoggingInterceptor.Logger { + companion object : Slf4jImpl() + + override fun log(message: String) { + logger.info("HttpLogInfo: {}", message) + } + } \ No newline at end of file