diff --git a/build.gradle.kts b/build.gradle.kts index c0060d87e..e8af09a9d 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -343,7 +343,8 @@ subprojects { } } - fun createPairSourceSet(name: String, vararg dependencies: PairSourceSet, block: org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet.(test: Boolean) -> Unit = { }): PairSourceSet { + //fun createPairSourceSet(name: String, vararg dependencies: PairSourceSet, block: org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet.(test: Boolean) -> Unit = { }): PairSourceSet { + fun createPairSourceSet(name: String, dependency: PairSourceSet? = null, block: org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet.(test: Boolean) -> Unit = { }): PairSourceSet { val dependencies = listOfNotNull(dependency) //println("${project.name}: CREATED SOURCE SET: \"${name}Main\"") val main = maybeCreate("${name}Main").apply { block(false) } val test = maybeCreate("${name}Test").apply { block(true) } @@ -366,14 +367,11 @@ subprojects { } val concurrent = createPairSourceSet("concurrent", common) - val nonNativeCommon = createPairSourceSet("nonNativeCommon", common) - val nonJs = createPairSourceSet("nonJs", common) - val nonJvm = createPairSourceSet("nonJvm", common) - val jvmAndroid = createPairSourceSet("jvmAndroid", common) + val jvmAndroid = createPairSourceSet("jvmAndroid", concurrent) // Default source set for JVM-specific sources and dependencies: // JVM-specific tests and their dependencies: - val jvm = createPairSourceSet("jvm", concurrent, nonNativeCommon, nonJs, jvmAndroid) { test -> + val jvm = createPairSourceSet("jvm", jvmAndroid) { test -> dependencies { if (test) { implementation(kotlin("test-junit")) @@ -384,7 +382,7 @@ subprojects { } if (hasAndroid) { - val android = createPairSourceSet("android", concurrent, nonNativeCommon, nonJs, jvmAndroid) { test -> + val android = createPairSourceSet("android", jvmAndroid) { test -> dependencies { if (test) { //implementation(kotlin("test")) @@ -398,7 +396,7 @@ subprojects { } } - val js = createPairSourceSet("js", common, nonNativeCommon, nonJvm) { test -> + val js = createPairSourceSet("js", common) { test -> dependencies { if (test) { implementation(kotlin("test-js")) @@ -429,7 +427,7 @@ subprojects { val nativeTargets = nativeTargets() for (target in nativeTargets) { - val native = createPairSourceSet(target.name, common, nativeCommon, nonJvm, nonJs) + val native = createPairSourceSet(target.name, nativeCommon) if (target.isDesktop) { native.dependsOn(nativeDesktop) } @@ -453,7 +451,7 @@ subprojects { if (doEnableKotlinMobile) { for (target in mobileTargets()) { - val native = createPairSourceSet(target.name, common, nativeCommon, nonJvm, nonJs) + val native = createPairSourceSet(target.name, nativeCommon) if (target.isIos) { native.dependsOn(nativePosixApple) native.dependsOn(iosCommon) diff --git a/kds/src/nonJsMain/kotlin/com/soywiz/kds/NonJs.kt b/kds/src/concurrentMain/kotlin/com/soywiz/kds/NonJs.kt similarity index 100% rename from kds/src/nonJsMain/kotlin/com/soywiz/kds/NonJs.kt rename to kds/src/concurrentMain/kotlin/com/soywiz/kds/NonJs.kt diff --git a/kds/src/nonNativeCommonMain/kotlin/com/soywiz/kds/atomic/Frozen.kt b/kds/src/jsMain/kotlin/com/soywiz/kds/atomic/Frozen.kt similarity index 100% rename from kds/src/nonNativeCommonMain/kotlin/com/soywiz/kds/atomic/Frozen.kt rename to kds/src/jsMain/kotlin/com/soywiz/kds/atomic/Frozen.kt diff --git a/kds/src/jvmAndroidMain/kotlin/com/soywiz/kds/atomic/Frozen.kt b/kds/src/jvmAndroidMain/kotlin/com/soywiz/kds/atomic/Frozen.kt new file mode 100644 index 000000000..abd1dfa30 --- /dev/null +++ b/kds/src/jvmAndroidMain/kotlin/com/soywiz/kds/atomic/Frozen.kt @@ -0,0 +1,4 @@ +package com.soywiz.kds.atomic + +actual fun kdsFreeze(value: T): T = value +actual fun kdsIsFrozen(value: T): Boolean = false diff --git a/kmem/src/nonJsMain/kotlin/com/soywiz/kmem/BufferNonJs.kt b/kmem/src/concurrentMain/kotlin/com/soywiz/kmem/BufferNonJs.kt similarity index 100% rename from kmem/src/nonJsMain/kotlin/com/soywiz/kmem/BufferNonJs.kt rename to kmem/src/concurrentMain/kotlin/com/soywiz/kmem/BufferNonJs.kt diff --git a/kmem/src/nonNativeCommonMain/kotlin/com/soywiz/kmem/FastTransferNonNative.kt b/kmem/src/jsMain/kotlin/com/soywiz/kmem/FastTransferNonNative.kt similarity index 100% rename from kmem/src/nonNativeCommonMain/kotlin/com/soywiz/kmem/FastTransferNonNative.kt rename to kmem/src/jsMain/kotlin/com/soywiz/kmem/FastTransferNonNative.kt diff --git a/kmem/src/jvmAndroidMain/kotlin/com/soywiz/kmem/FastTransferNonNative.kt b/kmem/src/jvmAndroidMain/kotlin/com/soywiz/kmem/FastTransferNonNative.kt new file mode 100644 index 000000000..e3fbdd49e --- /dev/null +++ b/kmem/src/jvmAndroidMain/kotlin/com/soywiz/kmem/FastTransferNonNative.kt @@ -0,0 +1,66 @@ +package com.soywiz.kmem + +@PublishedApi internal val EmptyByteArray = ByteArray(1) +@PublishedApi internal val EmptyShortArray = ShortArray(1) +@PublishedApi internal val EmptyIntArray = IntArray(1) +@PublishedApi internal val EmptyFloatArray = FloatArray(1) + +public actual class FastByteTransfer actual constructor() { + @PublishedApi internal var ptr: ByteArray = EmptyByteArray + + public actual inline operator fun get(index: Int): Byte = ptr[index] + public actual inline operator fun set(index: Int, value: Byte) { ptr[index] = value } + public actual inline fun use(array: ByteArray, block: (FastByteTransfer) -> Unit) { + try { + ptr = array + block(this) + } finally { + ptr = EmptyByteArray + } + } +} + +public actual class FastShortTransfer actual constructor() { + @PublishedApi internal var ptr: ShortArray = EmptyShortArray + + public actual inline operator fun get(index: Int): Short = ptr[index] + public actual inline operator fun set(index: Int, value: Short) { ptr[index] = value } + public actual inline fun use(array: ShortArray, block: (FastShortTransfer) -> Unit) { + try { + ptr = array + block(this) + } finally { + ptr = EmptyShortArray + } + } +} + +public actual class FastIntTransfer actual constructor() { + @PublishedApi internal var ptr: IntArray = EmptyIntArray + + public actual inline operator fun get(index: Int): Int = ptr[index] + public actual inline operator fun set(index: Int, value: Int) { ptr[index] = value } + public actual inline fun use(array: IntArray, block: (FastIntTransfer) -> Unit) { + try { + ptr = array + block(this) + } finally { + ptr = EmptyIntArray + } + } +} + +public actual class FastFloatTransfer actual constructor() { + @PublishedApi internal var ptr: FloatArray = EmptyFloatArray + + public actual inline operator fun get(index: Int): Float = ptr[index] + public actual inline operator fun set(index: Int, value: Float) { ptr[index] = value } + public actual inline fun use(array: FloatArray, block: (FastFloatTransfer) -> Unit) { + try { + ptr = array + block(this) + } finally { + ptr = EmptyFloatArray + } + } +} diff --git a/korio/src/nonJsMain/kotlin/com/soywiz/korio/async/PromiseNonJs.kt b/korio/src/concurrentMain/kotlin/com/soywiz/korio/async/PromiseNonJs.kt similarity index 100% rename from korio/src/nonJsMain/kotlin/com/soywiz/korio/async/PromiseNonJs.kt rename to korio/src/concurrentMain/kotlin/com/soywiz/korio/async/PromiseNonJs.kt diff --git a/korio/src/nonJsMain/kotlin/com/soywiz/korio/net/ws/NonJsWebSocketClient.kt b/korio/src/concurrentMain/kotlin/com/soywiz/korio/net/ws/NonJsWebSocketClient.kt similarity index 100% rename from korio/src/nonJsMain/kotlin/com/soywiz/korio/net/ws/NonJsWebSocketClient.kt rename to korio/src/concurrentMain/kotlin/com/soywiz/korio/net/ws/NonJsWebSocketClient.kt diff --git a/korio/src/nonJvmMain/kotlin/com/soywiz/korio/lang/PropertiesNonJvm.kt b/korio/src/jsMain/kotlin/com/soywiz/korio/lang/PropertiesNonJvm.kt similarity index 100% rename from korio/src/nonJvmMain/kotlin/com/soywiz/korio/lang/PropertiesNonJvm.kt rename to korio/src/jsMain/kotlin/com/soywiz/korio/lang/PropertiesNonJvm.kt diff --git a/korio/src/nonJvmMain/kotlin/com/soywiz/korio/net/ssl/SSLProcessorNoJvm.kt b/korio/src/jsMain/kotlin/com/soywiz/korio/net/ssl/SSLProcessorNoJvm.kt similarity index 100% rename from korio/src/nonJvmMain/kotlin/com/soywiz/korio/net/ssl/SSLProcessorNoJvm.kt rename to korio/src/jsMain/kotlin/com/soywiz/korio/net/ssl/SSLProcessorNoJvm.kt diff --git a/korio/src/nativeCommonMain/kotlin/com/soywiz/korio/lang/PropertiesNonJvm.kt b/korio/src/nativeCommonMain/kotlin/com/soywiz/korio/lang/PropertiesNonJvm.kt new file mode 100644 index 000000000..6d152927b --- /dev/null +++ b/korio/src/nativeCommonMain/kotlin/com/soywiz/korio/lang/PropertiesNonJvm.kt @@ -0,0 +1,4 @@ +package com.soywiz.korio.lang + +actual object SystemProperties : Properties() { +} diff --git a/korio/src/nativeCommonMain/kotlin/com/soywiz/korio/net/ssl/SSLProcessorNoJvm.kt b/korio/src/nativeCommonMain/kotlin/com/soywiz/korio/net/ssl/SSLProcessorNoJvm.kt new file mode 100644 index 000000000..f9a463b08 --- /dev/null +++ b/korio/src/nativeCommonMain/kotlin/com/soywiz/korio/net/ssl/SSLProcessorNoJvm.kt @@ -0,0 +1,5 @@ +package com.soywiz.korio.net.ssl + +import com.soywiz.korio.util.* + +actual fun DefaultSSLProcessor(): SSLProcessor = TODO("DefaultSSLProcessor not implemented in ${OS.rawName}")