11package com.lukaslechner.coroutineusecasesonandroid.usecases.coroutines.usecase12
22
3- import com.lukaslechner.coroutineusecasesonandroid.utils.addCoroutineDebugInfo
4- import kotlinx.coroutines.*
5- import timber.log.Timber
3+ import kotlinx.coroutines.CoroutineDispatcher
4+ import kotlinx.coroutines.Dispatchers
65import java.math.BigInteger
76
87class FactorialCalculator (
98 private val defaultDispatcher : CoroutineDispatcher = Dispatchers .Default
109) {
1110
12- suspend fun calculateFactorial (
11+ fun calculateFactorial (
1312 factorialOf : Int ,
1413 numberOfCoroutines : Int
1514 ): BigInteger {
16- return withContext(defaultDispatcher) {
17- val subRanges = createSubRangeList(factorialOf, numberOfCoroutines)
18- subRanges.map { subRange ->
19- async {
20- calculateFactorialOfSubRange(subRange)
21- }
22- }.awaitAll()
23- .fold(BigInteger .ONE , { acc, element ->
24- ensureActive()
25- acc.multiply(element)
26- })
27- }
15+
16+ // TODO: create sub range list *on background thread*
17+ val subRanges = createSubRangeList(factorialOf, numberOfCoroutines)
18+
19+
20+ // TODO: calculate factorial of each subrange in separate coroutine
21+ // use calculateFactorialOfSubRange(subRange) therefore
22+
23+
24+ // TODO: create factorial result by multiplying all sub-results and return this
25+ // result
26+
27+ return BigInteger .ZERO
2828 }
2929
30- suspend fun calculateFactorialOfSubRange (
30+ // TODO: execute on background thread
31+ fun calculateFactorialOfSubRange (
3132 subRange : SubRange
3233 ): BigInteger {
33- return withContext(defaultDispatcher) {
34- Timber .d(addCoroutineDebugInfo(" Calculate factorial of $subRange " ))
35- var factorial = BigInteger .ONE
36- for (i in subRange.start.. subRange.end) {
37- ensureActive()
38- factorial = factorial.multiply(BigInteger .valueOf(i.toLong()))
39- }
40- factorial
34+ var factorial = BigInteger .ONE
35+ for (i in subRange.start.. subRange.end) {
36+ factorial = factorial.multiply(BigInteger .valueOf(i.toLong()))
4137 }
38+ return factorial
4239 }
4340
4441 fun createSubRangeList (
@@ -63,4 +60,5 @@ class FactorialCalculator(
6360 }
6461}
6562
63+
6664data class SubRange (val start : Int , val end : Int )
0 commit comments