0001    //
0002    //  DistinctUntilChanged.swift
0003    //  Rx
0004    //
0005    //  Created by Krunoslav Zaher on 3/15/15.
0006    //  Copyright © 2015 Krunoslav Zaher. All rights reserved.
0007    //
0008    
0009    import Foundation
0010    
0011    class DistinctUntilChangedSink
DistinctUntilChanged.swift:66
        let sink = DistinctUntilChangedSink(parent: self, observer: observer)
<O
DistinctUntilChanged.swift:11
class DistinctUntilChangedSink<O: ObserverType, Key>: Sink<O>, ObserverType {
DistinctUntilChanged.swift:12
    typealias E = O.E
DistinctUntilChanged.swift:17
    init(parent: DistinctUntilChanged<E, Key>, observer: O) {
: ObserverType, Key
DistinctUntilChanged.swift:14
    private let _parent: DistinctUntilChanged<E, Key>
DistinctUntilChanged.swift:15
    private var _currentKey: Key? = nil
DistinctUntilChanged.swift:17
    init(parent: DistinctUntilChanged<E, Key>, observer: O) {
>: Sink<O>, ObserverType { 0012 typealias E
DistinctUntilChanged.swift:14
    private let _parent: DistinctUntilChanged<E, Key>
DistinctUntilChanged.swift:17
    init(parent: DistinctUntilChanged<E, Key>, observer: O) {
DistinctUntilChanged.swift:22
    func on(event: Event<E>) {
= O.E 0013 0014 private let _parent
DistinctUntilChanged.swift:18
        _parent = parent
DistinctUntilChanged.swift:26
                let key = try _parent._selector(value)
DistinctUntilChanged.swift:29
                    areEqual = try _parent._comparer(currentKey, key)
: DistinctUntilChanged<E, Key> 0015 private var _currentKey
DistinctUntilChanged.swift:28
                if let currentKey = _currentKey {
DistinctUntilChanged.swift:36
                _currentKey = key
: Key? = nil 0016 0017 init
DistinctUntilChanged.swift:66
        let sink = DistinctUntilChangedSink(parent: self, observer: observer)
(parent: DistinctUntilChanged<E, Key>, observer: O) { 0018 _parent = parent 0019 super.init(observer: observer) 0020 } 0021 0022 func on(event: Event<E>) { 0023 switch event { 0024 case .Next(let value): 0025 do { 0026 let key = try _parent._selector(value) 0027 var areEqual = false 0028 if let currentKey = _currentKey { 0029 areEqual = try _parent._comparer(currentKey, key) 0030 } 0031 0032 if areEqual { 0033 return 0034 } 0035 0036 _currentKey = key 0037 0038 forwardOn(event) 0039 } 0040 catch let error { 0041 forwardOn(.Error(error)) 0042 dispose() 0043 } 0044 case .Error, .Completed: 0045 forwardOn(event) 0046 dispose() 0047 } 0048 } 0049 } 0050 0051 class DistinctUntilChanged
DistinctUntilChanged.swift:14
    private let _parent: DistinctUntilChanged<E, Key>
DistinctUntilChanged.swift:17
    init(parent: DistinctUntilChanged<E, Key>, observer: O) {
Observable+Single.swift:70
        return DistinctUntilChanged(source: self.asObservable(), selector: keySelector, comparer: comparer)
<Element
DistinctUntilChanged.swift:51
class DistinctUntilChanged<Element, Key>: Producer<Element> {
DistinctUntilChanged.swift:52
    typealias KeySelector = (Element) throws -> Key
DistinctUntilChanged.swift:55
    private let _source: Observable<Element>
DistinctUntilChanged.swift:59
    init(source: Observable<Element>, selector: KeySelector, comparer: EqualityComparer) {
DistinctUntilChanged.swift:65
    override func run<O: ObserverType where O.E == Element>(observer: O) -> Disposable {
, Key
DistinctUntilChanged.swift:52
    typealias KeySelector = (Element) throws -> Key
DistinctUntilChanged.swift:53
    typealias EqualityComparer = (Key, Key) throws -> Bool
DistinctUntilChanged.swift:53
    typealias EqualityComparer = (Key, Key) throws -> Bool
>: Producer<Element> { 0052 typealias KeySelector
DistinctUntilChanged.swift:56
    private let _selector: KeySelector
DistinctUntilChanged.swift:59
    init(source: Observable<Element>, selector: KeySelector, comparer: EqualityComparer) {
= (Element) throws -> Key 0053 typealias EqualityComparer
DistinctUntilChanged.swift:57
    private let _comparer: EqualityComparer
DistinctUntilChanged.swift:59
    init(source: Observable<Element>, selector: KeySelector, comparer: EqualityComparer) {
= (Key, Key) throws -> Bool 0054 0055 private let _source
DistinctUntilChanged.swift:60
        _source = source
DistinctUntilChanged.swift:67
        sink.disposable = _source.subscribe(sink)
: Observable<Element> 0056 private let _selector
DistinctUntilChanged.swift:26
                let key = try _parent._selector(value)
DistinctUntilChanged.swift:61
        _selector = selector
: KeySelector 0057 private let _comparer
DistinctUntilChanged.swift:29
                    areEqual = try _parent._comparer(currentKey, key)
DistinctUntilChanged.swift:62
        _comparer = comparer
: EqualityComparer 0058 0059 init
Observable+Single.swift:70
        return DistinctUntilChanged(source: self.asObservable(), selector: keySelector, comparer: comparer)
(source: Observable<Element>, selector: KeySelector, comparer: EqualityComparer) { 0060 _source = source 0061 _selector = selector 0062 _comparer = comparer 0063 } 0064 0065 override func run<O: ObserverType where O.E == Element>(observer: O) -> Disposable { 0066 let sink = DistinctUntilChangedSink(parent: self, observer: observer) 0067 sink.disposable = _source.subscribe(sink) 0068 return sink 0069 } 0070 }