0001    //
0002    //  ElementAt.swift
0003    //  Rx
0004    //
0005    //  Created by Junior B. on 21/10/15.
0006    //  Copyright © 2015 Krunoslav Zaher. All rights reserved.
0007    //
0008    
0009    import Foundation
0010    
0011    
0012    class ElementAtSink
ElementAt.swift:75
        let sink = ElementAtSink(parent: self, observer: observer)
<SourceType
ElementAt.swift:13
    typealias Parent = ElementAt<SourceType>
ElementAt.swift:25
    func on(event: Event<SourceType>) {
, O
ElementAt.swift:12
class ElementAtSink<SourceType, O: ObserverType where O.E == SourceType> : Sink<O>, ObserverType {
ElementAt.swift:18
    init(parent: Parent, observer: O) {
: ObserverType where O.E == SourceType> : Sink<O>, ObserverType { 0013 typealias Parent
ElementAt.swift:15
    let _parent: Parent
ElementAt.swift:18
    init(parent: Parent, observer: O) {
= ElementAt<SourceType> 0014 0015 let _parent
ElementAt.swift:19
        _parent = parent
ElementAt.swift:47
            if (_parent._throwOnEmpty) {
: Parent 0016 var _i
ElementAt.swift:20
        _i = parent._index
ElementAt.swift:29
            if (_i == 0) {
ElementAt.swift:36
                try decrementChecked(&_i)
: Int 0017 0018 init
ElementAt.swift:75
        let sink = ElementAtSink(parent: self, observer: observer)
(parent: Parent, observer: O) { 0019 _parent = parent 0020 _i = parent._index 0021 0022 super.init(observer: observer) 0023 } 0024 0025 func on(event: Event<SourceType>) { 0026 switch event { 0027 case .Next(_): 0028 0029 if (_i == 0) { 0030 forwardOn(event) 0031 forwardOn(.Completed) 0032 self.dispose() 0033 } 0034 0035 do { 0036 try decrementChecked(&_i) 0037 } catch(let e) { 0038 forwardOn(.Error(e)) 0039 dispose() 0040 return 0041 } 0042 0043 case .Error(let e): 0044 forwardOn(.Error(e)) 0045 self.dispose() 0046 case .Completed: 0047 if (_parent._throwOnEmpty) { 0048 forwardOn(.Error(RxError.ArgumentOutOfRange)) 0049 } else { 0050 forwardOn(.Completed) 0051 } 0052 0053 self.dispose() 0054 } 0055 } 0056 } 0057 0058 class ElementAt
ElementAt.swift:13
    typealias Parent = ElementAt<SourceType>
Observable+StandardSequenceOperators.swift:286
        return ElementAt(source: asObservable(), index: index, throwOnEmpty: true)
<SourceType
ElementAt.swift:58
class ElementAt<SourceType> : Producer<SourceType> {
ElementAt.swift:60
    let _source: Observable<SourceType>
ElementAt.swift:64
    init(source: Observable<SourceType>, index: Int, throwOnEmpty: Bool) {
ElementAt.swift:74
    override func run<O: ObserverType where O.E == SourceType>(observer: O) -> Disposable {
> : Producer<SourceType> { 0059 0060 let _source
ElementAt.swift:69
        self._source = source
ElementAt.swift:76
        sink.disposable = _source.subscribeSafe(sink)
: Observable<SourceType> 0061 let _throwOnEmpty
ElementAt.swift:47
            if (_parent._throwOnEmpty) {
ElementAt.swift:71
        self._throwOnEmpty = throwOnEmpty
: Bool 0062 let _index
ElementAt.swift:20
        _i = parent._index
ElementAt.swift:70
        self._index = index
: Int 0063 0064 init
Observable+StandardSequenceOperators.swift:286
        return ElementAt(source: asObservable(), index: index, throwOnEmpty: true)
(source: Observable<SourceType>, index: Int, throwOnEmpty: Bool) { 0065 if index < 0 { 0066 rxFatalError("index can't be negative") 0067 } 0068 0069 self._source = source 0070 self._index = index 0071 self._throwOnEmpty = throwOnEmpty 0072 } 0073 0074 override func run<O: ObserverType where O.E == SourceType>(observer: O) -> Disposable { 0075 let sink = ElementAtSink(parent: self, observer: observer) 0076 sink.disposable = _source.subscribeSafe(sink) 0077 return sink 0078 } 0079 }