0001    //
0002    //  WithLatestFrom.swift
0003    //  RxExample
0004    //
0005    //  Created by Yury Korolev on 10/19/15.
0006    //  Copyright © 2015 Krunoslav Zaher. All rights reserved.
0007    //
0008    
0009    import Foundation
0010    
0011    class WithLatestFromSink
WithLatestFrom.swift:72
    typealias Parent = WithLatestFromSink<FirstType, SecondType, ResultType, O>
WithLatestFrom.swift:120
        let sink = WithLatestFromSink(parent: self, observer: observer)
<FirstType
WithLatestFrom.swift:17
    typealias Parent = WithLatestFrom<FirstType, SecondType, ResultType>
WithLatestFrom.swift:18
    typealias E = FirstType
, SecondType
WithLatestFrom.swift:17
    typealias Parent = WithLatestFrom<FirstType, SecondType, ResultType>
WithLatestFrom.swift:23
    private var _latest: SecondType?
, ResultType
WithLatestFrom.swift:17
    typealias Parent = WithLatestFrom<FirstType, SecondType, ResultType>
, O
WithLatestFrom.swift:12
    : Sink<O>
WithLatestFrom.swift:25
    init(parent: Parent, observer: O) {
: ObserverType where O.E == ResultType> 0012 : Sink<O> 0013 , ObserverType 0014 , LockOwnerType 0015 , SynchronizedOnType { 0016 0017 typealias Parent
WithLatestFrom.swift:20
    private let _parent: Parent
WithLatestFrom.swift:25
    init(parent: Parent, observer: O) {
= WithLatestFrom<FirstType, SecondType, ResultType> 0018 typealias E
WithLatestFrom.swift:41
    func on(event: Event<E>) {
WithLatestFrom.swift:45
    func _synchronized_on(event: Event<E>) {
= FirstType 0019 0020 private let _parent
WithLatestFrom.swift:26
        _parent = parent
WithLatestFrom.swift:35
        sndSubscription.disposable = _parent._second.subscribe(sndO)
WithLatestFrom.swift:36
        let fstSubscription = _parent._first.subscribe(self)
WithLatestFrom.swift:50
                let res = try _parent._resultSelector(value, latest)
: Parent 0021 0022 var _lock
WithLatestFrom.swift:80
            return _parent._lock
= NSRecursiveLock() 0023 private var _latest
WithLatestFrom.swift:48
            guard let latest = _latest else { return }
WithLatestFrom.swift:96
            _parent._latest = value
: SecondType? 0024 0025 init
WithLatestFrom.swift:120
        let sink = WithLatestFromSink(parent: self, observer: observer)
(parent: Parent, observer: O) { 0026 _parent = parent 0027 0028 super.init(observer: observer) 0029 } 0030 0031 func run
WithLatestFrom.swift:121
        sink.disposable = sink.run()
() -> Disposable { 0032 let sndSubscription = SingleAssignmentDisposable() 0033 let sndO = WithLatestFromSecond(parent: self, disposable: sndSubscription) 0034 0035 sndSubscription.disposable = _parent._second.subscribe(sndO) 0036 let fstSubscription = _parent._first.subscribe(self) 0037 0038 return StableCompositeDisposable.create(fstSubscription, sndSubscription) 0039 } 0040 0041 func on(event: Event<E>) { 0042 synchronizedOn(event) 0043 } 0044 0045 func _synchronized_on(event: Event<E>) { 0046 switch event { 0047 case let .Next(value): 0048 guard let latest = _latest else { return } 0049 do { 0050 let res = try _parent._resultSelector(value, latest) 0051 0052 forwardOn(.Next(res)) 0053 } catch let e { 0054 forwardOn(.Error(e)) 0055 dispose() 0056 } 0057 case .Completed: 0058 forwardOn(.Completed) 0059 dispose() 0060 case let .Error(error): 0061 forwardOn(.Error(error)) 0062 dispose() 0063 } 0064 } 0065 } 0066 0067 class WithLatestFromSecond
WithLatestFrom.swift:33
        let sndO = WithLatestFromSecond(parent: self, disposable: sndSubscription)
<FirstType
WithLatestFrom.swift:72
    typealias Parent = WithLatestFromSink<FirstType, SecondType, ResultType, O>
, SecondType
WithLatestFrom.swift:72
    typealias Parent = WithLatestFromSink<FirstType, SecondType, ResultType, O>
WithLatestFrom.swift:73
    typealias E = SecondType
, ResultType
WithLatestFrom.swift:72
    typealias Parent = WithLatestFromSink<FirstType, SecondType, ResultType, O>
, O
WithLatestFrom.swift:72
    typealias Parent = WithLatestFromSink<FirstType, SecondType, ResultType, O>
: ObserverType where O.E == ResultType> 0068 : ObserverType 0069 , LockOwnerType 0070 , SynchronizedOnType { 0071 0072 typealias Parent
WithLatestFrom.swift:75
    private let _parent: Parent
WithLatestFrom.swift:84
    init(parent: Parent, disposable: Disposable) {
= WithLatestFromSink<FirstType, SecondType, ResultType, O> 0073 typealias E
WithLatestFrom.swift:89
    func on(event: Event<E>) {
WithLatestFrom.swift:93
    func _synchronized_on(event: Event<E>) {
= SecondType 0074 0075 private let _parent
WithLatestFrom.swift:80
            return _parent._lock
WithLatestFrom.swift:85
        _parent = parent
WithLatestFrom.swift:96
            _parent._latest = value
WithLatestFrom.swift:100
            _parent.forwardOn(.Error(error))
WithLatestFrom.swift:101
            _parent.dispose()
: Parent 0076 private let _disposable
WithLatestFrom.swift:86
        _disposable = disposable
WithLatestFrom.swift:98
            _disposable.dispose()
: Disposable 0077 0078 var _lock: NSRecursiveLock { 0079 get { 0080 return _parent._lock 0081 } 0082 } 0083 0084 init
WithLatestFrom.swift:33
        let sndO = WithLatestFromSecond(parent: self, disposable: sndSubscription)
(parent: Parent, disposable: Disposable) { 0085 _parent = parent 0086 _disposable = disposable 0087 } 0088 0089 func on(event: Event<E>) { 0090 synchronizedOn(event) 0091 } 0092 0093 func _synchronized_on(event: Event<E>) { 0094 switch event { 0095 case let .Next(value): 0096 _parent._latest = value 0097 case .Completed: 0098 _disposable.dispose() 0099 case let .Error(error): 0100 _parent.forwardOn(.Error(error)) 0101 _parent.dispose() 0102 } 0103 } 0104 } 0105 0106 class WithLatestFrom
Observable+Multiple.swift:316
        return WithLatestFrom(first: asObservable(), second: second.asObservable(), resultSelector: resultSelector)
Observable+Multiple.swift:328
        return WithLatestFrom(first: asObservable(), second: second.asObservable(), resultSelector: { $1 })
WithLatestFrom.swift:17
    typealias Parent = WithLatestFrom<FirstType, SecondType, ResultType>
<FirstType
WithLatestFrom.swift:107
    typealias ResultSelector = (FirstType, SecondType) throws -> ResultType
WithLatestFrom.swift:109
    private let _first: Observable<FirstType>
WithLatestFrom.swift:113
    init(first: Observable<FirstType>, second: Observable<SecondType>, resultSelector: ResultSelector) {
, SecondType
WithLatestFrom.swift:107
    typealias ResultSelector = (FirstType, SecondType) throws -> ResultType
WithLatestFrom.swift:110
    private let _second: Observable<SecondType>
WithLatestFrom.swift:113
    init(first: Observable<FirstType>, second: Observable<SecondType>, resultSelector: ResultSelector) {
, ResultType
WithLatestFrom.swift:106
class WithLatestFrom<FirstType, SecondType, ResultType>: Producer<ResultType> {
WithLatestFrom.swift:107
    typealias ResultSelector = (FirstType, SecondType) throws -> ResultType
WithLatestFrom.swift:119
    override func run<O : ObserverType where O.E == ResultType>(observer: O) -> Disposable {
>: Producer<ResultType> { 0107 typealias ResultSelector
WithLatestFrom.swift:111
    private let _resultSelector: ResultSelector
WithLatestFrom.swift:113
    init(first: Observable<FirstType>, second: Observable<SecondType>, resultSelector: ResultSelector) {
= (FirstType, SecondType) throws -> ResultType 0108 0109 private let _first
WithLatestFrom.swift:36
        let fstSubscription = _parent._first.subscribe(self)
WithLatestFrom.swift:114
        _first = first
: Observable<FirstType> 0110 private let _second
WithLatestFrom.swift:35
        sndSubscription.disposable = _parent._second.subscribe(sndO)
WithLatestFrom.swift:115
        _second = second
: Observable<SecondType> 0111 private let _resultSelector
WithLatestFrom.swift:50
                let res = try _parent._resultSelector(value, latest)
WithLatestFrom.swift:116
        _resultSelector = resultSelector
: ResultSelector 0112 0113 init
Observable+Multiple.swift:316
        return WithLatestFrom(first: asObservable(), second: second.asObservable(), resultSelector: resultSelector)
Observable+Multiple.swift:328
        return WithLatestFrom(first: asObservable(), second: second.asObservable(), resultSelector: { $1 })
(first: Observable<FirstType>, second: Observable<SecondType>, resultSelector: ResultSelector) { 0114 _first = first 0115 _second = second 0116 _resultSelector = resultSelector 0117 } 0118 0119 override func run<O : ObserverType where O.E == ResultType>(observer: O) -> Disposable { 0120 let sink = WithLatestFromSink(parent: self, observer: observer) 0121 sink.disposable = sink.run() 0122 return sink 0123 } 0124 }