0001
0009 import Foundation
0010
0011 class SwitchSinkSwitch.swift:87 | typealias Parent = SwitchSink<SourceType, S, O> |
Switch.swift:136 | final class SwitchIdentitySink<S: ObservableConvertibleType, O: ObserverType where O.E == S.E> : SwitchSink<S, S, O> { |
Switch.swift:146 | final class MapSwitchSink<SourceType, S: ObservableConvertibleType, O: ObserverType where O.E == S.E> : SwitchSink<SourceType, S, O> { |
<SourceTypeSwitch.swift:16 | typealias E = SourceType |
Switch.swift:32 | func run(source: Observable<SourceType>) -> Disposable { |
Switch.swift:42 | func performMap(element: SourceType) throws -> S { |
, SSwitch.swift:42 | func performMap(element: SourceType) throws -> S { |
: ObservableConvertibleType, OSwitch.swift:12 | : Sink<O> |
Switch.swift:28 | override init(observer: O) { |
: ObserverType where S.E == O.E>
0012 : Sink<O>
0013 , ObserverType
0014 , LockOwnerType
0015 , SynchronizedOnType {
0016 typealias ESwitch.swift:38 | func on(event: Event<E>) { |
Switch.swift:46 | func _synchronized_on(event: Event<E>) { |
= SourceType
0017
0018 private let _subscriptionsSwitch.swift:34 | _subscriptions.disposable = subscription |
Switch.swift:35 | return StableCompositeDisposable.create(_subscriptions, _innerSubscription) |
Switch.swift:72 | _subscriptions.dispose() |
: SingleAssignmentDisposable = SingleAssignmentDisposable()
0019 private let _innerSubscriptionSwitch.swift:35 | return StableCompositeDisposable.create(_subscriptions, _innerSubscription) |
Switch.swift:56 | _innerSubscription.disposable = d |
: SerialDisposable = SerialDisposable()
0020
0021 let _lockSwitch.swift:94 | return _parent._lock |
= NSRecursiveLock()
0022
0023 private var _stoppedSwitch.swift:70 | _stopped = true |
Switch.swift:126 | if _parent._stopped { |
= false
0025 private var _latestSwitch.swift:52 | _latest = _latest &+ 1 |
Switch.swift:52 | _latest = _latest &+ 1 |
Switch.swift:53 | let latest = _latest |
Switch.swift:114 | if _parent._latest != _id { |
= 0
0026 private var _hasLatestSwitch.swift:51 | _hasLatest = true |
Switch.swift:74 | if !_hasLatest { |
Switch.swift:125 | _parent._hasLatest = false |
= false
0027
0028 override initSwitch.swift:138 | super.init(observer: observer) |
Switch.swift:153 | super.init(observer: observer) |
(observer: O) {
0029 super.init(observer: observer)
0030 }
0031
0032 func runSwitch.swift:172 | sink.disposable = sink.run(_source) |
Switch.swift:190 | sink.disposable = sink.run(_source) |
(source: Observable<SourceType>) -> Disposable {
0033 let subscription = source.subscribe(self)
0034 _subscriptions.disposable = subscription
0035 return StableCompositeDisposable.create(_subscriptions, _innerSubscription)
0036 }
0037
0038 func on(event: Event<E>) {
0039 synchronizedOn(event)
0040 }
0041
0042 func performMapSwitch.swift:50 | let observable = try performMap(element).asObservable() |
(element: SourceType) throws -> S {
0043 abstractMethod()
0044 }
0045
0046 func _synchronized_on(event: Event<E>) {
0047 switch event {
0048 case .Next(let element):
0049 do {
0050 let observable = try performMap(element).asObservable()
0051 _hasLatest = true
0052 _latest = _latest &+ 1
0053 let latest = _latest
0054
0055 let d = SingleAssignmentDisposable()
0056 _innerSubscription.disposable = d
0057
0058 let observer = SwitchSinkIter(parent: self, id: latest, _self: d)
0059 let disposable = observable.subscribe(observer)
0060 d.disposable = disposable
0061 }
0062 catch let error {
0063 forwardOn(.Error(error))
0064 dispose()
0065 }
0066 case .Error(let error):
0067 forwardOn(.Error(error))
0068 dispose()
0069 case .Completed:
0070 _stopped = true
0071
0072 _subscriptions.dispose()
0073
0074 if !_hasLatest {
0075 forwardOn(.Completed)
0076 dispose()
0077 }
0078 }
0079 }
0080 }
0081
0082 class SwitchSinkIterSwitch.swift:58 | let observer = SwitchSinkIter(parent: self, id: latest, _self: d) |
<SourceTypeSwitch.swift:87 | typealias Parent = SwitchSink<SourceType, S, O> |
, SSwitch.swift:86 | typealias E = S.E |
Switch.swift:87 | typealias Parent = SwitchSink<SourceType, S, O> |
: ObservableConvertibleType, OSwitch.swift:87 | typealias Parent = SwitchSink<SourceType, S, O> |
: ObserverType where S.E == O.E>
0083 : ObserverType
0084 , LockOwnerType
0085 , SynchronizedOnType {
0086 typealias ESwitch.swift:103 | func on(event: Event<E>) { |
Switch.swift:107 | func _synchronized_on(event: Event<E>) { |
= S.E
0087 typealias ParentSwitch.swift:89 | private let _parent: Parent |
Switch.swift:97 | init(parent: Parent, id: Int, _self: Disposable) { |
= SwitchSink<SourceType, S, O>
0088
0089 private let _parentSwitch.swift:94 | return _parent._lock |
Switch.swift:98 | _parent = parent |
Switch.swift:114 | if _parent._latest != _id { |
Switch.swift:120 | _parent.forwardOn(event) |
Switch.swift:122 | _parent.forwardOn(event) |
Switch.swift:123 | _parent.dispose() |
Switch.swift:125 | _parent._hasLatest = false |
Switch.swift:126 | if _parent._stopped { |
Switch.swift:127 | _parent.forwardOn(event) |
Switch.swift:128 | _parent.dispose() |
: Parent
0090 private let _idSwitch.swift:99 | _id = id |
Switch.swift:114 | if _parent._latest != _id { |
: Int
0091 private let _selfSwitch.swift:100 | self._self = _self |
Switch.swift:111 | _self.dispose() |
: Disposable
0092
0093 var _lock: NSRecursiveLock {
0094 return _parent._lock
0095 }
0096
0097 initSwitch.swift:58 | let observer = SwitchSinkIter(parent: self, id: latest, _self: d) |
(parent: Parent, id: Int, _self: Disposable) {
0098 _parent = parent
0099 _id = id
0100 self._self = _self
0101 }
0102
0103 func on(event: Event<E>) {
0104 synchronizedOn(event)
0105 }
0106
0107 func _synchronized_on(event: Event<E>) {
0108 switch event {
0109 case .Next: break
0110 case .Error, .Completed:
0111 _self.dispose()
0112 }
0113
0114 if _parent._latest != _id {
0115 return
0116 }
0117
0118 switch event {
0119 case .Next:
0120 _parent.forwardOn(event)
0121 case .Error:
0122 _parent.forwardOn(event)
0123 _parent.dispose()
0124 case .Completed:
0125 _parent._hasLatest = false
0126 if _parent._stopped {
0127 _parent.forwardOn(event)
0128 _parent.dispose()
0129 }
0130 }
0131 }
0132 }
0133
0134
0136 final class SwitchIdentitySinkSwitch.swift:171 | let sink = SwitchIdentitySink<S, O>(observer: observer) |
<SSwitch.swift:136 | final class SwitchIdentitySink<S: ObservableConvertibleType, O: ObserverType where O.E == S.E> : SwitchSink<S, S, O> { |
Switch.swift:136 | final class SwitchIdentitySink<S: ObservableConvertibleType, O: ObserverType where O.E == S.E> : SwitchSink<S, S, O> { |
Switch.swift:141 | override func performMap(element: S) throws -> S { |
Switch.swift:141 | override func performMap(element: S) throws -> S { |
: ObservableConvertibleType, OSwitch.swift:136 | final class SwitchIdentitySink<S: ObservableConvertibleType, O: ObserverType where O.E == S.E> : SwitchSink<S, S, O> { |
Switch.swift:137 | override init(observer: O) { |
: ObserverType where O.E == S.E> : SwitchSink<S, S, O> {
0137 override init(observer: O) {
0138 super.init(observer: observer)
0139 }
0140
0141 override func performMap(element: S) throws -> S {
0142 return element
0143 }
0144 }
0145
0146 final class MapSwitchSinkSwitch.swift:189 | let sink = MapSwitchSink<SourceType, S, O>(selector: _selector, observer: observer) |
<SourceTypeSwitch.swift:146 | final class MapSwitchSink<SourceType, S: ObservableConvertibleType, O: ObserverType where O.E == S.E> : SwitchSink<SourceType, S, O> { |
Switch.swift:147 | typealias Selector = SourceType throws -> S |
Switch.swift:156 | override func performMap(element: SourceType) throws -> S { |
, SSwitch.swift:146 | final class MapSwitchSink<SourceType, S: ObservableConvertibleType, O: ObserverType where O.E == S.E> : SwitchSink<SourceType, S, O> { |
Switch.swift:147 | typealias Selector = SourceType throws -> S |
Switch.swift:156 | override func performMap(element: SourceType) throws -> S { |
: ObservableConvertibleType, OSwitch.swift:146 | final class MapSwitchSink<SourceType, S: ObservableConvertibleType, O: ObserverType where O.E == S.E> : SwitchSink<SourceType, S, O> { |
Switch.swift:151 | init(selector: Selector, observer: O) { |
: ObserverType where O.E == S.E> : SwitchSink<SourceType, S, O> {
0147 typealias SelectorSwitch.swift:149 | private let _selector: Selector |
Switch.swift:151 | init(selector: Selector, observer: O) { |
= SourceType throws -> S
0148
0149 private let _selectorSwitch.swift:152 | _selector = selector |
Switch.swift:157 | return try _selector(element) |
: Selector
0150
0151 init(selector: Selector, observer: O) {
0152 _selector = selector
0153 super.init(observer: observer)
0154 }
0155
0156 override func performMap(element: SourceType) throws -> S {
0157 return try _selector(element)
0158 }
0159 }
0160
0161
0163 final class SwitchObservable+Multiple.swift:64 | return Switch(source: asObservable()) |
<SSwitch.swift:163 | final class Switch<S: ObservableConvertibleType> : Producer<S.E> { |
Switch.swift:164 | private let _source: Observable<S> |
Switch.swift:166 | init(source: Observable<S>) { |
Switch.swift:170 | override func run<O : ObserverType where O.E == S.E>(observer: O) -> Disposable { |
Switch.swift:171 | let sink = SwitchIdentitySink<S, O>(observer: observer) |
: ObservableConvertibleType> : Producer<S.E> {
0164 private let _sourceSwitch.swift:167 | _source = source |
Switch.swift:172 | sink.disposable = sink.run(_source) |
: Observable<S>
0165
0166 initObservable+Multiple.swift:64 | return Switch(source: asObservable()) |
(source: Observable<S>) {
0167 _source = source
0168 }
0169
0170 override func run<O : ObserverType where O.E == S.E>(observer: O) -> Disposable {
0171 let sink = SwitchIdentitySink<S, O>(observer: observer)
0172 sink.disposable = sink.run(_source)
0173 return sink
0174 }
0175 }
0176
0177 final class FlatMapLatestObservable+StandardSequenceOperators.swift:267 | return FlatMapLatest(source: asObservable(), selector: selector) |
<SourceTypeSwitch.swift:178 | typealias Selector = SourceType throws -> S |
Switch.swift:180 | private let _source: Observable<SourceType> |
Switch.swift:183 | init(source: Observable<SourceType>, selector: Selector) { |
Switch.swift:189 | let sink = MapSwitchSink<SourceType, S, O>(selector: _selector, observer: observer) |
, SSwitch.swift:177 | final class FlatMapLatest<SourceType, S: ObservableConvertibleType> : Producer<S.E> { |
Switch.swift:178 | typealias Selector = SourceType throws -> S |
Switch.swift:188 | override func run<O : ObserverType where O.E == S.E>(observer: O) -> Disposable { |
Switch.swift:189 | let sink = MapSwitchSink<SourceType, S, O>(selector: _selector, observer: observer) |
: ObservableConvertibleType> : Producer<S.E> {
0178 typealias SelectorSwitch.swift:181 | private let _selector: Selector |
Switch.swift:183 | init(source: Observable<SourceType>, selector: Selector) { |
= SourceType throws -> S
0179
0180 private let _sourceSwitch.swift:184 | _source = source |
Switch.swift:190 | sink.disposable = sink.run(_source) |
: Observable<SourceType>
0181 private let _selectorSwitch.swift:185 | _selector = selector |
Switch.swift:189 | let sink = MapSwitchSink<SourceType, S, O>(selector: _selector, observer: observer) |
: Selector
0182
0183 initObservable+StandardSequenceOperators.swift:267 | return FlatMapLatest(source: asObservable(), selector: selector) |
(source: Observable<SourceType>, selector: Selector) {
0184 _source = source
0185 _selector = selector
0186 }
0187
0188 override func run<O : ObserverType where O.E == S.E>(observer: O) -> Disposable {
0189 let sink = MapSwitchSink<SourceType, S, O>(selector: _selector, observer: observer)
0190 sink.disposable = sink.run(_source)
0191 return sink
0192 }
0193 }