@@ -13,7 +13,6 @@ import com.badoo.reaktive.maybe.asCompletable
13
13
import com.badoo.reaktive.maybe.asObservable
14
14
import com.badoo.reaktive.maybe.asSingle
15
15
import com.badoo.reaktive.maybe.asSingleOrError
16
- import com.badoo.reaktive.maybe.defaultIfEmpty
17
16
import com.badoo.reaktive.maybe.doOnAfterSubscribe
18
17
import com.badoo.reaktive.maybe.doOnBeforeError
19
18
import com.badoo.reaktive.maybe.filter
@@ -121,14 +120,39 @@ class ReaktiveStreamBuilder(executor: IStreamExecutorProvider) : IStreamBuilder,
121
120
abstract fun wrappedAsObservable (): Observable <E >
122
121
}
123
122
124
- abstract inner class ReaktiveWrapper <E > : Wrapper <E >(), IStream<E> {
123
+ abstract inner class ReaktiveWrapper <E > : Wrapper <E >(), IStream.Many <E> {
125
124
abstract val wrapped: Source <* >
126
125
override fun iterateSynchronous (visitor : (E ) -> Unit ) {
127
126
throw UnsupportedOperationException (" Use IStreamExecutor.iterate" )
128
127
}
129
128
override suspend fun iterateSuspending (visitor : suspend (E ) -> Unit ) {
130
129
throw UnsupportedOperationException (" Use IStreamExecutor.iterateSuspending" )
131
130
}
131
+
132
+ override fun skip (count : Long ): IStream .Many <E > {
133
+ require(count >= 0L )
134
+ return WrapperMany (wrappedAsObservable().skip(count))
135
+ }
136
+
137
+ override fun count (): IStream .One <Int > {
138
+ return WrapperSingle (wrappedAsObservable().count())
139
+ }
140
+
141
+ override fun take (n : Int ): IStream .Many <E > {
142
+ return WrapperMany (wrappedAsObservable().take(n))
143
+ }
144
+
145
+ override fun toList (): IStream .One <List <E >> {
146
+ return WrapperSingle (wrappedAsObservable().toList())
147
+ }
148
+
149
+ override fun isEmpty (): IStream .One <Boolean > {
150
+ return WrapperSingle (wrappedAsObservable().isEmpty())
151
+ }
152
+
153
+ override fun exactlyOne (): IStream .One <E > {
154
+ return WrapperSingle (wrappedAsSingle())
155
+ }
132
156
}
133
157
134
158
inner class WrapperCompletable (val wrapped : Completable ) :
@@ -219,10 +243,6 @@ class ReaktiveStreamBuilder(executor: IStreamExecutorProvider) : IStreamBuilder,
219
243
throw UnsupportedOperationException (" Use IStreamExecutor.iterate" )
220
244
}
221
245
222
- override fun toList (): IStream .One <List <E >> {
223
- return WrapperSingle (wrapped.toList())
224
- }
225
-
226
246
override fun iterateSynchronous (visitor : (E ) -> Unit ) {
227
247
throw UnsupportedOperationException (" Use IStreamExecutor.iterate" )
228
248
}
@@ -269,18 +289,6 @@ class ReaktiveStreamBuilder(executor: IStreamExecutorProvider) : IStreamBuilder,
269
289
return merger(WrapperMany (a), WrapperMany (b))
270
290
}
271
291
272
- override fun skip (count : Long ): IStream .Many <E > {
273
- return WrapperMany (wrapped.skip(count))
274
- }
275
-
276
- override fun exactlyOne (): IStream .One <E > {
277
- return WrapperSingle (wrappedAsSingle())
278
- }
279
-
280
- override fun count (): IStream .One <Int > {
281
- return WrapperSingle (wrapped.count())
282
- }
283
-
284
292
override fun filterBySingle (condition : (E ) -> IStream .One <Boolean >): IStream .Many <E > {
285
293
return WrapperMany (wrapped.filterBySingle { condition(it).toReaktive() })
286
294
}
@@ -289,10 +297,6 @@ class ReaktiveStreamBuilder(executor: IStreamExecutorProvider) : IStreamBuilder,
289
297
return WrapperSingle (wrapped.firstOrDefault(defaultValue))
290
298
}
291
299
292
- override fun take (n : Int ): IStream .Many <E > {
293
- return WrapperMany (wrapped.take(n))
294
- }
295
-
296
300
override fun firstOrEmpty (): IStream .ZeroOrOne <E > {
297
301
return WrapperMaybe (wrappedAsMaybe())
298
302
}
@@ -469,19 +473,10 @@ class ReaktiveStreamBuilder(executor: IStreamExecutorProvider) : IStreamBuilder,
469
473
TODO (" Not yet implemented" )
470
474
}
471
475
472
- override fun skip (count : Long ): IStream .Many <E > {
473
- require(count >= 0L )
474
- return if (count == 0L ) this else IStream .empty()
475
- }
476
-
477
476
override fun exactlyOne (): IStream .One <E > {
478
477
return this
479
478
}
480
479
481
- override fun count (): IStream .One <Int > {
482
- return IStream .of(1 )
483
- }
484
-
485
480
override fun filterBySingle (condition : (E ) -> IStream .One <Boolean >): IStream .Many <E > {
486
481
return WrapperMany (wrapped.asObservable().filterBySingle { condition(it).toReaktive() })
487
482
}
@@ -490,10 +485,6 @@ class ReaktiveStreamBuilder(executor: IStreamExecutorProvider) : IStreamBuilder,
490
485
return this // there is always a first element
491
486
}
492
487
493
- override fun take (n : Int ): IStream .Many <E > {
494
- return if (n > 0 ) this else IStream .empty()
495
- }
496
-
497
488
override fun firstOrEmpty (): IStream .ZeroOrOne <E > {
498
489
return this // there is always a first element
499
490
}
@@ -503,7 +494,7 @@ class ReaktiveStreamBuilder(executor: IStreamExecutorProvider) : IStreamBuilder,
503
494
}
504
495
505
496
override fun isEmpty (): IStream .One <Boolean > {
506
- return IStream .of( false )
497
+ return WrapperSingle (wrapped.asObservable().isEmpty() )
507
498
}
508
499
509
500
override fun withIndex (): IStream .Many <IndexedValue <E >> {
@@ -561,10 +552,6 @@ class ReaktiveStreamBuilder(executor: IStreamExecutorProvider) : IStreamBuilder,
561
552
throw UnsupportedOperationException (" Use IStreamExecutor.iterate" )
562
553
}
563
554
564
- override fun toList (): IStream .One <List <E >> {
565
- return WrapperSingle (wrapped.asObservable().toList())
566
- }
567
-
568
555
override fun iterateSynchronous (visitor : (E ) -> Unit ) {
569
556
throw UnsupportedOperationException (" Use IStreamExecutor.iterate" )
570
557
}
@@ -615,18 +602,6 @@ class ReaktiveStreamBuilder(executor: IStreamExecutorProvider) : IStreamBuilder,
615
602
TODO (" Not yet implemented" )
616
603
}
617
604
618
- override fun skip (count : Long ): IStream .Many <E > {
619
- return if (count > 0 ) IStream .empty() else this
620
- }
621
-
622
- override fun exactlyOne (): IStream .One <E > {
623
- return WrapperSingle (wrappedAsSingle())
624
- }
625
-
626
- override fun count (): IStream .One <Int > {
627
- return WrapperSingle (wrapped.asObservable().count())
628
- }
629
-
630
605
override fun filterBySingle (condition : (E ) -> IStream .One <Boolean >): IStream .Many <E > {
631
606
return WrapperMany (wrapped.asObservable().filterBySingle { condition(it).toReaktive() })
632
607
}
@@ -635,10 +610,6 @@ class ReaktiveStreamBuilder(executor: IStreamExecutorProvider) : IStreamBuilder,
635
610
return WrapperSingle (wrapped.asSingle(defaultValue))
636
611
}
637
612
638
- override fun take (n : Int ): IStream .Many <E > {
639
- return if (n > 0 ) this else IStream .empty()
640
- }
641
-
642
613
override fun firstOrEmpty (): IStream .ZeroOrOne <E > {
643
614
return this
644
615
}
@@ -647,10 +618,6 @@ class ReaktiveStreamBuilder(executor: IStreamExecutorProvider) : IStreamBuilder,
647
618
return WrapperMany (wrapped.asObservable().switchIfEmpty { alternative().toReaktive() })
648
619
}
649
620
650
- override fun isEmpty (): IStream .One <Boolean > {
651
- return WrapperSingle (wrapped.map { false }.defaultIfEmpty(true ))
652
- }
653
-
654
621
override fun withIndex (): IStream .Many <IndexedValue <E >> {
655
622
return WrapperMaybe (wrapped.map { IndexedValue (0 , it) })
656
623
}
0 commit comments