0001 // 0002 // ShareReplay1WhileConnected.swift 0003 // Rx 0004 // 0005 // Created by Krunoslav Zaher on 12/6/15. 0006 // Copyright © 2015 Krunoslav Zaher. All rights reserved. 0007 // 0008 0009 import Foundation 0010 0011 // optimized version of share replay for most common case 0012 final class ShareReplay1WhileConnected<Element
Observable+Binding.swift:188 return ShareReplay1WhileConnected(source: self.asObservable())> 0013 : Observable<Element> 0014 , ObserverType 0015 , SynchronizedUnsubscribeType { 0016 0017 typealias DisposeKey
ShareReplay1WhileConnected.swift:13 : Observable<Element>ShareReplay1WhileConnected.swift:17 typealias DisposeKey = Bag<AnyObserver<Element>>.KeyTypeShareReplay1WhileConnected.swift:19 private let _source: Observable<Element>ShareReplay1WhileConnected.swift:24 private var _element: Element?ShareReplay1WhileConnected.swift:25 private var _observers = Bag<AnyObserver<Element>>()ShareReplay1WhileConnected.swift:27 init(source: Observable<Element>) {= Bag<AnyObserver<Element>>.KeyType 0018 0019 private let _source
ShareReplay1WhileConnected.swift:55 func synchronizedUnsubscribe(disposeKey: DisposeKey) {ShareReplay1WhileConnected.swift:60 func _synchronized_unsubscribe(disposeKey: DisposeKey) {: Observable<Element> 0020 0021 private var _lock
ShareReplay1WhileConnected.swift:28 self._source = sourceShareReplay1WhileConnected.swift:49 connection.disposable = self._source.subscribe(self)= NSRecursiveLock() 0022 0023 private var _connection
ShareReplay1WhileConnected.swift:32 _lock.lock(); defer { _lock.unlock() }ShareReplay1WhileConnected.swift:32 _lock.lock(); defer { _lock.unlock() }ShareReplay1WhileConnected.swift:56 _lock.lock(); defer { _lock.unlock() }ShareReplay1WhileConnected.swift:56 _lock.lock(); defer { _lock.unlock() }ShareReplay1WhileConnected.swift:74 _lock.lock(); defer { _lock.unlock() }ShareReplay1WhileConnected.swift:74 _lock.lock(); defer { _lock.unlock() }: SingleAssignmentDisposable? 0024 private var _element
ShareReplay1WhileConnected.swift:47 _connection = connectionShareReplay1WhileConnected.swift:67 _connection?.dispose()ShareReplay1WhileConnected.swift:68 _connection = nilShareReplay1WhileConnected.swift:85 _connection?.dispose()ShareReplay1WhileConnected.swift:86 _connection = nil: Element? 0025 private var _observers
ShareReplay1WhileConnected.swift:37 if let element = self._element {ShareReplay1WhileConnected.swift:69 _element = nilShareReplay1WhileConnected.swift:81 _element = elementShareReplay1WhileConnected.swift:84 _element = nil= Bag<AnyObserver<Element>>() 0026 0027 init
ShareReplay1WhileConnected.swift:41 let initialCount = self._observers.countShareReplay1WhileConnected.swift:43 let disposeKey = self._observers.insert(AnyObserver(observer))ShareReplay1WhileConnected.swift:62 if self._observers.removeKey(disposeKey) == nil {ShareReplay1WhileConnected.swift:66 if _observers.count == 0 {ShareReplay1WhileConnected.swift:82 _observers.on(event)ShareReplay1WhileConnected.swift:87 let observers = _observersShareReplay1WhileConnected.swift:88 _observers = Bag()(source: Observable<Element>) { 0028 self._source = source 0029 } 0030 0031 override func subscribe<O : ObserverType where O.E == E>(observer: O) -> Disposable { 0032 _lock.lock(); defer { _lock.unlock() } 0033 return _synchronized_subscribe(observer) 0034 } 0035 0036 func _synchronized_subscribe
Observable+Binding.swift:188 return ShareReplay1WhileConnected(source: self.asObservable())<O : ObserverType where O.E == E>(observer: O) -> Disposable { 0037 if let element = self._element { 0038 observer.on(.Next(element)) 0039 } 0040 0041 let initialCount = self._observers.count 0042 0043 let disposeKey = self._observers.insert(AnyObserver(observer)) 0044 0045 if initialCount == 0 { 0046 let connection = SingleAssignmentDisposable() 0047 _connection = connection 0048 0049 connection.disposable = self._source.subscribe(self) 0050 } 0051 0052 return SubscriptionDisposable(owner: self, key: disposeKey) 0053 } 0054 0055 func synchronizedUnsubscribe(disposeKey: DisposeKey) { 0056 _lock.lock(); defer { _lock.unlock() } 0057 _synchronized_unsubscribe(disposeKey) 0058 } 0059 0060 func _synchronized_unsubscribe
ShareReplay1WhileConnected.swift:33 return _synchronized_subscribe(observer)(disposeKey: DisposeKey) { 0061 // if already unsubscribed, just return 0062 if self._observers.removeKey(disposeKey) == nil { 0063 return 0064 } 0065 0066 if _observers.count == 0 { 0067 _connection?.dispose() 0068 _connection = nil 0069 _element = nil 0070 } 0071 } 0072 0073 func on(event: Event<E>) { 0074 _lock.lock(); defer { _lock.unlock() } 0075 _synchronized_on(event) 0076 } 0077 0078 func _synchronized_on
ShareReplay1WhileConnected.swift:57 _synchronized_unsubscribe(disposeKey)(event: Event<E>) { 0079 switch event { 0080 case .Next(let element): 0081 _element = element 0082 _observers.on(event) 0083 case .Error, .Completed: 0084 _element = nil 0085 _connection?.dispose() 0086 _connection = nil 0087 let observers = _observers 0088 _observers = Bag() 0089 observers.on(event) 0090 } 0091 } 0092 }
ShareReplay1WhileConnected.swift:75 _synchronized_on(event)