0001    //
0002    //  Reduce.swift
0003    //  Rx
0004    //
0005    //  Created by Krunoslav Zaher on 4/1/15.
0006    //  Copyright © 2015 Krunoslav Zaher. All rights reserved.
0007    //
0008    
0009    import Foundation
0010    
0011    class ReduceSink
Reduce.swift:70
        let sink = ReduceSink(parent: self, observer: observer)
<SourceType
Reduce.swift:13
    typealias Parent = Reduce<SourceType, AccumulateType, ResultType>
Reduce.swift:25
    func on(event: Event<SourceType>) {
, AccumulateType
Reduce.swift:13
    typealias Parent = Reduce<SourceType, AccumulateType, ResultType>
Reduce.swift:16
    private var _accumulation: AccumulateType
, O
Reduce.swift:11
class ReduceSink<SourceType, AccumulateType, O: ObserverType> : Sink<O>, ObserverType {
Reduce.swift:12
    typealias ResultType = O.E
Reduce.swift:18
    init(parent: Parent, observer: O) {
: ObserverType> : Sink<O>, ObserverType { 0012 typealias ResultType
Reduce.swift:13
    typealias Parent = Reduce<SourceType, AccumulateType, ResultType>
= O.E 0013 typealias Parent
Reduce.swift:15
    private let _parent: Parent
Reduce.swift:18
    init(parent: Parent, observer: O) {
= Reduce<SourceType, AccumulateType, ResultType> 0014 0015 private let _parent
Reduce.swift:19
        _parent = parent
Reduce.swift:29
                _accumulation = try _parent._accumulator(_accumulation, value)
Reduce.swift:40
                let result = try _parent._mapResult(_accumulation)
: Parent 0016 private var _accumulation
Reduce.swift:20
        _accumulation = parent._seed
Reduce.swift:29
                _accumulation = try _parent._accumulator(_accumulation, value)
Reduce.swift:29
                _accumulation = try _parent._accumulator(_accumulation, value)
Reduce.swift:40
                let result = try _parent._mapResult(_accumulation)
: AccumulateType 0017 0018 init
Reduce.swift:70
        let sink = ReduceSink(parent: self, observer: observer)
(parent: Parent, observer: O) { 0019 _parent = parent 0020 _accumulation = parent._seed 0021 0022 super.init(observer: observer) 0023 } 0024 0025 func on(event: Event<SourceType>) { 0026 switch event { 0027 case .Next(let value): 0028 do { 0029 _accumulation = try _parent._accumulator(_accumulation, value) 0030 } 0031 catch let e { 0032 forwardOn(.Error(e)) 0033 dispose() 0034 } 0035 case .Error(let e): 0036 forwardOn(.Error(e)) 0037 dispose() 0038 case .Completed: 0039 do { 0040 let result = try _parent._mapResult(_accumulation) 0041 forwardOn(.Next(result)) 0042 forwardOn(.Completed) 0043 dispose() 0044 } 0045 catch let e { 0046 forwardOn(.Error(e)) 0047 dispose() 0048 } 0049 } 0050 } 0051 } 0052 0053 class Reduce
Observable+Aggregate.swift:30
        return Reduce(source: self.asObservable(), seed: seed, accumulator: accumulator, mapResult: mapResult)
Observable+Aggregate.swift:47
        return Reduce(source: self.asObservable(), seed: seed, accumulator: accumulator, mapResult: { $0 })
Reduce.swift:13
    typealias Parent = Reduce<SourceType, AccumulateType, ResultType>
<SourceType
Reduce.swift:54
    typealias AccumulatorType = (AccumulateType, SourceType) throws -> AccumulateType
Reduce.swift:57
    private let _source: Observable<SourceType>
Reduce.swift:62
    init(source: Observable<SourceType>, seed: AccumulateType, accumulator: AccumulatorType, mapResult: ResultSelectorType) {
, AccumulateType
Reduce.swift:54
    typealias AccumulatorType = (AccumulateType, SourceType) throws -> AccumulateType
Reduce.swift:54
    typealias AccumulatorType = (AccumulateType, SourceType) throws -> AccumulateType
Reduce.swift:55
    typealias ResultSelectorType = (AccumulateType) throws -> ResultType
Reduce.swift:58
    private let _seed: AccumulateType
Reduce.swift:62
    init(source: Observable<SourceType>, seed: AccumulateType, accumulator: AccumulatorType, mapResult: ResultSelectorType) {
, ResultType
Reduce.swift:53
class Reduce<SourceType, AccumulateType, ResultType> : Producer<ResultType> {
Reduce.swift:55
    typealias ResultSelectorType = (AccumulateType) throws -> ResultType
Reduce.swift:69
    override func run<O: ObserverType where O.E == ResultType>(observer: O) -> Disposable {
> : Producer<ResultType> { 0054 typealias AccumulatorType
Reduce.swift:59
    private let _accumulator: AccumulatorType
Reduce.swift:62
    init(source: Observable<SourceType>, seed: AccumulateType, accumulator: AccumulatorType, mapResult: ResultSelectorType) {
= (AccumulateType, SourceType) throws -> AccumulateType 0055 typealias ResultSelectorType
Reduce.swift:60
    private let _mapResult: ResultSelectorType
Reduce.swift:62
    init(source: Observable<SourceType>, seed: AccumulateType, accumulator: AccumulatorType, mapResult: ResultSelectorType) {
= (AccumulateType) throws -> ResultType 0056 0057 private let _source
Reduce.swift:63
        _source = source
Reduce.swift:71
        sink.disposable = _source.subscribe(sink)
: Observable<SourceType> 0058 private let _seed
Reduce.swift:20
        _accumulation = parent._seed
Reduce.swift:64
        _seed = seed
: AccumulateType 0059 private let _accumulator
Reduce.swift:29
                _accumulation = try _parent._accumulator(_accumulation, value)
Reduce.swift:65
        _accumulator = accumulator
: AccumulatorType 0060 private let _mapResult
Reduce.swift:40
                let result = try _parent._mapResult(_accumulation)
Reduce.swift:66
        _mapResult = mapResult
: ResultSelectorType 0061 0062 init
Observable+Aggregate.swift:30
        return Reduce(source: self.asObservable(), seed: seed, accumulator: accumulator, mapResult: mapResult)
Observable+Aggregate.swift:47
        return Reduce(source: self.asObservable(), seed: seed, accumulator: accumulator, mapResult: { $0 })
(source: Observable<SourceType>, seed: AccumulateType, accumulator: AccumulatorType, mapResult: ResultSelectorType) { 0063 _source = source 0064 _seed = seed 0065 _accumulator = accumulator 0066 _mapResult = mapResult 0067 } 0068 0069 override func run<O: ObserverType where O.E == ResultType>(observer: O) -> Disposable { 0070 let sink = ReduceSink(parent: self, observer: observer) 0071 sink.disposable = _source.subscribe(sink) 0072 return sink 0073 } 0074 }