From 184d7890b89a1a0964535c81c49f997ff46f51c7 Mon Sep 17 00:00:00 2001 From: gleb molotkov Date: Fri, 25 Mar 2022 14:57:13 +0300 Subject: [PATCH 1/5] first my step --- .idea/RxJavaHomework.iml | 9 +++++++++ .idea/modules.xml | 8 ++++++++ .idea/vcs.xml | 6 ++++++ src/main/kotlin/Main.kt | 2 ++ 4 files changed, 25 insertions(+) create mode 100644 .idea/RxJavaHomework.iml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml diff --git a/.idea/RxJavaHomework.iml b/.idea/RxJavaHomework.iml new file mode 100644 index 0000000..d6ebd48 --- /dev/null +++ b/.idea/RxJavaHomework.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..9a8d673 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/main/kotlin/Main.kt b/src/main/kotlin/Main.kt index 18c0de6..bd19f96 100644 --- a/src/main/kotlin/Main.kt +++ b/src/main/kotlin/Main.kt @@ -37,6 +37,8 @@ fun requestDataFromServerAsync() /* -> ??? */ { /* return ??? */ } +//--Опля ))) + // 2) Какой источник лучше всего подойдёт для запроса на сервер, который НЕ возвращает результат? // Почему? From a7e08ada592146c1e42b5b304a701143be6e48f4 Mon Sep 17 00:00:00 2001 From: gleb molotkov Date: Fri, 25 Mar 2022 15:22:05 +0300 Subject: [PATCH 2/5] first my step --- .../7.1/executionHistory/executionHistory.bin | Bin 41317 -> 41317 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 17 bytes .gradle/7.1/fileHashes/fileHashes.bin | Bin 22397 -> 22597 bytes .gradle/7.1/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes .../buildOutputCleanup.lock | Bin 17 -> 17 bytes .gradle/buildOutputCleanup/outputFiles.bin | Bin 20549 -> 20747 bytes .idea/RxJavaHomework.iml | 9 -- .idea/modules.xml | 8 -- src/main/kotlin/Main.kt | 124 ++++++++++++++++-- 9 files changed, 114 insertions(+), 27 deletions(-) delete mode 100644 .idea/RxJavaHomework.iml delete mode 100644 .idea/modules.xml diff --git a/.gradle/7.1/executionHistory/executionHistory.bin b/.gradle/7.1/executionHistory/executionHistory.bin index e246eeaf83dbdade5e626a69662ac38ea87d283e..11c64f47344143ade21c52b0ea4712582a4c446c 100644 GIT binary patch delta 395 zcmaEQi0SDerVTk=Dt5E8Gg6Go%Zg0R^OEw@vduHna}%p7jH^;pD;dCmDPnS=$65oE zR0GS@w4~&eBvS)Z!?ff?OEYt`L?AoW#KI!YP~fN0>98Bej06t6Gn&Ma5t;#<8HlC9xzi#wR~HF()P@HMbz9yeP52+|bO>%pxa0Ic9P~udMUT zoe$gp=Bvefa?8v~Wjw@4syW@>Dy(O>0?nEHzgN`oB+2^Mc51tx0qNI2!N}5G uoLrPyPy%+!c2Zqp*d@vLV>`&C|2iy;3=AyZlNr0TC!g!(+x()hRtNxj*p}x2 delta 223 zcmaEQi0SDerVTk=Dl=v$r(_poWTu*wRwbI3Wt19aBo-J~7G;^{moh+r#^geeHHL|% zDW;YwsVU}3NycX8hG`~dMk$FYDMsd|$!SSxNhSjE_IEZK>-cHMHX5FpQe4!vdA{!& zM#hVi9Rutp-|FL^Jk4KBc=D8oT|f2rh_ZBKB^J45=A<&-fXeet<_M6J{xBINKj9)X xOMgL8enDzcNoHy>SlxZNx~>3KvG-tgCm30}i<65o3rfIB&VrO|zSY+)1OOqbSl0jm diff --git a/.gradle/7.1/executionHistory/executionHistory.lock b/.gradle/7.1/executionHistory/executionHistory.lock index c4f0e4ad93104cda4c39a11f52b8d8a6113aa841..21c2eab4ffe92664800b86545bf96d8225a4e95b 100644 GIT binary patch literal 17 UcmZS9`N_Ly!%{Y51_)>c04=}-1poj5 literal 17 UcmZS9`N_Ly!%{Y51_)>Z04==)0ssI2 diff --git a/.gradle/7.1/fileHashes/fileHashes.bin b/.gradle/7.1/fileHashes/fileHashes.bin index 8f6ab440cea638441e4be4cb1c7d02e0fa1d8fde..75651644c0bd072aebd022fd7fa3ddec0f5fbcb4 100644 GIT binary patch delta 164 zcmeynj`8RQ#tkMCj6s`CB{Y}>ZhyD>IR7-aG6NVy2yYIRTEHlvxN-UN_Ipw1A)?_A zC%=_e5YQA>3|rD2?*SEDznN7=k(u9EO{An)vIHtvJ6Tq~nDO97#UJ7u4I%_KJ9^mg rPmT>yVma_5X69slPdy+b>g?o12;bsCrflO-G&vsD}!1CxdyY5`%fA@~=uFt`x2 HK}b9gu{991 diff --git a/.gradle/7.1/fileHashes/fileHashes.lock b/.gradle/7.1/fileHashes/fileHashes.lock index 02e1216ab52faf219280fc90fb647e7573f99b81..5b1d44b8efb4bc07db1dd1491ff04c2070893aa6 100644 GIT binary patch literal 17 UcmZR6%oy0<*XuHi0Rk=n04xdwLI3~& literal 17 UcmZR6%oy0<*XuHi0Rm0|04xLqJOBUy diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock index 25617e132aae00625fd44a7ff59f8413df23c880..e8263cd1153bf1fcdfb339562506702c843ba41d 100644 GIT binary patch literal 17 UcmZQRgVEE*zGA9JMr5*{bU71q~72G&ERCb1d z;>P96+wVo4hYCKQ{8ZMGUsy40Nq4*lRP5?xQMmvCgO~5>*WLDB0~M^^94mK&Ng&1P z0sjZ37ZaeO^C#;nKIA{mv3}o|@A6Qw!;@K+GWm_wL`sS!OQ2$|lT($tn7B`FRQw^n Z(I9|lv!e$K$K-r3!^sIAQIie4tpNx*RMr3h delta 77 zcmV-T0J8s!q5;LA0kAX}0dli780Z3%H5;gt^&63so*YM${T#rP)g6$NeI7BB#vVtr jB_GfNlMN!-ll~%LlXfG40t&&gA@~=uFjx( - - - - - - - - \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index 9a8d673..0000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/src/main/kotlin/Main.kt b/src/main/kotlin/Main.kt index bd19f96..b933ddd 100644 --- a/src/main/kotlin/Main.kt +++ b/src/main/kotlin/Main.kt @@ -1,8 +1,10 @@ import io.reactivex.rxjava3.core.Completable import io.reactivex.rxjava3.core.Flowable import io.reactivex.rxjava3.core.Maybe +import io.reactivex.rxjava3.core.Single import java.rmi.server.ServerNotActiveException import java.util.* +import java.util.concurrent.Callable import java.util.concurrent.TimeUnit import kotlin.random.Random @@ -20,50 +22,152 @@ fun main() { // // Несмотря на то, что в некоторых заданиях фигурируют слова "синхронный" и "асинхронный" в рамках текущего ДЗ // это всего лишь имитация, реальное переключение между потоками будет рассмотрено на следующем семинаре + + println("Start Q1"); + + //Single.timer(1L,TimeUnit.MILLISECONDS).blockingSubscribe({println("0")},{println("error")}); + //Some Emission + //Some Emission + //val singleSource = Maybe.just("single item"); + /// maybe_array = Maybe.fromCallable ( {requestDataFromServerAsync();} ); +/* + val count = -1 + require(count >= 0) { println("Count must be non-negative, was $count") } + require(requestServerAsync() !is Unit) { println("kuku") } + //println("require(requestServerAsync() is Unit)"+require(requestServerAsync() is Unit)); +*/ + Maybe.fromCallable( { + // val arr: Array = arrayOfNulls(1); + //val arr: ByteArray? = arrayOfNulls(1) + // don't know standart fun like arrayOfNulls for List + // var result: MutableList = arr.toMutableList(); //arrayListOf(list.size); + var result: ByteArray? = requestDataFromServerAsync() + // val result: = ""; + result + }).blockingSubscribe({s : ByteArray? -> println("Item received: from Maybe"+s.contentToString()); + }, + { obj: Throwable -> obj.printStackTrace() } ) { println("Done from MaybeSource") } + + + + /* singleSource.subscribe( + { s: String -> println("Item received: from singleSource $s") }, + { obj: Throwable -> obj.printStackTrace() } + ) { println("Done from SingleSource") } + */ + + + // Maybe maybe_array = Maybe.just("single item"); + // Maybe.blockingSubscribe({},{}); + // Maybe.fromCallable ( requestDataFromServerAsync() ) + println("Finished Q1"); + + + println("Start Q2"); + //requestServerAsync(); + //assertTrue( is Unit); + /* val callable1 = object : Callable { + override fun call(): Int = 1 + } + val c1 = createCallable(callable1) + println("callable1 = ${c1.call()}") + + val callable2 = object : Callable { + override fun call(): Unit { println("Hello"); throw Exception("Hello") } + } + val c2 = createCallable(callable2) + c2.call() + + */ + + Completable.fromCallable ( object: Callable { + override fun call(): Unit { requestServerAsync()}} ). + subscribe({println("Successful");}, + { obj: Throwable -> obj.printStackTrace() } ); + //.fromCallable(requestServerAsync()) + //.timer(1L,TimeUnit.MILLISECONDS).blockingSubscribe({println("2")},{println("error2")}); + + + println("Finished Q2"); + + println("Start Q3"); + //val val1 = requestDataFromDbAsync(); + + /* Single.fromCallable ({ + var result: Int? = requestDataFromDbAsync() } + ).onErrorComplete(println("eee")) +*/ + //onErrorComplete(result: Throwable -> println("--")) + + /* blockingSubscribe({println("Successful");}, + { obj: Throwable -> obj.printStackTrace() }) + + */ + + +/* ({s : Int? -> println("Item received: from Single:"+s.toString()}) + { obj: Throwable -> obj.printStackTrace() }) + */ + println("Finish Q3"); + + println("Start Q4"); + emitEachSecond(); + println("Finish Q4"); + + + + } // 1) Какой источник лучше всего подойдёт для запроса на сервер, который возвращает результат? +// Maybe // Почему? +// Согласно лекции номер 2 // Дописать функцию -fun requestDataFromServerAsync() /* -> ??? */ { +fun requestDataFromServerAsync() : ByteArray? /* -> ??? */ { // Функция имитирует синхронный запрос на сервер, возвращающий результат fun getDataFromServerSync(): ByteArray? { Thread.sleep(LATENCY); val success = Random.nextBoolean() - return if (success) Random.nextBytes(RESPONSE_LENGTH) else null - } + //return if (success) Random.nextBytes(RESPONSE_LENGTH) else null + return Random.nextBytes(RESPONSE_LENGTH) + } + return getDataFromServerSync() /* return ??? */ } -//--Опля ))) - // 2) Какой источник лучше всего подойдёт для запроса на сервер, который НЕ возвращает результат? +//Completable // Почему? +// По определению .. // Дописать функцию -fun requestServerAsync() /* -> ??? */ { +fun requestServerAsync() :Unit /* -> ??? */ { // Функция имитирует синхронный запрос на сервер, не возвращающий результат fun getDataFromServerSync() { Thread.sleep(LATENCY) if (Random.nextBoolean()) throw ServerNotActiveException() } - + return getDataFromServerSync() /* return ??? */ } // 3) Какой источник лучше всего подойдёт для однократного асинхронного возвращения значения из базы данных? +//Single // Почему? +//Single — реактивный Callable, потому что тут появляется возможность вернуть результат операции. Продолжая сравнение с Kotlin, можно сказать, что Single — это fun single(): T { }. Таким образом, чтобы подписаться на него, необходимо реализовать onSuccess(T) и onError. + // Дописать функцию -fun requestDataFromDbAsync() /* -> ??? */ { +fun requestDataFromDbAsync() : T? /* -> ??? */ { // Функция имитирует синхронный запрос к БД не возвращающий результата fun getDataFromDbSync(): T? { Thread.sleep(LATENCY); return null } - + return getDataFromDbSync() /* return */ } @@ -78,7 +182,7 @@ fun emitEachSecond() { // Принтер fun printer(value: Long) = println("${Date()}: value = $value") - + source().doOnEach { Thread.sleep(2000L)}.blockingSubscribe({printer(it)}) // code here } From b0ac89b59448cb5030f3cf69b5fd92cbf01727fb Mon Sep 17 00:00:00 2001 From: gleb molotkov Date: Fri, 25 Mar 2022 18:41:38 +0300 Subject: [PATCH 3/5] first my step --- src/main/kotlin/Main.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/kotlin/Main.kt b/src/main/kotlin/Main.kt index b933ddd..59fcf7d 100644 --- a/src/main/kotlin/Main.kt +++ b/src/main/kotlin/Main.kt @@ -97,6 +97,7 @@ fun main() { var result: Int? = requestDataFromDbAsync() } ).onErrorComplete(println("eee")) */ + // //onErrorComplete(result: Throwable -> println("--")) /* blockingSubscribe({println("Successful");}, From 71bf9a36a1d50aa8461ce4e992ff6edbb34e86a8 Mon Sep 17 00:00:00 2001 From: gleb molotkov Date: Fri, 25 Mar 2022 23:40:49 +0300 Subject: [PATCH 4/5] first my step --- .../7.1/executionHistory/executionHistory.bin | Bin 41317 -> 68402 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 17 bytes .gradle/7.1/fileHashes/fileHashes.bin | Bin 22597 -> 30047 bytes .gradle/7.1/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes .../buildOutputCleanup.lock | Bin 17 -> 17 bytes .gradle/buildOutputCleanup/outputFiles.bin | Bin 20747 -> 24023 bytes build/classes/kotlin/main/MainKt$main$1.class | Bin 3116 -> 0 bytes build/classes/kotlin/main/MainKt$xMap$1.class | Bin 2777 -> 2798 bytes build/classes/kotlin/main/MainKt.class | Bin 6868 -> 11024 bytes build/kotlin/compileKotlin/build-history.bin | Bin 456 -> 184 bytes .../caches-jvm/inputs/source-to-output.tab | Bin 4096 -> 4096 bytes .../inputs/source-to-output.tab.keystream | Bin 4096 -> 4096 bytes .../inputs/source-to-output.tab.values.at | Bin 3420 -> 6388 bytes .../jvm/kotlin/internal-name-to-source.tab | Bin 4096 -> 4096 bytes .../internal-name-to-source.tab.keystream | Bin 4096 -> 4096 bytes .../internal-name-to-source.tab.keystream.len | Bin 8 -> 8 bytes .../kotlin/internal-name-to-source.tab.len | Bin 8 -> 8 bytes .../internal-name-to-source.tab.values.at | Bin 1609 -> 3089 bytes .../jvm/kotlin/internal-name-to-source.tab_i | Bin 32768 -> 32768 bytes .../caches-jvm/jvm/kotlin/package-parts.tab | Bin 4096 -> 4096 bytes .../jvm/kotlin/package-parts.tab.values.at | Bin 91 -> 121 bytes .../caches-jvm/jvm/kotlin/proto.tab | Bin 4096 -> 4096 bytes .../caches-jvm/jvm/kotlin/proto.tab.values.at | Bin 7400 -> 17529 bytes .../jvm/kotlin/source-to-classes.tab | Bin 4096 -> 4096 bytes .../kotlin/source-to-classes.tab.keystream | Bin 4096 -> 4096 bytes .../kotlin/source-to-classes.tab.values.at | Bin 735 -> 1356 bytes .../caches-jvm/lookups/counters.tab | 4 +- .../caches-jvm/lookups/file-to-id.tab | Bin 4096 -> 4096 bytes .../lookups/file-to-id.tab.keystream | Bin 4096 -> 4096 bytes .../lookups/file-to-id.tab.values.at | Bin 133 -> 193 bytes .../caches-jvm/lookups/file-to-id.tab_i | Bin 32768 -> 32768 bytes .../caches-jvm/lookups/id-to-file.tab | Bin 4096 -> 4096 bytes .../lookups/id-to-file.tab.keystream | Bin 4096 -> 4096 bytes .../lookups/id-to-file.tab.keystream.len | Bin 8 -> 8 bytes .../caches-jvm/lookups/id-to-file.tab.len | Bin 8 -> 8 bytes .../lookups/id-to-file.tab.values.at | Bin 609 -> 1009 bytes .../caches-jvm/lookups/id-to-file.tab_i | Bin 32768 -> 32768 bytes .../caches-jvm/lookups/lookups.tab | Bin 4096 -> 4096 bytes .../caches-jvm/lookups/lookups.tab.keystream | Bin 4096 -> 4096 bytes .../lookups/lookups.tab.keystream.len | Bin 8 -> 8 bytes .../caches-jvm/lookups/lookups.tab.len | Bin 8 -> 8 bytes .../caches-jvm/lookups/lookups.tab.values | Bin 2569 -> 6488 bytes .../caches-jvm/lookups/lookups.tab.values.at | Bin 31639 -> 27889 bytes .../caches-jvm/lookups/lookups.tab.values.s | 2 +- .../caches-jvm/lookups/lookups.tab_i | Bin 32768 -> 32768 bytes build/kotlin/compileKotlin/last-build.bin | Bin 81 -> 81 bytes src/main/kotlin/Main.kt | 127 +++++++++--------- 47 files changed, 65 insertions(+), 68 deletions(-) delete mode 100644 build/classes/kotlin/main/MainKt$main$1.class diff --git a/.gradle/7.1/executionHistory/executionHistory.bin b/.gradle/7.1/executionHistory/executionHistory.bin index 11c64f47344143ade21c52b0ea4712582a4c446c..32fd4329607df4cb2e1fe470eb2c4fb5fc669440 100644 GIT binary patch literal 68402 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 RnELG7XEDFPZc*$B{|{ijNGJdR delta 4814 zcmdUzeM}o=9LKrRIRjBz3u^((%hm{^aL+w`$G6Dhq6wKoj7H<4yS7(2`f{{)uu25C zEE^jOV1017I76m?xqu3F6LgZHiy7lRLYywcp+T8M7;$sMy?NKJfd1E}XJY^8J^A&X z&-1%)zrWw}v^|HUvtLQxOvMrdX?a+2H`%KURBKSWsz6c>f?HL8S~Ti+YrI~o$z^5g ztX9fQyLFt`X{2jRq~DtmdSNrcSIbjU;H(5Z&r&`X)bQ^Bukev}7X@sjt&(Dao3Yop zD7Huk9CYZ4Lx9Ng)J))HI2Y|HVmZ5uwiZ>{ofZIbBMu3G#&_gn0D*4exuIy;G=uvn z(#FxXlppu`tH@eX55iZV$04oI5GMp_cFhUPH2j`{?)y|xHXO@RRTO9S zk+g>eq{qW>Bu6v+80vBUdnFhFzk4VT&P9tB)Zym_7EH7c!;i{wWYB6{WjjVHC@`7sr#|B}bwlga4u&nw{77_Gjrn6Ya0 zlrMzJSy;5d3$fsok-p-i94^Ynt(4Gch&$jc6v-c2I3G*CLRs%gTY3EU-B_sq1@`2i z>DLu-DMsdHw`zrnT3JET%Wf0=DQa9cm$?COKBks3RPkC8xQ>7psDu38R>ld~jz2`S zs|f8gJDxV}ziJZ6rs-&UK-5+iXS>4qT6GgT&&tKH>&K@z|1Z0%9Nn&w!@c=V;I}cuH?MLVM#EeK`sAhpUW&TkgbzPux7Hkfyk`Vt z*)1Jhj1jjqrd-WXHZI`!5Gor_Mh$}sxDX3g;s+@Ata3fy6!o|TppR|~*xa)QvGy17 zY%4;S&5Cn-5q85=G3}p>`s?NKErG4^wSRW|Gg3?*{~CBOzW&ce>IqRdF7fI>#KW;X z&h=3IR$GCA_1S=%{{edU$P2ddW8BFl$`&1&!(&%oI?`gy>zw)WN+-7e?nhWJf+#=d zUlV0_c03yJOH?n9z^=jN{5AzTI;li~_nsu$gn6Z$Mp#7yahr=|*#y~8=+nJsvio2CXMKgsfX8vCZYbR^t9x!N9tyeYZ_kJcPgiT<1s0gkYFf4 zEmPWcH~N0rzs%pGlFywCkR{i8wp=&(j!b`e0G9?&?Cq6qbXMARJ8OMLv&YIfoaV|3 zH(BS`*HP4K;eU1{FCy>LU4(%miYbTHX15v%BXrovVw2fK@?*+iu{fY?SvT~;xo>o` zQ>&}4Bjw(Y3(S+(?V-%KN_YBsKoA1u{KM~?IHiRQ=F q#=8z^rNct}sTT9vIBZJ4|N3V$jW@xaLg87Zr3h=%27hQd_`u(FgpQy9 diff --git a/.gradle/7.1/executionHistory/executionHistory.lock b/.gradle/7.1/executionHistory/executionHistory.lock index 21c2eab4ffe92664800b86545bf96d8225a4e95b..e2955bbc0c4806f646d14c071074822bfbd26cd3 100644 GIT binary patch literal 17 VcmZS9`N_Ly!%{Y51~6dE0st+i1M2_) literal 17 UcmZS9`N_Ly!%{Y51_)>c04=}-1poj5 diff --git a/.gradle/7.1/fileHashes/fileHashes.bin b/.gradle/7.1/fileHashes/fileHashes.bin index 75651644c0bd072aebd022fd7fa3ddec0f5fbcb4..9ff3452b00b6030600742200ae320f4657fd3433 100644 GIT binary patch delta 5147 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 diff --git a/.gradle/7.1/fileHashes/fileHashes.lock b/.gradle/7.1/fileHashes/fileHashes.lock index 5b1d44b8efb4bc07db1dd1491ff04c2070893aa6..a127730a00e4aba1b8792092883bf51e88ddb4cd 100644 GIT binary patch literal 17 VcmZR6%oy0<*XuHi0SuU?001k}1PA~C literal 17 UcmZR6%oy0<*XuHi0Rk=n04xdwLI3~& diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock index e8263cd1153bf1fcdfb339562506702c843ba41d..8718b66c46ea6d8c5e8322cdba5978338c1ca737 100644 GIT binary patch literal 17 VcmZQR*AvO_PlCWA5kz2C$EW2&# zqMS%_%Mz*WU{xo{?N~=6-8Mp}R+L)n_?+i?-hYn2e7^7R{XNh7dEe)G-^njk8*EXl zanScwb4Xv|ImHQaUc2Ofe|+Hr`b)Q8Yjf-t%>=s84||5r=DS8O=jhOt=dc5gzPB_h zs%QIE2c1TEP~43VW?kA=(KdF_9=aqH`{Bwl(L49{A(Xeqo_%(r$s)0>7rJl(BS$w9`_wPr_du6Xuopg;|Dses6bfBX0S5G=sNkC4aQl?=b%?*9DB8OY;opX$8qRF09*{2l=LflmNyvaso*C8ks+7e zFm#Kw`>WyS81ZGt>W(?vfMGz5=_eGa7B;d z(YnPIOkCvT?x+@dE)c` z^`&Nn&em`|2{qDx?G|U3cv_(GCO`p=pblE3IJvF3(2p<;l+gmE4@0+=q#e4c3sFF> zzK7>kdaYKrXs-*7z|9ZKJ^rM}z1{`$;uEC*;aF|D{};U2;=vS+kgA+Dh6^P8KVdld zDGsZI4N*V!cBerXPGKLFUM{|@-8TwdKyDqQXBf1+HF_%O(oUdGC(@oIeV7@KTaOlx zWF0Pfa_q>~rL?GfFf4yWdg%kZnP)d_q01zsKkcmJ-nx%|*|=R1O$)F7?GvUlgaCIXS|x=sECToccIdd3(mT zt^{Im6>fOh*zbS$Wkv>cSpoKmRt>Ya;f=pR7m`o@WLo97BN11b(8ZNFKlwz(Sz$Vh z-bKNh*r)7(<|dXc*hhC~zd7nvnYUSL1JC8(#F;mz+FrQoU*n<9Y*0mKnrmh=TLYIZ zgC!t^|v-me7M4po7k&P%_7wwh}7^Cu!K#M_8 zKYr9(`y}kS7=;sn8H3ASnyY>KtBGHsEfHAahNb-ny>lmDrN9HqdLUvj&DCkH^5L2` zXrg4CRbRQjOz0erW)V~fb}_haE7B9!9Pu^!8HVKsIJ|ORIPsXRs|{VT47(li2={_>rNkCK-36XA zm=vwyEM@FV^or%rfO!VtroG?iLS)|cSFk|lg$s1cYD*_00?@l#7>oVWzU40aOuxqa z(s`g~M5O6Eta&>2U@uw?LM09xcv735L~hy%%lYI}Y;eX=r-G+4fUY#bc|)_4iM4`ylg1k^!S;QWG7magaOln`_y z1U~?4BR(Z1v|+%(Z5CzqK!On=WlftgRid*e$z9wa_2Py z>-Ki(0aWgc!}f`JiJWtCbaMnQ*d2hXkF`D*y-!4aq>m5BduNLGp`L$Y-)L%Icg6P^ zy2@a8((RhG#@l{pqPr|^#RoVUU+$e}syD$R1rIQc396%_CUii#TLDp43pmC^8n-w9 zJEtwW6o^tE+`xU7cwxfa0X_AiNbEeOV>0wRPv3n)@5QAhO!kAB~a6LOzWRwR@JPoQA zgPTV_=-6=L@n)L~I*bF|+&c@Z6}_QoWlMGO9NZUfhto>ivj#iZ?DuCQ6+ z53~q^>eVF}V>zeofGBGNW(1S6dG~w2@@({;m;48~EZQ|9kL`KY7v_X_fQaBx-b}_& zsiogR6FdT0L^?%sN_)P#{uVUxV=zx}seyBIpN{AJeGDSM3Rp76e-^=xp3zA>uda=DDmnQr6BBc!=+oNYM_^dy03uj{)LlJs)n1cc zbckXNP{kssdm^nkIxMXpAS(Po$Kp^d*X6vnS$k+gbD(1JD0vUm**S&`XmU%SWkR?m zBx=p}WjwwQQL+JFS3*HeH2r5wv=oD9uqS3p2lnldqD3y$17;>%YI01#lBQvn9F_!e zfXIYNIq<@<-bHm9n!+6HTD0;)Bl9Wm24nzanGo#MhAFF)pNYt^~2Z)qv{jU2o_2c4<8kAXcjn N+}f}9|Nl9u{THUtLT~^8 delta 344 zcmWNLze_?<6vtCAf?DgIqnSVQX_~%!pYJU#LBoUFA}uz%IM!ygytbxr`cj)qU|W!c zEzwv|V4LFp&=xM4@x%)2=??m753{sJ zH{;xn+agtB zv`U1FlES^%air}Sj2*_p(dd;4FT%IbtuSsX(ykCDJBM(q3d1U4T4gNP6r!5N$u40a zgmpr%eu!CJA=Qw-8idyd<40U}4Nl#2EL@FH%bxBaWeAZF8xQ-Q#>A7prw}$RhD~WS nrQsX2eECxx`;2lxI1UsB0pl~+ORm0;3cqS(j@BLz?8nMK(CK=M diff --git a/build/classes/kotlin/main/MainKt$main$1.class b/build/classes/kotlin/main/MainKt$main$1.class deleted file mode 100644 index ba22cad6c4e170ce650e683ad25d47371f1abf2a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3116 zcmc&$Yf~Fl7=F$Yk`O`(p`~1G#S%+Mpc`n_+N4-OkVr@?V6@`xBw1j|W;gC`5Wew~ zbew5xopJKn@h3Ts@5yfHMo3`%VrKU2$$QRwd*0jr@%QWB0X%@kFtEv0eZ!7b=@pv~ zfHC})s~EPX>hj@HRaSLdF?FuVIbJQ6dD?rnSJz9nYUq}{=I$0UIn|I&g%kZqIhM`i zLw>~X%O%593lM_T)oL_)I0DcC4M%7h&k)bC(Q(*ALvonP-f(V7si+&>52P%O-m}^5n zO^m93WKxk`=%Wh8v{=rBrccJmV&>DpVB=({WEy zJ}n+9B|Gh*Yzra#X%YIH7!6?rV+@jN2Qk5L_X6G-53?&Sf?Jd)PFBRUW)04z7>e=k zg*flEqg7;AgmT-cnIEwYz-8abT3!xn9;3E0!~iO1a=lc-pn8Up&wRxE!@7(=btt5bX zhUlKgZ7K{;Yhc*w&>1e!*}=MI_xH#o+wS8*2n%?RVdT8dxN6S?@d3kxx9(PtYo=mZ zG;a!At1DrA=+x9BhFF(2*K&|bfAX@Lp-9B+YAqE6weIeHo<`-9Fa~j}A4^zfNOp$U z0esBBY=&V^YPKqh;h{Ix&vzA<;>|CYB(u z*inCy%B22D>9~|)iD1+hl~O$^X(1Z%jbC&AHCLAET@ML4 zWNd$i>xO<(HR=|{Wx7kSJy4UG5D2)_y7h%JPjtUCbpt5TBo-e&VJPTh2nhPU3I)cu zVw7nJM{`DrYXxqq;xl4LEMjP@x{|L~i;C$|`nJ`5o!fPjPA9hNx~*1~tbU|gDlsg* znL?DP|2{n%CT-WkSzTAm6^&b#B0dvV^^#^-G)tV0M?=g>q%~C-H0BB|T%a(rY#6p> zo4n?*T1Zh?dkGo()WevFvxp%*lmdS4>^Gwm2uTEh+%15KVGk!u%$p1;JiU$8BJ7bxkphKNzP0*u0-)rT_nTugdUBZ`E5 z{6O!=baRIS`uQ$;vM6Nn1+Dlpi|6<%i(P!Z3ufUPe7g(3h3_nUZy{rWTbQs=gh?Vq NoM*|++Z2X({{g0{WlsPA diff --git a/build/classes/kotlin/main/MainKt$xMap$1.class b/build/classes/kotlin/main/MainKt$xMap$1.class index 50d7522aa2db323ef3b7c3ad4e2e0c4492a842c0..662c29ad5355aaec6f03c1161c88f6f93cb527d6 100644 GIT binary patch delta 84 zcmca9`c8DiZDz%q^2E#%|Gd=T)a3lU6b(%-1vIevHM1Klqwi!RPBm^W1||juhEoj8 a45uf@bC$B6W>5#RZgM&^o|r7lwFdwlQ5UfQ delta 63 zcmaDSdQ)`6ZDxV&^2E#%|Gd=T)a3lU6b;SIf0*4^89gUEbE>hkF)%VPFqBR%;Vfk> SWl#sQ-f=oJ7EdyiC|?fnOhAl~LM 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 B`%?e_ literal 6868 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 diff --git a/build/kotlin/compileKotlin/build-history.bin b/build/kotlin/compileKotlin/build-history.bin index df7eb462feab3c27d2e18dfddb002c64bd0bf883..dc781bd245f597e5172d49d435bc164a995fd108 100644 GIT binary patch literal 184 zcmZ4UmVvc=69WWrF)%RJA1V*GVT1|*DWE`|dIPFJ&%uAF0)5?ar~>^9J5dED9)E!< aFjKJtRbb1Z)u;kH-mXCv*tJdoE&u@Iw;*-^ literal 456 zcmZ4UmVvd3fq`*90|amZ+4U3UO{Osd`AiIgHo=a*y3YQ7!68AR&LRFmc0gg43g5&6 zuyT+huzG(bFcT~Y7Rb~@6)=hZ4iaEzkSau zF`)_E7ef_raa#!zz!6e>skxaYu8GMR!Kumlc_|>P8Nm91VI2M)%w!_f&j=GDytcs| F0|1{#W8MG& diff --git a/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab b/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab index ca51aa22083dec5a3bf0f0090e6c40509c076b34..e44f7d0911692ef1e082c6806eafdfc96d081c4e 100644 GIT binary patch delta 54 xcmZorXi#9C?X#Otd?Ks9q$>jh10xgzDKG%>-6r~)vmAKw|Nq8``TP?LH~|bd3<3ZE delta 54 xcmZorXi#9C?X#PYcOt94q&fow10xgzDKG%>H75F+vn>4l|Nq8``TP?LH~|9w3#b49 diff --git a/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab.keystream b/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab.keystream index 7db0fd59142148835672e7a522c2d65d52f9dba7..655bc34ea1aecf1d8abe83cf8c6713aa439926ba 100644 GIT binary patch delta 40 ucmZorXi$(>RS5|4_i}X(iFfe~Qi&-pN{-1*%*>0)&M(OUQXAzT@&f?=2o2Bx delta 40 ucmZorXi$(>RS5|4_i}X(iFfe~QqeCiO4iR!%*@lz&M(OUQXAzT@&f?$T@4%n diff --git a/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab.values.at b/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab.values.at index 033396ed36831f1cb5f7673071edb1c899ba363a..978768ce615b7a6c8dfcef07f081a2e3c63e8a20 100644 GIT binary patch literal 6388 zcmeI0Piw+37{-N-eU2V-ogz$}%!@dsI_jj8odWV|U$mGSNz&=(_Oin+*47VDdl(|m zC71Bz4@urU&#zJQnIbk`$V+V^Z>WtoWn*LOcwtFOq*DHJ+R%#s9%?UQ8h(xk z{n`9|6biXWV-?AzB5T>ojdm*D%7n5e$eIsV&%55P6N&QxqE$_M$kr^Hg*GTX?_kz@ z9!-WaJdEjwe4X%Kn@zpg&^*yms<3;UJ#IeUJ*pmRK7Ks>_i#J#dUxt{e;;q(=jR#W z6&bC>}ul9tr_$a5I6|5 literal 3420 zcmdOA@JLNeNi9+cN=?o$N>OmjFH#6dEh^3|E=kQR@klJr@J%cTOUx-v4KB$qN=#4v z%*tS*5)kC?l)&y>*?pFA5`I$SeEFKpPO2qUzDu}3CQ@| z{FKt1)Zfg5Kh#HkKN|O-LSQuI6IVEn=KIl74_}$TpFTxC?TYPD4-nNpQW=c_ob8?= TpM*vmZbY|(2dJ|^yW9r=V;rXc diff --git a/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab b/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab index 766caecb36dda894f60a65adfb02a947034fb75c..423b0779d1c2fb9076b2539082b5800aa203b50b 100644 GIT binary patch literal 4096 zcmbR3vzyP2fq{Vyh~Yp0!rB3(8i4pe5P(G3K?D$h)H6achz|lFxnM90A_rv>Mcw=I z|366oHXtnuq{V==GLQz@YY3$KfP4oaod%@+fwUcv22!J7Gz3ONU^E0qLtr!nMnhmU a1V%$(Gz3ONU^E0qLtr!nMnize5C8yZcp+{8 literal 4096 zcmeH@u?c`M6htGUc4FfMY8!A5hsqu<;12HM9@@nFCRmI0JGk5>Kk(tL%ifO8xl(@B zrM4-893^|H?2sn8$hN!5X8vhumg}eRSB#B**2-RK`-Yse@;K9eRRjSDKmY;|fB*y_ P009U<00Izzzz+g9K%*JW diff --git a/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream b/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream index 9cee24e8c9d770e9669ce685590dcf5fa918f3da..0622bf14c45edae4f174c0982606940d70e5df76 100644 GIT binary patch literal 4096 zcmZScP0Y;mF5!hxD!D+OiYbg&;hR{XVhH1bPbkis8n@`TP?LlmG#E5@i4Y diff --git a/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len b/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len index 2ea73058bd6279214e7b894bbf3abcb916335ee2..4e6ef51f4f548bd761fe79ce934b8d27271c3318 100644 GIT binary patch literal 8 LcmZQz0E0LH0A>JR literal 8 LcmZQz00Vmf07n2o diff --git a/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len b/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len index ec8f944c8acd49bcace4e4c78d4306ebd9e28078..817b326d9eb94f6a38f5e047201a69ab944ef476 100644 GIT binary patch literal 8 LcmZQz0D~O>0Kfpb literal 8 LcmZQz0D~0(0I&e5 diff --git a/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at b/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at index 4c5838670560f78ac51455f9fb0fe8e559cac9ab..d415df3a580ec5070f9a798a03c2bb7cd9592632 100644 GIT binary patch literal 3089 zcmdOA@JLNeNi9+cN=?o$N>OmjFH#6dEh^3|E=kQR@klJr@J%cTOUx-v4KB$qN=#2x zV^CEI2=e!Gbqr`f{{=FxqY!Z6^-?b};~Q2n`?r literal 1609 zcmdOA@JLNeNi9+cN=?o$N>OmjFH#6dEh^3|E=kQR@klJr@J%cTOUx-v4KB$qN=#2x zV^CEI2=e!Gbqf&rQtC)6dQ?$pKQnK(=0X$*8)~a2ZVpqxoaBJQx|} FBmnvS0geCw diff --git a/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i b/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i index 8f37b2c67ebfc90795a21cae2a545b2a47a47384..c69b8cecf0758d536e78159696508397aa2077a3 100644 GIT binary patch delta 100 zcmZo@U}|V!VqsusVBWltbq?#~238iCGnPWh3}|2mkbfR14pj9cLt+7tm;c}7{|X>o f0Hikn=|UhqQSia!4f!`XCII=u;=4+Kstfo5?R_0r delta 67 zcmZo@U}|V!VqsuqVBRQL!#a5ZD~repOQGZm3=9k>f%FU@eF{i#KFIn#W21s1kKx_yK`^6n+2z diff --git a/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/package-parts.tab b/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/package-parts.tab index bd9de50a0e3105a4f4fecc74580d569efcde1c4b..83d73a2658186dc8cfe0e5cdb195d8ba961c9af7 100644 GIT binary patch delta 54 xcmZorXi#9C?X#Otd?Ks9q$>jh10xgzDKG%>FHiI}XX*U^|Nq8``TP?LH~|xo3~vAc delta 54 xcmZorXi#9C?X#PYcOt94q&fow10xgzDKG%>izoV;vn>Dr|Nq8``TP?LH~|P~3&3QWZ{r}Gno8|Nq8``TUFw E0A;QYJOBUy diff --git a/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab.values.at b/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab.values.at index 35c5c24e7caf925313e64d17561202f93aada75a..e9f6f8dbe00f29d6a906819fea70db45df283193 100644 GIT binary patch literal 17529 zcmeHO%}(1u5S}>3EG8tz`NdURgpf)rRWbC|RFx1UP1_I^pSqBod@aktjK|nS;IA@vgmbX21F7+f5dVg6|8txGQR|++QrXa&bq< zcD?Nh$1C#o;TCVbExI_Qcq6P#IaR&<3;q0PiHtScF;4<4** z14}bhOR=Z0)Pgc@Oj~LuRAfsk1A|>?cx#Ipx^J{+u~{T&RxsxLa_yxNwVs>0$xPK$ z?67T^56%1C&%xQW=P$Gfi<^ukOqH>fWX~MKJG0bM)BwCs=>6v^)^)(Tg7t8}eyOGL zD`sH2v|i1ZH$Gq`wwtf)Y?mwfkEMM1RketwsA$%`Jg*&A@YOl{Xi=NI?m$Y4PbZ@7 zZE}wnq}$xwTW_B`H3(H9vGTZd#7}v)!JUKb_TG`Gc{#8KI#h%_6|&n2!0cVUYE?V< ztAN(zt(K5rmX2MoQFpS16Q}0YU1u!^%cZ)Tm4ajaRCKbk<3ILU7Jp-rEi~LSzSj`B z-+Qj+;L#s?Zn(`>LwMcJss3Ykxa3XY30cM>2daYwMC%S(9Nxf@`h$GXZ=LU;XSH#Z z{n1v>Ti7eQ+j)aSEV@l`=E~!z_&NcW@d)GLd)!p71YOs`)VA{>EcHN0 zO2Y3T2`9JwizJ-f5(TWWXhUE0ASe1cT(Q({saQr(u|z4di>8@_&-zFEJ_Ai-O>d;Ky! zpj7sx%~cXM$$5PtzUQUnyrjzes{GekA9+K{aO7pTMBbrmMG;&px(df#=BM8TH z0USpWj$?jfgkz%z$Me_VI6eT!Nju@gaSGu$9l&uWaP*{)(h6I+8ICP{8TalUj)yNN zjRfft7uJBd$GG5|WbGKGy^CPz(r|dLBxWF?3$!Z zcsv^`MQHUqxa;#Da(g5ep&~L@bC{5V4@iWI?|G27uo4 literal 7400 zcmeI1O-~a+7{{mE?J`~3?R0>uo2W=gM2+rRO-QUUA<)`rK|&j%@nD8Bfl9kurwf#; z2S0)zfD_-t#G{|Un^zCsz4+{Gi-5>W1jAtt-DhW}`_i5NKL6h{bx@hJWiCb+c-bvM3kXe41z6GILa$bdabO&SfGZj$Ecu>7jI+naV% z?%H%+~1kP1|K{4+iNNXQiW;oiwT4SeoM zKb!3NnFD@yXV z2Enq|AW0cZ#0+Ep2^q8>?WVoBo2J+4Rhj7Ga+`6jZ6k#V#W+iKj3;QXI~9`r(3llf z3NPQ+plu>(YjECpzrAA&LzWyt1C^;-ac=rmm@*fN)%h25)#950bPSinlcZ_O-Cb+)`Ziq(*PV5rK)1{cvV?Tzj2JF9}>uyWzVFLJJ5E6g*&T0G!l z4nhIx9t31HJm~RQ6H1$~syW}ptVE?mb>`)&5|t8_5|tb4+nut%y_LpAvcI1ZQ++v{ zsRmBSR7S*9z*YkxJxR90z*Z4c84*+2C19$Ety25g$~wSS#La|kl?Ao}ssgqel59oX zbjVi2$FtQ4uv6|Bwz7Du5foW{wF>LT-tsPODb|uJ$mg<(`#mWE{_EpI0lv5JjuWR8 z9R<Xb$2X%nMT=YOeFe*ymLcKQGS diff --git a/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab b/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab index dd98556304011a3009e0d90c313d71034a22084b..465aabccf928bb241607efa8d09b0725b1fdd8df 100644 GIT binary patch delta 54 xcmZorXi#9C?X#Otd?Ks9WDElX10xgzDKG%>V<-BWvxxlu|9|7eeEx|AoB#@$3zq-@ delta 54 xcmZorXi#9C?X#PYcOt94qzMB910xgzDKG%>O(*)AvxNNp|9|7eeEx|AoB#sr3x5Cr diff --git a/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream b/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream index 7db0fd59142148835672e7a522c2d65d52f9dba7..655bc34ea1aecf1d8abe83cf8c6713aa439926ba 100644 GIT binary patch delta 40 ucmZorXi$(>RS5|4_i}X(iFfe~Qi&-pN{-1*%*>0)&M(OUQXAzT@&f?=2o2Bx delta 40 ucmZorXi$(>RS5|4_i}X(iFfe~QqeCiO4iR!%*@lz&M(OUQXAzT@&f?$T@4%n diff --git a/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at b/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at index 67f9ba1be65b8abce9dda731b1f964d55a7cbbf6..26d10e95cc568af9ebb2d5858a30c426dbab39ea 100644 GIT binary patch literal 1356 zcmdOA@JLNeNi9+cN=?o$N>OmjFH#6dEh^3|E=kQR@klJr@J%cTOUx-v4KB$qN=#2R zVqo)4%*^vH;e}8txj>$ZDU4SERIXykrjvnLvvKF1uEAPZ$bkAWP`la literal 735 zcmdOA@JLNeNi9+cN=?o$N>OmjFH#6dEh^3|E=kQR@klJr@J%cTOUx-v4KB$qN=#4n zV_@@5%*^vH;e}8txj>$ZAqvk3g=Y-oRRE1rG33+B&M(Qy%!|*>PbtkwHNtP+sGbrP QtYM&n9&STQ6}@5|00fTmW&i*H diff --git a/build/kotlin/compileKotlin/caches-jvm/lookups/counters.tab b/build/kotlin/compileKotlin/caches-jvm/lookups/counters.tab index 6540a14..ede6149 100644 --- a/build/kotlin/compileKotlin/caches-jvm/lookups/counters.tab +++ b/build/kotlin/compileKotlin/caches-jvm/lookups/counters.tab @@ -1,2 +1,2 @@ -14 -13 \ No newline at end of file +24 +23 \ No newline at end of file diff --git a/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab b/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab index 212bada20094b4603917359d307067011bf804aa..bef3c5d2a7011f2cab2591b2b77c34de19e8e1c7 100644 GIT binary patch delta 54 xcmZorXi#9C?X#Otd?Ks9WDElX10xgzDKG%>V<-BWv$*{K|9|7eeEx|AoB#~b3(Eii delta 54 xcmZorXi#9C?X#PYcOt94qzMB910xgzDKG%>O(*)Avo!qw|9|7eeEx|AoB#yl3#|YE diff --git a/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab.keystream b/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab.keystream index 7db0fd59142148835672e7a522c2d65d52f9dba7..655bc34ea1aecf1d8abe83cf8c6713aa439926ba 100644 GIT binary patch delta 40 ucmZorXi$(>RS5|4_i}X(iFfe~Qi&-pN{-1*%*>0)&M(OUQXAzT@&f?=2o2Bx delta 40 ucmZorXi$(>RS5|4_i}X(iFfe~QqeCiO4iR!%*@lz&M(OUQXAzT@&f?$T@4%n diff --git a/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab.values.at b/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab.values.at index add58948f4049877f7d6e428054d99139a6bbbae..3cc261a330739efa38efa027052a2a79a226b30b 100644 GIT binary patch delta 67 qcmZo=Jjghq)rN%u2>8GxKbRB%lY(GU2uuotNf9t93MR$Cq&NV*`~!Oc delta 6 NcmX@e*vdGe6#xiL0$u@8&8wJ@dH!A$F*r*`M3jm{L3X=c; diff --git a/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab b/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab index a2be1bded10a51d338ba35a1a709885556aae4f6..b8548fa3d5d5d88c0549efbdddd66e5b991b3817 100644 GIT binary patch literal 4096 zcmeH@$qm9l5Cj*@VJ-v49Ff4600@FmoQFdpHA`k17l`sGrHp*rM&0$>+AQT`*lVf!VHe!7*606=5Pk*Z~>Qa y1q--_daC}rg(cj<3hvb>W-_Y$pR12$j-HedrbU;{Q_12$j-HedsPZQuzYglNV9 delta 99 zcmZorXi)H-?X#PYmw|zS5s2YH0K)nJq#A(uKM;UK_&@{@=m0TL{eNUVATt~%`p#!L S_V@q)&5n%w`6dT21_A&9&Jv0M diff --git a/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab.keystream b/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab.keystream index bf06e37667006495ea4b339faab2fc0146d103c8..3a764f1362409bb48e97a533a37ca492eace96e0 100644 GIT binary patch delta 33 ocmZorXi$(~U}R!uVP#|I;N;@w;pO8O5EK#?5fu~PDENXO06e<{CIA2c delta 26 hcmZorXi(r|U}R!uVP#|I;N;@w;oYcspMRo(FaR*@1U>)& diff --git a/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab.keystream.len b/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab.keystream.len index 46715fa2fd463d2538b1aa407ae094d66dfb3832..e534549ea5c619d4d61e2298ea52c401352fbaa3 100644 GIT binary patch literal 8 LcmZQz00RjC03ZMv literal 8 LcmZQz00TY%02Tlb diff --git a/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab.len b/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab.len index 003bc0ebfc327ee4e08df4a177e7f368d2dea681..6a294aa5b14ac464848e0bfb5de63659bfa3bedc 100644 GIT binary patch literal 8 McmZQz00Bk^002q=LI3~& literal 8 LcmZQz0D}(z0Qdm$ diff --git a/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab.values.at b/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab.values.at index 78dd910dbdc9dde578170c73a491a23e673016c4..7ceb190e0c77fcd0d49c8ebcbcc9739fdb9625ef 100644 GIT binary patch literal 1009 zcmdOA@JLNeNi9+cN=?o$N>OmjFH#6dEh^3|E=kQR@klJr@J%cTOUx-v4KB$qN=#2x zV^CEI2=e!GbqOmjFH#6dEh^3|E=kQR@klJr@J%cTOUx-v4KB$qN=#2x wV^CEI2=e!Gbqf&rQtC)6dQ?$pKQnK(=0X$*8)~Z~>(Q0C88t+yDRo diff --git a/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab_i b/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab_i index a131b895d33f239f64fcba0d26179474083a2245..14c8c8e9247aa581e49abddc8a183bd902265173 100644 GIT binary patch delta 94 zcmWN?s}X=O6h*S&s;b@*LME<>j>!p delta 19 acmZo@U}|V!Vq)N($W*rRicbB+2QdIV+y@!} diff --git a/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab b/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab index c5032e08b0165b779032a08ac283f17a8d7afccd..79a0e6bb59f3cd05042521cf56c2b1a66623e4d1 100644 GIT binary patch literal 4096 zcmeIzQD|FL9Khkbt*dd?E>0*#WQH-M3>jq%$-|H$B4LOW5h*f85RoFI1Q7{CB*++L z3<*OI_l|CfqLY6g<3F$7 z+mn#;=@Xlh(EjS(>}Tt?BxHDy1Ki3%o=GPm%RGm8abps4+|OZVIKtDtNyu{#N4b1! z5(=!a$a`7hxt=79^BI8F50%WOJQ<7CFQ|=9o*ZgkhdqtDn1= z=j{aNgiK~LzOvBasEaerg?xhZeg9Zl{hrGmor@X zBMwbYu*E(u^4;Y)Bz&CF+9*nXk3)(_ndVOR^K24_3=14!F9&%djzgBaImFiWIOKSc z!`#Xdp7|{fdFDCF)ulKTc$7u%WQk{gjl(z#Ec5C${XD`+4zkLRf6>oo@0u4GR?QI>gNbEy#AwpzRW@HV3v(5`Z>lN zul%5&WsYz=^Zcl#pHH*E6pMW0d;NTX5^z#u$T~V~y)X$fg<~{7^hhOXGCu&=KkwrxFJ92k{VcMdCB8MQpO3Q4YhUVTnUm~cl_zKPbC}ay_(DGqv(9a7 zuzp@YpJJ0;Y_asYe%{T5@1N7ZK8l`TiV@R%?KAz{#SCZ9>SvLIT>4Z$Cpg3`b3EVB z&u2NpP0VxZ6a9Rc1-@xtD{>!8+20yk?_cD3`&z;=M*d@7uz#i4=ljxp)qQCiozaXVm_v@YpSA6H6J^Lr4=q~H{5nr+KYbWoEqN%^v_}^FN z`w%AV{^ivW;*ahy%@Q;G@}m&4e0vx|j+>`L$n!i4tZ|0>SY+pw5K27AIX- z5C%MbC4?botw(%>TfB2JgfXX=^s2n!%kuNkxAOB*>ohkO<>xB1oM(>H%(Hq~et!Lu z{H(FaeJpV|=Xkv;KaadGKa18?KEOJ+PRP#{Huxl)Y`iBwZ!gHt8|-k6UFO;2Czs^s z#*6ZEl>^Rm$VrYkx+p(e$K~fyMt4V1ffM}Z1^KztzBG?nXP9S}JDB6PWAgK>cjV{N z^YZg?7P*Thb}RBTvaif1tSj8fDt~=We!j+KPPOG{#=6O$=H+LP?fCu~`8n(Sy3Df2 zBOl1m8_u)O6%P0ehdkhYBQBW7Eso9Cm>Z1lF~^)>g(>bgM`_+PFBvZToGcHSiyX)C z`SVBTSKu}0HN(TsqsVD}m$+T8bKIk^GJlBk^QwGRrhb;6Z>-ACvhUg8g5O<}kFmup z+ni)4*6*y#O?i6U;5v7(&%IyB&ypNNz8=p%m*V;7XY!1BfzdWO^)$gDQ~W)ie_msT zO=h_m=jZk~KW~}u0@pah-IwKOT`wihbBm!9(YzFR*!>ySe2*gYH1)}qG>|lqG>|lqG>|lqG>|lqH1MAW{sh2i BU8?{9 diff --git a/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.keystream b/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.keystream index aaeb9c35a2a7ada2743102af2e9dc6e3b0afa0c6..b6544811b66eb8084d076f0e6511cb3e20976f64 100644 GIT binary patch literal 4096 zcmeIy`)ieT9Ki8MoqEvoLlZIlAzeD%kSUw1c^Wnmn>b4;5W>I<&fz777`J`m|-&UKuxi{u!$PtF2Y3T3YKom3trAbeO?d#74hts7tc6*e?R-2?>U3D zKV}Ev&*s%1|IHw$@)D}skN?DA$i&OY&+53rAh+}|vey5%fX^N#f8bZ&e!7+i$}`hg zaOm?K)+XAbevrQ?dfn8zRm1(hZp-2XgW}<7^u2vyfD3a92l;H*?l#^_w*13jR{9T^ zbJEbvA@k83oL=5Fn&x0KS$&{xFvzYw_3mU=6?SjugrB<>a>V|T<@CDF=9*=%oDc4> z>EB1QIq6F8tIYlW)-1mMyyq-W?P;D%e|Mw%;&EMiPE2fE=9%+Xrnl{DAJ^H^)H>sO zf{LEy4|=~`TJp}QfvB6@x!C*H z8XEOOqkd@A4~_bvQ9m^5herL-s2}?D;Mk50_bNa1I-38<*^Tw}GrPysq)ILvNwuxu znz31lUwg+784T|c%|YjLLv~*3rEk%FiVW`&&ByM^TN`Ok?k|0>h~}mHMDx&nqWNil znx7vn%DbHU?Tgi;`impYl|1oiwz=qBI*-nwK6R-}UFsBNs`GWILmlc+hdSJOq;MDY zs7Jkqg1fKjQIC4mqaO9BLmld*uWc;Wp$>JZLmlc+hdR{R)>-m~4t1zQ9qLerI@ICb zO;>JLG;Dc)$tQm{_01`pJOA;N6g}UZcjq(DbY4Y6ZKd;=d+wK`bS|As=hC@!E}cu~ zQZI9LYP=`9yp$>JZL!ECv=*s9&hdR`u4t1zQ9d3Q|6g|A_`=Y=8#8QvfbALbM+2`%MbEjMU-shR_HQhtHKlJ|7`$zkyebE0y^PGNO zRp$Ha*!_;%OrPvqPUjsSceE<}yp}r0Eb&jgfp`P)2I39G8;Ca$Zy?^l|8D~?0JjtdcHy~~_abM(lk>^F8Gj+Um*0R5=G`!kjG>oaG9-c=tRjkKW zUA{a^nwaTDR_X=0KGF+vALKsBeUR&EpUzc~M{-CG$sxItguOt}>wQQb$s>6rkK|p2 z-`A5va!3xzAvy1RTNybdhvbkPlDil(Y$1o_kQ|aja%Pv)LJr9xIV6YV67LS@kwbDw z4#^?8oBKW{$RRl-hvZPmw!CIvVL*GSo^{ANWF4{&S%>G3G=E_kruJWFQqVbv>T;2N zgpYnsM%Z8MqYv(RHF@@l?7!>qeM)f``_#l_#+``A;R*o3>Yi<7u``Dzenwf?V2KJ|W6;a7v!;&3~1 zocCZora6ixYR%J4zoJ(T7WTrP}ynbdpVs^FdZD@JxiEXc}s`-;=MCMOB zznx}A{pjNXdS*ScJ~h)jGjg8(nUVh^{zvEwJKO3-`g|e=&hou%SehO|LG|Du($DSD uVZXoQWIr?e2U{`%3p^L{JX}NhC=DnLC=DnLC=DnLC=DnLC=L8?4g3X9Zf-LG diff --git a/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.keystream.len b/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.keystream.len index 7e2aa701814d75a6888a9d54ebbc581de27eee42..524efa94e704bf7633d3f369a3850d5f32e62a78 100644 GIT binary patch literal 8 McmZQz00A}$001li9{>OV literal 8 McmZQz00Gtr003$LUH||9 diff --git a/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.len b/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.len index 6f9277755f2a2662da0c3f268d9410e7c0467208..2c16e3d38724874d70605728363245878c033ef8 100644 GIT binary patch literal 8 McmZQz00Fic00682p8x;= literal 8 McmZQz00Gt;008O$-T(jq diff --git a/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.values b/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.values index a18f7d289f80b03dc428f412fc5514102f5887ae..22512a2f79d89de116b92767d0e95163a34fa150 100644 GIT binary patch literal 6488 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 x>bDw?idk4dw_&bSZ}Th2Ol)A-6<7 literal 2569 zcmYjTe`r!WfDPsJT}$Btw2}GV-4kTR5aue@sa>A zRU$t895lpPxxqi6m+?nAEppA;R_J}4)eFeymqyWoHIr6nBMqHilME5oLQ9aZm6Hi; z*(nqL6X8+c(ueqso}pR3A}YOVH!Z zbrT%34_bv9T^VD_%{anGLRZh}DU@p)0cZXn@B_Vsw4S8xD|nHoIXcGm73625+(DP# z(|cm?$^HQUlH%lu$uRP@NNEMmx?kCx*SWiG!lL`JPPZe4&&4|qZAHqRhBm~|b?zv1 zpRr+Y)+_w&=I*`!?Y_lRUe!_lj!BAf+UI<}C91lWVg#9sDVx80qy$-4Ldboi%`m!! zjj6_`eopiYyx{M(ok-&k!fdwc9R&WnV7}kho*38S&p`iSY~0_|>uAwVA{fCl#ILkS z%Jnn6peJyMM+W*K*AtB7Z5c}yr+%~u0i+>qgGu!}+MG71MpQeJwjHcPGY(iHiSEG) z?P4@Xp{uwwie1cJgllcji&<08BWnTdFUS7fx02Yp2Bpxt4cEly3(Q=HBl zn{i-v#M`ZLUV+Y{(j1H-H=)~TvkFUeCs!E9Ovg}0V_33hXX-sHF-PNn1`A&F4dkDg ze!~osy38y!Z0b8E4uAz+s?T6QlZn!oQY?ZupTK}5tJ5fhT!Ht%&D0@kD6>t|Mzp)9 zEiVExY7OJc>ICaDD2^V(H`qMOg>p7JOX#aQB%*(ZBMZg06k|rO7>{kr5-g;f1!eU$ zK7T>O!%iWt5x%c}8vX*B^tXHm9SjlM$rcZC-OH9==l?tSyq1{PxRyzaPO-0_>P;hB z$`IE(&$}bgPn?3IX*{oo3A9e9@Rm%MNwa7Bo}No)Zc^Nkd+_#n1emD#xMve?MTdU| zKKa>i$B1_jK?8IW8|iwne=26Debi}kyo-OGgxs-~UblGjq7_W|bS##Xo+GRkKV>}< z?AZ;ZWFc#j>zRiW>1}R*X@>nqLw6eSytYIftdvCFZVBcb*0&J-ge>-bJ6IO$D&mfC z?P427xZXB_{|GuwRqkgv+imQ$vz`}gkF3xKEcGQji8lFt4v+Yz-gj2`N1#aL=VZc5 z-j224*QL(4=2umPUb`E-M=`6xFOZBZ3OJz7! z(8UlcbzTB;r80aEGG&duUx?ReJo79!>6sMz1?L{hFJ- z&gS0-Pn>wZ9!;#Vr%fdC`5L*LPIm^DF+sKGT`Hn5WHjad zJ575(YR_eCT~?x7ud&Bv_VVz?VakxX16B>vP*MPW2RzRuP3xbRL@5ylXIjy_R%5u9TKhCD9FHRW^hR4km&(uNR6Bq z?M6GZe~wCZq)zk^d~Ht_a-L)eT~G7hE;Zb?DRdc^<2;tK3_(wbuNTq4_&PZ_YxErT z)J8#$@VT4kj&uD?Hj>dS+!>v53KzmyVi)JGqm4;>Z`E*k@1pDq&o}TFnJLc9`?i=x z57`dSM zeLIGF^ELc&M^{T$8so2lHYX{4j(r*CjT^Z-Doy?cXel{WA@y36*i50@3n`^rB&#KE zA>%Pw#LK)!YRh$-Nop@@^&#PtiFnMskEARZy-fO5kR1 diff --git a/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.values.at b/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.values.at index 52e2d18a278ca6a396769cf0bf42bea7784ed25b..16124a4ff6b24f43dfbcb810e7db6f80d397c4ee 100644 GIT binary patch literal 27889 zcmeI5$xg#S5JZP1ggt~U960o6aqR#93aZ8=M#9ViWDPQ}rLrP98B5hw<*_YKO1Uhh zTnX30jc_Y$ggap?+zSuFqwpj=3%fUMY8`2NESw0Z!b&(3*20fQPW`Y}Yvgl%<3ivF zu+&g#Rv~EvOABWy+-VYvOtcPg`@-Fx?y`$c)9F(F_-xSA;<8I`U1+weX2U&Troc?W zI>3uvy_oKSi#{y858*D8x}>gkfZMyeJ=_Dlh!?E`yx7%?=^nUd>qB^S+>YC=gV|J; z9^J(e8hH|C2ruGA>j0-ToRVh9H5*Ie(eWZ)v<_xdS$cFAN9gMItWBT~?ZjIGOW{tF z>*Tt1KYHTD|};oej_gG zdbTh&-j_um=tCNCkuapg#OmKs#eqJ=0Qx{5xZ&_jS5z?j{Pc_)KA1~=!~=6F&Xt@i YIahM7}Uc4l~SH@h&t@qlQ{-t>!vKAZV zjZMtTqTyJkax5$a@qHqgr*?btB!W>}Uxec}kTl(HUK11J5Zs}{-n%+lTv1zZ>M#~nf zmX7pxqP_)}gRQSQ|6sBfmJ%Gz_qdd54u)J%$CdN^hY(nn}g0y*6Vglmg-|9eoI|tOI`am5^0P|l>06=#Wr6!`?irbDNaA{--HFF)>B=AvsNEfmx%ky zA>#eF*;q5yW|0~^7s*M$KJn16h4Y~+K*iJcHs9jt&m4} z%T7s<5$vVvOzT{f{0ZW8b&xJmmn{?(1d!S%A4=JtSbe%nY?cT_rl&n_lyt zW(mbW$FQc?hkrlPIO)taw!G;)OgI9sG{YUW?DKsu^;BkD*`o7ipTq2uG=HaY5M~;? zM!TdhjwM^M7M)`srk1*VmM1D8t%gc=w|hXXnG2sh0O zBTggtlb*ps=J{Pu& zmYU1?nwnKS(n607%RMo4n_%ATM>dte@Dm9>8EdCPoj-E-f3>67L$ z`E>ZC{cI9LkOFcJ@m_dZ>rn{eZk*G86t+6$x$;|UrN?i%M+ApAP<6$eK4Jr`G_LEB zX>Br%=doAoc5@Ezfxi;{BewI=kIg^gw!ER!jbeU=N;=W1ug*~@Mf|1v_v(mWFpRDZ zM#r#kdMUz`x!nUPaP!bmth=fhju+MnxEq$HXw$axtd+ z6`8({qcQt!xNK5bIENEu0sb2ro5ncC+>)`&TTIjJdtP}q)<_DOlWK)3(xxkhJxAR- z^C$ETFUh}Pp2#@m9vh4P6~RBk%DG=N{p3L8+OIE`Q?D3teooSIfpT4rU!=zt^O%=C zbx+6>UScd`nBQlux!&tYx%Lq;9C9pU`X0fv>|zJ&J=f$mwji xJ{TE{B=g({%;oi}jm=>48WHKi#o!S7^YA>f=Sm>^GpZY+Hs-tYF6M@+`+vH958VI& diff --git a/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.values.s b/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.values.s index c13278a..9cebaac 100644 --- a/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.values.s +++ b/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.values.s @@ -1 +1 @@ -( \ No newline at end of file + \ No newline at end of file diff --git a/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab_i b/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab_i index 45d00720fa9a1b6ed6c149bcd84c5c6926b3c747..f52194127ed874f2b00effa96823ccaf81539b97 100644 GIT binary patch literal 32768 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 diff --git a/build/kotlin/compileKotlin/last-build.bin b/build/kotlin/compileKotlin/last-build.bin index cc93e429c0821628b8ddb40091e5fe26d454b405..d00011f58b1147ab479b52283cb2c50195f95220 100644 GIT binary patch delta 9 QcmWFxoZ!oHXxBOc01@5;z5oCK delta 9 QcmWFxoZ!ncF~Vyb01wgwZ2$lO diff --git a/src/main/kotlin/Main.kt b/src/main/kotlin/Main.kt index 59fcf7d..afd9677 100644 --- a/src/main/kotlin/Main.kt +++ b/src/main/kotlin/Main.kt @@ -24,12 +24,6 @@ fun main() { // это всего лишь имитация, реальное переключение между потоками будет рассмотрено на следующем семинаре println("Start Q1"); - - //Single.timer(1L,TimeUnit.MILLISECONDS).blockingSubscribe({println("0")},{println("error")}); - //Some Emission - //Some Emission - //val singleSource = Maybe.just("single item"); - /// maybe_array = Maybe.fromCallable ( {requestDataFromServerAsync();} ); /* val count = -1 require(count >= 0) { println("Count must be non-negative, was $count") } @@ -47,81 +41,49 @@ fun main() { }).blockingSubscribe({s : ByteArray? -> println("Item received: from Maybe"+s.contentToString()); }, { obj: Throwable -> obj.printStackTrace() } ) { println("Done from MaybeSource") } - - - - /* singleSource.subscribe( - { s: String -> println("Item received: from singleSource $s") }, - { obj: Throwable -> obj.printStackTrace() } - ) { println("Done from SingleSource") } - */ - - - // Maybe maybe_array = Maybe.just("single item"); - // Maybe.blockingSubscribe({},{}); - // Maybe.fromCallable ( requestDataFromServerAsync() ) println("Finished Q1"); - println("Start Q2"); - //requestServerAsync(); - //assertTrue( is Unit); - /* val callable1 = object : Callable { - override fun call(): Int = 1 - } - val c1 = createCallable(callable1) - println("callable1 = ${c1.call()}") - - val callable2 = object : Callable { - override fun call(): Unit { println("Hello"); throw Exception("Hello") } - } - val c2 = createCallable(callable2) - c2.call() - - */ - Completable.fromCallable ( object: Callable { override fun call(): Unit { requestServerAsync()}} ). subscribe({println("Successful");}, { obj: Throwable -> obj.printStackTrace() } ); - //.fromCallable(requestServerAsync()) - //.timer(1L,TimeUnit.MILLISECONDS).blockingSubscribe({println("2")},{println("error2")}); - - println("Finished Q2"); println("Start Q3"); - //val val1 = requestDataFromDbAsync(); - - /* Single.fromCallable ({ - var result: Int? = requestDataFromDbAsync() } - ).onErrorComplete(println("eee")) -*/ - // - //onErrorComplete(result: Throwable -> println("--")) - - /* blockingSubscribe({println("Successful");}, - { obj: Throwable -> obj.printStackTrace() }) - - */ - + Single.fromCallable ({ + var result: Int? = requestDataFromDbAsync() + result + } + ).onErrorComplete{throwable : Throwable -> throwable is NullPointerException}. + blockingSubscribe({println("Item received: from Single:$it")}, { obj: Throwable -> obj.printStackTrace() },{println("Item received: from Single:null")}); -/* ({s : Int? -> println("Item received: from Single:"+s.toString()}) - { obj: Throwable -> obj.printStackTrace() }) - */ + Maybe.fromCallable ({ + var result: Int? = requestDataFromDbAsync() + result + } + ). + blockingSubscribe({println("Item received: from Maybe:$it")}, { obj: Throwable -> obj.printStackTrace() },{println("Item received: from Maybe: null")}); println("Finish Q3"); println("Start Q4"); - emitEachSecond(); + //emitEachSecond(); println("Finish Q4"); - + println("Start Q5"); + xMap { flatMapCompletable(it) } + xMap { concatMapCompletable (it) } + xMap { switchMapCompletable(it) } + println("Finish Q5"); } + + // 1) Какой источник лучше всего подойдёт для запроса на сервер, который возвращает результат? -// Maybe +// Maybe - ну результат он возвращает(испускает более правильно в этом паттерне) .. +// ну и null в отличии от Single допускает... // Почему? // Согласно лекции номер 2 // Дописать функцию @@ -131,8 +93,8 @@ fun requestDataFromServerAsync() : ByteArray? /* -> ??? */ { fun getDataFromServerSync(): ByteArray? { Thread.sleep(LATENCY); val success = Random.nextBoolean() - //return if (success) Random.nextBytes(RESPONSE_LENGTH) else null - return Random.nextBytes(RESPONSE_LENGTH) + return if (success) Random.nextBytes(RESPONSE_LENGTH) else null + //return Random.nextBytes(RESPONSE_LENGTH) } return getDataFromServerSync() @@ -143,7 +105,8 @@ fun requestDataFromServerAsync() : ByteArray? /* -> ??? */ { // 2) Какой источник лучше всего подойдёт для запроса на сервер, который НЕ возвращает результат? //Completable // Почему? -// По определению .. +// По определению ..- заточен на какое то действие без возврата результата - а ля типа procedure vs function +// по реализации - можно завернуть иксепшен что бы не делать сверху генерации ошибки - ну если это надо. // Дописать функцию fun requestServerAsync() :Unit /* -> ??? */ { @@ -157,21 +120,47 @@ fun requestServerAsync() :Unit /* -> ??? */ { } // 3) Какой источник лучше всего подойдёт для однократного асинхронного возвращения значения из базы данных? -//Single +// Можно конечно использовать Maybe- Но неуверен насчет однократного ? (возвращает null в отличии Single ) НО +// Single согласно документации одно "испускание" делает - соответственно через обработчик ошибки +// на null - обойдем это +// Сделал и так и этак - см. выше // Почему? -//Single — реактивный Callable, потому что тут появляется возможность вернуть результат операции. Продолжая сравнение с Kotlin, можно сказать, что Single — это fun single(): T { }. Таким образом, чтобы подписаться на него, необходимо реализовать onSuccess(T) и onError. +fun requestDataFromDbAsync1() /* -> ??? */ { + // Функция имитирует синхронный запрос к БД не возвращающий результата + fun getDataFromDbSync(): T? { + Thread.sleep(LATENCY); return null + } + //NullPointerException + /* return */ + return Maybe.fromCallable { getDataFromDbSync() } + .blockingSubscribe( + { println(":"+it) }, { println("database request error") }, { println("database request complete") }) +} // Дописать функцию fun requestDataFromDbAsync() : T? /* -> ??? */ { // Функция имитирует синхронный запрос к БД не возвращающий результата fun getDataFromDbSync(): T? { + //val s : Int? = 1 Thread.sleep(LATENCY); return null } return getDataFromDbSync() + /* return */ } +// Дописать функцию +fun requestDataFromDbAsync2() : Int? /* -> ??? */ { + // Функция имитирует синхронный запрос к БД не возвращающий результата + fun getDataFromDbSync(): Int? { + //val s : Int? = 1 + Thread.sleep(LATENCY); return null + } + return getDataFromDbSync() + + /* return */ +} // 4) Примените к источнику оператор (несколько операторов), которые приведут к тому, чтобы элемент из источника // отправлялся раз в секунду (оригинальный источник делает это в 2 раза чаще). // Значения должны идти последовательно (0, 1, 2 ...) @@ -199,8 +188,16 @@ fun emitEachSecond() { // Вызов осуществлять поочерёдно из функции main // // xMap { flatMapCompletable(it) } +// возвращает (emit?) результат чисто внешне в рандомном порядке +// в терминологии этого паттерна - генерит один стрим(несколько) и маппиться напрямую в конечный стрим без гарантии сохранения порядка // xMap { concatMapCompletable (it) } +// возвращает (emit?) результат чисто внешне в отсортированном по возрастании порядке +// в терминологии этого паттерна - генерит один стрим(несколько) и маппиться напрямую в конечный стрим сохраняя порядок // xMap { switchMapCompletable(it) } +// возвращает (emit?) результат чисто внешне обрезает и отдает крайний результат +// в терминологии этого паттерна(не уверен) - генерит один стрим(несколько) элементв видно не пропускаються и маппиться крайний элемент по порядку. +// Говорят нужно например при вводе символов .... +// // fun xMap(mapper: Flowable.(internalMapper: (Int) -> Completable) -> Completable) { From 8712d83a455f82a70f70e1dec813237d3e0d9523 Mon Sep 17 00:00:00 2001 From: gleb molotkov Date: Tue, 3 May 2022 23:23:20 +0300 Subject: [PATCH 5/5] =?UTF-8?q?my=20second=20step=20-=20=D0=A1=D0=B4=D0=B5?= =?UTF-8?q?=D0=BB=D0=B0=D0=BB=20=D0=B4=D0=B2=D0=B0=20=D0=B2=D0=B0=D1=80?= =?UTF-8?q?=D0=B8=D0=B0=D0=BD=D1=82=D0=B0=20=D0=BD=D0=B0=D0=BF=D0=B8=D1=81?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D1=8F=20=D1=84=D1=83=D0=BD=D1=86=D0=B8=D0=B9?= =?UTF-8?q?=20-=201=D1=8B=D0=B9=20=D0=B2=D0=B0=D1=80=D0=B8=D0=B0=D0=BD?= =?UTF-8?q?=D1=82=20-=20=D0=BA=D0=B0=D0=BD=D1=87=D0=B8=D0=B2=D0=B0=D0=B5?= =?UTF-8?q?=D1=82=D1=81=D1=8F=20=D0=BD=D0=B0=20=D1=81=D1=83=D1=84=D1=84?= =?UTF-8?q?=D0=B8=D0=BA=D1=81=202=20-=20=D0=B7=D0=B4=D0=B5=D1=81=D1=8C=20?= =?UTF-8?q?=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=B8=20=D0=B7=D0=B0=D1=82?= =?UTF-8?q?=D0=BE=D1=87=D0=B5=D0=BD=D1=8B=D0=B4=D0=BB=D1=8F=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B8=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B2=20?= =?UTF-8?q?=D1=81=D0=BE=D0=BE=D1=82=D0=B2=D0=B5=D1=82=D1=81=D1=82=D0=B2?= =?UTF-8?q?=D1=83=D1=8E=D1=89=D0=B8=D1=85=20=D0=B8=D0=B7=D0=BB=D1=83=D1=87?= =?UTF-8?q?=D0=B0=D1=82=D0=B5=D0=BB=D1=8F=D1=85-=202=D0=BE=D0=B9=20=D0=B2?= =?UTF-8?q?=D0=B0=D1=80=D0=B8=D0=B0=D0=BD=D1=82=20-=20=D1=81=D0=BE=D0=BE?= =?UTF-8?q?=D1=82=D0=B2=D0=B5=D1=82=D1=81=D1=82=D0=B2=D1=83=D1=8E=D1=89?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=B8=D0=B7=D0=BB=D1=83=D1=87=D0=B0=D1=82=D0=B5?= =?UTF-8?q?=D0=BB=D0=B8=20=D0=B2=D1=81=D1=82=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D1=8B=20=D0=B2=20=D1=81=D0=B0=D0=BC=D0=B8=20=D1=84=D1=83=D0=BD?= =?UTF-8?q?=D0=BA=D1=86=D0=B8=D0=B8=204=20=D0=B2=D0=BE=D0=BF=D1=80=D0=BE?= =?UTF-8?q?=D1=81=20=D0=B2=D1=8B=D0=B7=D0=BE=D0=B2=20=D1=84-=D1=86=D0=B8?= =?UTF-8?q?=D0=B8=20=D1=85=D0=BE=D1=82=D0=B5=D0=BB=20=D0=B7=D0=B0=D0=BA?= =?UTF-8?q?=D0=BE=D0=BC=D0=BC=D0=B5=D0=BD=D1=82=D0=B0=D1=80=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20-=20=D0=BF=D0=BE=D1=82=D0=BE=D0=BC=20=D0=BF=D0=B5?= =?UTF-8?q?=D1=80=D0=B5=D0=B4=D1=83=D0=BC=D0=B0=D0=BB=20-=20=20=D0=B2?= =?UTF-8?q?=D0=B5=D1=80=D0=BE=D1=8F=D1=82=D0=BD=D0=BE=20=D1=82=D0=B0=D0=BA?= =?UTF-8?q?=20=D1=83=D0=B4=D0=BE=D0=B1=D0=BD=D0=B5=D0=B5=20=D0=B1=D1=83?= =?UTF-8?q?=D0=B4=D0=B5=D1=82=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D1=8F?= =?UTF-8?q?=D1=82=D1=8C=3F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/gradle.xml | 2 + src/main/kotlin/Main.kt | 135 +++++++++++++++++++++++++++++++++------- 2 files changed, 116 insertions(+), 21 deletions(-) diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 5404067..b761426 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -4,6 +4,7 @@ diff --git a/src/main/kotlin/Main.kt b/src/main/kotlin/Main.kt index afd9677..6c9c024 100644 --- a/src/main/kotlin/Main.kt +++ b/src/main/kotlin/Main.kt @@ -22,6 +22,12 @@ fun main() { // // Несмотря на то, что в некоторых заданиях фигурируют слова "синхронный" и "асинхронный" в рамках текущего ДЗ // это всего лишь имитация, реальное переключение между потоками будет рассмотрено на следующем семинаре + // - Сделал два варианта написания фунций - 1ый вариант - оканчивается на суффикс 2 - здесь функции заточены + // для применения в соответствующих излучателях + // - 2ой вариант - соответствующие излучатели вставлены в сами функции + // - 4 вопрос вызов ф-ции хотел закомментарить - потом передумал - вероятно так удобнее будет проверять? + // + println("Start Q1"); /* @@ -31,43 +37,57 @@ fun main() { //println("require(requestServerAsync() is Unit)"+require(requestServerAsync() is Unit)); */ Maybe.fromCallable( { - // val arr: Array = arrayOfNulls(1); - //val arr: ByteArray? = arrayOfNulls(1) - // don't know standart fun like arrayOfNulls for List - // var result: MutableList = arr.toMutableList(); //arrayListOf(list.size); - var result: ByteArray? = requestDataFromServerAsync() + var result: ByteArray? = requestDataFromServerAsync2() // val result: = ""; result - }).blockingSubscribe({s : ByteArray? -> println("Item received: from Maybe"+s.contentToString()); - }, - { obj: Throwable -> obj.printStackTrace() } ) { println("Done from MaybeSource") } + }).blockingSubscribe( + {s : ByteArray? -> println("2Item received: from Maybe"+s.contentToString()); }, + { obj: Throwable -> obj.printStackTrace() } ) + { println("2Done from MaybeSource") } + + requestDataFromServerAsync().blockingSubscribe( + {s : ByteArray? -> println("Item received: from Maybe"+s.contentToString()); }, + { obj: Throwable -> obj.printStackTrace() } ) + { println("Done from MaybeSource") } + println("Finished Q1"); println("Start Q2"); Completable.fromCallable ( object: Callable { - override fun call(): Unit { requestServerAsync()}} ). - subscribe({println("Successful");}, + override fun call(): Unit { requestServerAsync2()}} ). + subscribe({println("2Successful");}, + { obj: Throwable -> obj.printStackTrace() } ); + + requestServerAsync().subscribe({println("Successful");}, { obj: Throwable -> obj.printStackTrace() } ); println("Finished Q2"); println("Start Q3"); Single.fromCallable ({ - var result: Int? = requestDataFromDbAsync() + var result: Int? = requestDataFromDbAsync2() result } ).onErrorComplete{throwable : Throwable -> throwable is NullPointerException}. + blockingSubscribe({println("2S_Item received: from Single:$it")}, { obj: Throwable -> obj.printStackTrace() },{println("2S_Item received: from Single:null")}); + + requestDataFromDbAsyncSingle().onErrorComplete{throwable : Throwable -> throwable is NullPointerException}. blockingSubscribe({println("Item received: from Single:$it")}, { obj: Throwable -> obj.printStackTrace() },{println("Item received: from Single:null")}); +/// Maybe.fromCallable ({ - var result: Int? = requestDataFromDbAsync() + var result: Int? = requestDataFromDbAsync2() result } - ). - blockingSubscribe({println("Item received: from Maybe:$it")}, { obj: Throwable -> obj.printStackTrace() },{println("Item received: from Maybe: null")}); + ).blockingSubscribe({println("2M_Item received: from Maybe:$it")}, { obj: Throwable -> obj.printStackTrace() },{println("2M_Item received: from Maybe: null")}); + + requestDataFromDbAsync().blockingSubscribe({println("Any? -Item received: from Maybe:$it")}, { obj: Throwable -> obj.printStackTrace() },{println("Any? Item received: from Maybe: null")}); + // Конкретный тип + requestDataFromDbAsync().blockingSubscribe({println("Int?Item received: from Maybe:$it")}, { obj: Throwable -> obj.printStackTrace() },{println("Int? Item received: from Maybe: null")}); + println("Finish Q3"); println("Start Q4"); - //emitEachSecond(); + emitEachSecond(); println("Finish Q4"); println("Start Q5"); @@ -84,11 +104,18 @@ fun main() { // 1) Какой источник лучше всего подойдёт для запроса на сервер, который возвращает результат? // Maybe - ну результат он возвращает(испускает более правильно в этом паттерне) .. // ну и null в отличии от Single допускает... +// Можно использовать Observable - но он как бы depricated ? ибо - MissingBackpressureException или OutOfMemoryError +// но согласно спекам (*) - он подходит на все случаи +/*В RxJava есть три специализированных источника, представляющих собой подмножество Observable. +(Single Completable Maybe) +Третий тип — Maybe. +Он может либо содержать элемент, либо выдать ошибку, либо не содержать данных — этакий реактивный Optional. +*/ // Почему? // Согласно лекции номер 2 +//Он может либо содержать элемент, либо выдать ошибку, либо не содержать данных — этакий реактивный Optional. // Дописать функцию -fun requestDataFromServerAsync() : ByteArray? /* -> ??? */ { - +fun requestDataFromServerAsync2() : ByteArray? /* -> ??? */ { // Функция имитирует синхронный запрос на сервер, возвращающий результат fun getDataFromServerSync(): ByteArray? { Thread.sleep(LATENCY); @@ -101,14 +128,30 @@ fun requestDataFromServerAsync() : ByteArray? /* -> ??? */ { /* return ??? */ } +fun requestDataFromServerAsync() : Maybe /* ByteArray? *//* -> ??? */ { + // Функция имитирует синхронный запрос на сервер, возвращающий результат + fun getDataFromServerSync(): ByteArray? { + Thread.sleep(LATENCY); + val success = Random.nextBoolean() + return if (success) Random.nextBytes(RESPONSE_LENGTH) else null + //return Random.nextBytes(RESPONSE_LENGTH) + + } + return Maybe.fromCallable { getDataFromServerSync() } + /* return ??? */ +} + // 2) Какой источник лучше всего подойдёт для запроса на сервер, который НЕ возвращает результат? //Completable // Почему? // По определению ..- заточен на какое то действие без возврата результата - а ля типа procedure vs function // по реализации - можно завернуть иксепшен что бы не делать сверху генерации ошибки - ну если это надо. +//Он похож на void-метод. +//Он либо успешно завершает свою работу без каких-либо данных, либо бросает исключение. +//То есть это некий кусок кода, который можно запустить, и он либо успешно выполнится, либо завершится сбоем. // Дописать функцию -fun requestServerAsync() :Unit /* -> ??? */ { +fun requestServerAsync2() :Unit /* -> ??? */ { // Функция имитирует синхронный запрос на сервер, не возвращающий результат fun getDataFromServerSync() { @@ -118,13 +161,38 @@ fun requestServerAsync() :Unit /* -> ??? */ { return getDataFromServerSync() /* return ??? */ } +fun requestServerAsync() : Completable /*Unit*//* -> ??? */ { + + // Функция имитирует синхронный запрос на сервер, не возвращающий результат + fun getDataFromServerSync() { + Thread.sleep(LATENCY) + if (Random.nextBoolean()) throw ServerNotActiveException() + } + return Completable.fromCallable { getDataFromServerSync() } + /* return ??? */ +} // 3) Какой источник лучше всего подойдёт для однократного асинхронного возвращения значения из базы данных? // Можно конечно использовать Maybe- Но неуверен насчет однократного ? (возвращает null в отличии Single ) НО -// Single согласно документации одно "испускание" делает - соответственно через обработчик ошибки +// Single согласно документации одно "испускание" делает. +//Он либо содержит один элемент, либо выдаёт ошибку, +//так что это не столько последовательность элементов, +//сколько потенциально асинхронный источник одиночного элемента. +//Можете представлять его себе как обычный метод. +//Вы вызываете метод и получаете возвращаемое значение; либо метод бросает исключение. +// Только вот как при проброске исключения сделать что бы Single возвращал значение. +// - соответственно через обработчик ошибки // на null - обойдем это // Сделал и так и этак - см. выше // Почему? +// Больше склоняюсь к maybe - ибо - может либо содержать элемент, либо выдать ошибку, либо не содержать данных +// — этакий реактивный Optional. - но в условиях сказано что для однократного - это смущает - и пишете +// что ф-ция - не возвращающий результата - ? - и как интепретировать возврат null - функция все же +// что возвращает значение null ? + +// Непонятки - как такое может быть - Функция имитирует синхронный запрос к БД не возвращающий результата +// - подойдёт для однократного асинхронного возвращения значения из базы данных? + fun requestDataFromDbAsync1() /* -> ??? */ { // Функция имитирует синхронный запрос к БД не возвращающий результата fun getDataFromDbSync(): T? { @@ -138,7 +206,7 @@ fun requestDataFromDbAsync1() /* -> ??? */ { } // Дописать функцию -fun requestDataFromDbAsync() : T? /* -> ??? */ { +fun requestDataFromDbAsync2() : T? /* -> ??? */ { // Функция имитирует синхронный запрос к БД не возвращающий результата fun getDataFromDbSync(): T? { @@ -149,8 +217,33 @@ fun requestDataFromDbAsync() : T? /* -> ??? */ { /* return */ } + +fun requestDataFromDbAsync() : Maybe /* -> ??? */ { + + // Функция имитирует синхронный запрос к БД не возвращающий результата + fun getDataFromDbSync(): T? { + //val s : Int? = 1 + Thread.sleep(LATENCY); return null + } + return Maybe.fromCallable {getDataFromDbSync()} + + /* return */ +} +fun requestDataFromDbAsyncSingle() : Single /* -> ??? */ { + + // Функция имитирует синхронный запрос к БД не возвращающий результата + fun getDataFromDbSync(): T? { + //val s : Int? = 1 + Thread.sleep(LATENCY); return null + } + return Single.fromCallable {getDataFromDbSync()} + + /* return */ +} + + // Дописать функцию -fun requestDataFromDbAsync2() : Int? /* -> ??? */ { +fun requestDataFromDbAsync7() : Int? /* -> ??? */ { // Функция имитирует синхронный запрос к БД не возвращающий результата fun getDataFromDbSync(): Int? {