diff options
author | Andrzej Ratajczak <andrzej.ratajczak98@gmail.com> | 2020-09-22 11:08:16 +0200 |
---|---|---|
committer | Andrzej Ratajczak <32793002+BarkingBad@users.noreply.github.com> | 2020-10-02 12:40:50 +0200 |
commit | 8de5296b18083361055d11acf6d522c1eef821a4 (patch) | |
tree | 5e4f4c42bf801f33c40c4efeb5601e0fc4523e36 /core/src/main/kotlin/utilities/parallelCollectionOperations.kt | |
parent | 71b03f6d311c6ebfdf67c593e97a7483a64844f4 (diff) | |
download | dokka-8de5296b18083361055d11acf6d522c1eef821a4.tar.gz dokka-8de5296b18083361055d11acf6d522c1eef821a4.tar.bz2 dokka-8de5296b18083361055d11acf6d522c1eef821a4.zip |
Make translators run in parallel.
Diffstat (limited to 'core/src/main/kotlin/utilities/parallelCollectionOperations.kt')
-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() +} |