diff options
Diffstat (limited to 'core/src/main/kotlin/utilities')
| -rw-r--r-- | core/src/main/kotlin/utilities/parallelCollectionOperations.kt | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/core/src/main/kotlin/utilities/parallelCollectionOperations.kt b/core/src/main/kotlin/utilities/parallelCollectionOperations.kt new file mode 100644 index 00000000..b3191e8b --- /dev/null +++ b/core/src/main/kotlin/utilities/parallelCollectionOperations.kt @@ -0,0 +1,17 @@ +package org.jetbrains.dokka.utilities + +import kotlinx.coroutines.async +import kotlinx.coroutines.awaitAll +import kotlinx.coroutines.coroutineScope + +suspend inline fun <A, B> Iterable<A>.parallelMap(crossinline f: suspend (A) -> B): List<B> = coroutineScope { + map { async { f(it) } }.awaitAll() +} + +suspend inline fun <A, B> Iterable<A>.parallelMapNotNull(crossinline f: suspend (A) -> B?): List<B> = coroutineScope { + map { async { f(it) } }.awaitAll().filterNotNull() +} + +suspend inline fun <A> Iterable<A>.parallelForEach(crossinline f: suspend (A) -> Unit): Unit = coroutineScope { + map { async { f(it) } }.awaitAll() +} |
