0001 // 0002 // RefCount.swift 0003 // Rx 0004 // 0005 // Created by Krunoslav Zaher on 3/5/15. 0006 // Copyright © 2015 Krunoslav Zaher. All rights reserved. 0007 // 0008 0009 import Foundation 0010 0011 class RefCountSink<CO
RefCount.swift:80 let sink = RefCountSink(parent: self, observer: observer): ConnectableObservableType, O
RefCount.swift:15 typealias Parent = RefCount<CO>: ObserverType where CO.E == O.E> 0012 : Sink<O> 0013 , ObserverType { 0014 typealias Element
RefCount.swift:12 : Sink<O>RefCount.swift:14 typealias Element = O.ERefCount.swift:19 init(parent: Parent, observer: O) {= O.E 0015 typealias Parent
RefCount.swift:55 func on(event: Event<Element>) {= RefCount<CO> 0016 0017 private let _parent
RefCount.swift:17 private let _parent: ParentRefCount.swift:19 init(parent: Parent, observer: O) {: Parent 0018 0019 init
RefCount.swift:20 _parent = parentRefCount.swift:25 let subscription = _parent._source.subscribeSafe(self)RefCount.swift:27 _parent._lock.lock(); defer { _parent._lock.unlock() } // {RefCount.swift:27 _parent._lock.lock(); defer { _parent._lock.unlock() } // {RefCount.swift:28 if _parent._count == 0 {RefCount.swift:29 _parent._count = 1RefCount.swift:30 _parent._connectableSubscription = _parent._source.connect()RefCount.swift:30 _parent._connectableSubscription = _parent._source.connect()RefCount.swift:33 _parent._count = _parent._count + 1RefCount.swift:33 _parent._count = _parent._count + 1RefCount.swift:39 self._parent._lock.lock(); defer { self._parent._lock.unlock() } // {RefCount.swift:39 self._parent._lock.lock(); defer { self._parent._lock.unlock() } // {RefCount.swift:40 if self._parent._count == 1 {RefCount.swift:41 self._parent._connectableSubscription!.dispose()RefCount.swift:42 self._parent._count = 0RefCount.swift:43 self._parent._connectableSubscription = nilRefCount.swift:45 else if self._parent._count > 1 {RefCount.swift:46 self._parent._count = self._parent._count - 1RefCount.swift:46 self._parent._count = self._parent._count - 1(parent: Parent, observer: O) { 0020 _parent = parent 0021 super.init(observer: observer) 0022 } 0023 0024 func run
RefCount.swift:80 let sink = RefCountSink(parent: self, observer: observer)() -> Disposable { 0025 let subscription = _parent._source.subscribeSafe(self) 0026 0027 _parent._lock.lock(); defer { _parent._lock.unlock() } // { 0028 if _parent._count == 0 { 0029 _parent._count = 1 0030 _parent._connectableSubscription = _parent._source.connect() 0031 } 0032 else { 0033 _parent._count = _parent._count + 1 0034 } 0035 // } 0036 0037 return AnonymousDisposable { 0038 subscription.dispose() 0039 self._parent._lock.lock(); defer { self._parent._lock.unlock() } // { 0040 if self._parent._count == 1 { 0041 self._parent._connectableSubscription!.dispose() 0042 self._parent._count = 0 0043 self._parent._connectableSubscription = nil 0044 } 0045 else if self._parent._count > 1 { 0046 self._parent._count = self._parent._count - 1 0047 } 0048 else { 0049 rxFatalError("Something went wrong with RefCount disposing mechanism") 0050 } 0051 // } 0052 } 0053 } 0054 0055 func on(event: Event<Element>) { 0056 switch event { 0057 case .Next: 0058 forwardOn(event) 0059 case .Error, .Completed: 0060 forwardOn(event) 0061 dispose() 0062 } 0063 } 0064 } 0065 0066 class RefCount
RefCount.swift:81 sink.disposable = sink.run()<CO
Observable+Binding.swift:125 return RefCount(source: self)RefCount.swift:15 typealias Parent = RefCount<CO>: ConnectableObservableType>: Producer<CO.E> { 0067 private let _lock
RefCount.swift:66 class RefCount<CO: ConnectableObservableType>: Producer<CO.E> {RefCount.swift:73 private let _source: CORefCount.swift:75 init(source: CO) {RefCount.swift:79 override func run<O: ObserverType where O.E == CO.E>(observer: O) -> Disposable {= NSRecursiveLock() 0068 0069 // state 0070 private var _count
RefCount.swift:27 _parent._lock.lock(); defer { _parent._lock.unlock() } // {RefCount.swift:27 _parent._lock.lock(); defer { _parent._lock.unlock() } // {RefCount.swift:39 self._parent._lock.lock(); defer { self._parent._lock.unlock() } // {RefCount.swift:39 self._parent._lock.lock(); defer { self._parent._lock.unlock() } // {= 0 0071 private var _connectableSubscription
RefCount.swift:28 if _parent._count == 0 {RefCount.swift:29 _parent._count = 1RefCount.swift:33 _parent._count = _parent._count + 1RefCount.swift:33 _parent._count = _parent._count + 1RefCount.swift:40 if self._parent._count == 1 {RefCount.swift:42 self._parent._count = 0RefCount.swift:45 else if self._parent._count > 1 {RefCount.swift:46 self._parent._count = self._parent._count - 1RefCount.swift:46 self._parent._count = self._parent._count - 1= nil as Disposable? 0072 0073 private let _source
RefCount.swift:30 _parent._connectableSubscription = _parent._source.connect()RefCount.swift:41 self._parent._connectableSubscription!.dispose()RefCount.swift:43 self._parent._connectableSubscription = nil: CO 0074 0075 init
RefCount.swift:25 let subscription = _parent._source.subscribeSafe(self)RefCount.swift:30 _parent._connectableSubscription = _parent._source.connect()RefCount.swift:76 _source = source(source: CO) { 0076 _source = source 0077 } 0078 0079 override func run<O: ObserverType where O.E == CO.E>(observer: O) -> Disposable { 0080 let sink = RefCountSink(parent: self, observer: observer) 0081 sink.disposable = sink.run() 0082 return sink 0083 } 0084 }
Observable+Binding.swift:125 return RefCount(source: self)