0001 // 0002 // CompositeDisposable.swift 0003 // Rx 0004 // 0005 // Created by Krunoslav Zaher on 2/20/15. 0006 // Copyright © 2015 Krunoslav Zaher. All rights reserved. 0007 // 0008 0009 import Foundation 0010 0011 /** 0012 Represents a group of disposable resources that are disposed together. 0013 */ 0014 public class CompositeDisposable: DisposeBase, Disposable, Cancelable { 0015 public typealias DisposeKey
CombineLatest+arity.swift:60 return CompositeDisposable(disposables: [CombineLatest+arity.swift:145 return CompositeDisposable(disposables: [CombineLatest+arity.swift:237 return CompositeDisposable(disposables: [CombineLatest+arity.swift:336 return CompositeDisposable(disposables: [CombineLatest+arity.swift:442 return CompositeDisposable(disposables: [CombineLatest+arity.swift:555 return CompositeDisposable(disposables: [CombineLatest+arity.swift:675 return CompositeDisposable(disposables: [CombineLatest+CollectionType.swift:103 return CompositeDisposable(disposables: _subscriptions.map { $0 })ConcurrentDispatchQueueScheduler.swift:98 let compositeDisposable = CompositeDisposable()Merge.swift:79 private let _group = CompositeDisposable()Merge.swift:96 func subscribe(innerSource: E, group: CompositeDisposable) {Merge.swift:233 typealias DisposeKey = CompositeDisposable.DisposeKeyMerge.swift:286 private let _group = CompositeDisposable()OperationQueueScheduler.swift:37 let compositeDisposable = CompositeDisposable()RecursiveScheduler.swift:20 private let _group = CompositeDisposable()RecursiveScheduler.swift:41 var removeKey: CompositeDisposable.DisposeKey? = nilRecursiveScheduler.swift:84 var removeKey: CompositeDisposable.DisposeKey? = nilRecursiveScheduler.swift:132 private let _group = CompositeDisposable()RecursiveScheduler.swift:154 var removeKey: CompositeDisposable.DisposeKey? = nilSerialDispatchQueueScheduler.swift:135 let compositeDisposable = CompositeDisposable()VirtualTimeScheduler.swift:120 let compositeDisposable = CompositeDisposable()Window.swift:29 private let _groupDisposable = CompositeDisposable()Zip+arity.swift:72 return CompositeDisposable(disposables: [Zip+arity.swift:170 return CompositeDisposable(disposables: [Zip+arity.swift:276 return CompositeDisposable(disposables: [Zip+arity.swift:390 return CompositeDisposable(disposables: [Zip+arity.swift:512 return CompositeDisposable(disposables: [Zip+arity.swift:642 return CompositeDisposable(disposables: [Zip+arity.swift:780 return CompositeDisposable(disposables: [Zip+CollectionType.swift:115 return CompositeDisposable(disposables: _subscriptions.map { $0 })= Bag<Disposable>.KeyType 0016 0017 private var _lock
CompositeDisposable.swift:65 public func addDisposable(disposable: Disposable) -> DisposeKey? {CompositeDisposable.swift:75 private func _addDisposable(disposable: Disposable) -> DisposeKey? {CompositeDisposable.swift:96 public func removeDisposable(disposeKey: DisposeKey) {CompositeDisposable.swift:100 private func _removeDisposable(disposeKey: DisposeKey) -> Disposable? {Merge.swift:233 typealias DisposeKey = CompositeDisposable.DisposeKeyRecursiveScheduler.swift:41 var removeKey: CompositeDisposable.DisposeKey? = nilRecursiveScheduler.swift:84 var removeKey: CompositeDisposable.DisposeKey? = nilRecursiveScheduler.swift:154 var removeKey: CompositeDisposable.DisposeKey? = nil= SpinLock() 0018 0019 // state 0020 private var _disposables
CompositeDisposable.swift:24 _lock.lock(); defer { _lock.unlock() }CompositeDisposable.swift:24 _lock.lock(); defer { _lock.unlock() }CompositeDisposable.swift:76 _lock.lock(); defer { _lock.unlock() }CompositeDisposable.swift:76 _lock.lock(); defer { _lock.unlock() }CompositeDisposable.swift:86 _lock.lock(); defer { _lock.unlock() }CompositeDisposable.swift:86 _lock.lock(); defer { _lock.unlock() }CompositeDisposable.swift:101 _lock.lock(); defer { _lock.unlock() }CompositeDisposable.swift:101 _lock.lock(); defer { _lock.unlock() }CompositeDisposable.swift:115 _lock.lock(); defer { _lock.unlock() }CompositeDisposable.swift:115 _lock.lock(); defer { _lock.unlock() }: Bag<Disposable>? = Bag() 0021 0022 public var disposed
CompositeDisposable.swift:25 return _disposables == nilCompositeDisposable.swift:36 _disposables!.insert(disposable1)CompositeDisposable.swift:37 _disposables!.insert(disposable2)CompositeDisposable.swift:44 _disposables!.insert(disposable1)CompositeDisposable.swift:45 _disposables!.insert(disposable2)CompositeDisposable.swift:46 _disposables!.insert(disposable3)CompositeDisposable.swift:54 _disposables!.insert(disposable)CompositeDisposable.swift:78 return _disposables?.insert(disposable)CompositeDisposable.swift:87 return _disposables?.count ?? 0CompositeDisposable.swift:102 return _disposables?.removeKey(disposeKey)CompositeDisposable.swift:117 let disposeBag = _disposablesCompositeDisposable.swift:118 _disposables = nil: Bool { 0023 get { 0024 _lock.lock(); defer { _lock.unlock() } 0025 return _disposables == nil 0026 } 0027 } 0028 0029 public override init
ConcurrentDispatchQueueScheduler.swift:102 if compositeDisposable.disposed {OperationQueueScheduler.swift:42 if compositeDisposableWeak?.disposed ?? false {RecursiveScheduler.swift:44 if self._group.disposed {RecursiveScheduler.swift:87 if self._group.disposed {RecursiveScheduler.swift:157 if self._group.disposed {SerialDispatchQueueScheduler.swift:139 if compositeDisposable.disposed {() { 0030 } 0031 0032 /** 0033 Initializes a new instance of composite disposable with the specified number of disposables. 0034 */ 0035 public init(_ disposable1: Disposable, _ disposable2: Disposable) { 0036 _disposables!.insert(disposable1) 0037 _disposables!.insert(disposable2) 0038 } 0039 0040 /** 0041 Initializes a new instance of composite disposable with the specified number of disposables. 0042 */ 0043 public init(_ disposable1: Disposable, _ disposable2: Disposable, _ disposable3: Disposable) { 0044 _disposables!.insert(disposable1) 0045 _disposables!.insert(disposable2) 0046 _disposables!.insert(disposable3) 0047 } 0048 0049 /** 0050 Initializes a new instance of composite disposable with the specified number of disposables. 0051 */ 0052 public init
ConcurrentDispatchQueueScheduler.swift:98 let compositeDisposable = CompositeDisposable()Merge.swift:79 private let _group = CompositeDisposable()Merge.swift:286 private let _group = CompositeDisposable()OperationQueueScheduler.swift:37 let compositeDisposable = CompositeDisposable()RecursiveScheduler.swift:20 private let _group = CompositeDisposable()RecursiveScheduler.swift:132 private let _group = CompositeDisposable()SerialDispatchQueueScheduler.swift:135 let compositeDisposable = CompositeDisposable()VirtualTimeScheduler.swift:120 let compositeDisposable = CompositeDisposable()Window.swift:29 private let _groupDisposable = CompositeDisposable()(disposables: [Disposable]) { 0053 for disposable in disposables { 0054 _disposables!.insert(disposable) 0055 } 0056 } 0057 0058 /** 0059 Adds a disposable to the CompositeDisposable or disposes the disposable if the CompositeDisposable is disposed. 0060 0061 - parameter disposable: Disposable to add. 0062 - returns: Key that can be used to remove disposable from composite disposable. In case dispose bag was already 0063 disposed `nil` will be returned. 0064 */ 0065 public func addDisposable
CombineLatest+arity.swift:60 return CompositeDisposable(disposables: [CombineLatest+arity.swift:145 return CompositeDisposable(disposables: [CombineLatest+arity.swift:237 return CompositeDisposable(disposables: [CombineLatest+arity.swift:336 return CompositeDisposable(disposables: [CombineLatest+arity.swift:442 return CompositeDisposable(disposables: [CombineLatest+arity.swift:555 return CompositeDisposable(disposables: [CombineLatest+arity.swift:675 return CompositeDisposable(disposables: [CombineLatest+CollectionType.swift:103 return CompositeDisposable(disposables: _subscriptions.map { $0 })Zip+arity.swift:72 return CompositeDisposable(disposables: [Zip+arity.swift:170 return CompositeDisposable(disposables: [Zip+arity.swift:276 return CompositeDisposable(disposables: [Zip+arity.swift:390 return CompositeDisposable(disposables: [Zip+arity.swift:512 return CompositeDisposable(disposables: [Zip+arity.swift:642 return CompositeDisposable(disposables: [Zip+arity.swift:780 return CompositeDisposable(disposables: [Zip+CollectionType.swift:115 return CompositeDisposable(disposables: _subscriptions.map { $0 })(disposable: Disposable) -> DisposeKey? { 0066 let key = _addDisposable(disposable) 0067 0068 if key == nil { 0069 disposable.dispose() 0070 } 0071 0072 return key 0073 } 0074 0075 private func _addDisposable
ConcurrentDispatchQueueScheduler.swift:105 compositeDisposable.addDisposable(action(state))ConcurrentDispatchQueueScheduler.swift:109 compositeDisposable.addDisposable(AnonymousDisposable {Merge.swift:84 _group.addDisposable(_sourceSubscription)Merge.swift:89 _group.addDisposable(_sourceSubscription)Merge.swift:99 let key = group.addDisposable(subscription)Merge.swift:334 if let disposeKey = _group.addDisposable(iterDisposable) {Merge.swift:342 _group.addDisposable(_sourceSubscription)OperationQueueScheduler.swift:47 compositeDisposableWeak?.addDisposable(disposable)OperationQueueScheduler.swift:52 compositeDisposable.addDisposable(AnonymousDisposable {RecursiveScheduler.swift:68 removeKey = _group.addDisposable(d)RecursiveScheduler.swift:111 removeKey = _group.addDisposable(d)RecursiveScheduler.swift:181 removeKey = _group.addDisposable(d)SerialDispatchQueueScheduler.swift:142 compositeDisposable.addDisposable(action(state))SerialDispatchQueueScheduler.swift:146 compositeDisposable.addDisposable(AnonymousDisposable {VirtualTimeScheduler.swift:131 compositeDisposable.addDisposable(item)Window.swift:34 _groupDisposable.addDisposable(_timerD)Window.swift:45 _groupDisposable.addDisposable(_parent._source.subscribeSafe(self))(disposable: Disposable) -> DisposeKey? { 0076 _lock.lock(); defer { _lock.unlock() } 0077 0078 return _disposables?.insert(disposable) 0079 } 0080 0081 /** 0082 - returns: Gets the number of disposables contained in the `CompositeDisposable`. 0083 */ 0084 public var count
CompositeDisposable.swift:66 let key = _addDisposable(disposable): Int { 0085 get { 0086 _lock.lock(); defer { _lock.unlock() } 0087 return _disposables?.count ?? 0 0088 } 0089 } 0090 0091 /** 0092 Removes and disposes the disposable identified by `disposeKey` from the CompositeDisposable. 0093 0094 - parameter disposeKey: Key used to identify disposable to be removed. 0095 */ 0096 public func removeDisposable
Merge.swift:215 return _group.count == MergeNoIteratorsMerge.swift:262 if _parent._stopped && _parent._group.count == MergeNoIterators {Merge.swift:321 if _group.count == MergeNoIterators {(disposeKey: DisposeKey) { 0097 _removeDisposable(disposeKey)?.dispose() 0098 } 0099 0100 private func _removeDisposable
Merge.swift:45 _parent._group.removeDisposable(_disposeKey)Merge.swift:256 _parent._group.removeDisposable(_disposeKey)RecursiveScheduler.swift:50 self._group.removeDisposable(removeKey!)RecursiveScheduler.swift:93 self._group.removeDisposable(removeKey!)RecursiveScheduler.swift:163 self._group.removeDisposable(removeKey!)(disposeKey: DisposeKey) -> Disposable? { 0101 _lock.lock(); defer { _lock.unlock() } 0102 return _disposables?.removeKey(disposeKey) 0103 } 0104 0105 /** 0106 Disposes all disposables in the group and removes them from the group. 0107 */ 0108 public func dispose
CompositeDisposable.swift:97 _removeDisposable(disposeKey)?.dispose()() { 0109 if let disposables = _dispose() { 0110 disposeAllIn(disposables) 0111 } 0112 } 0113 0114 private func _dispose
RecursiveScheduler.swift:121 _group.dispose()RecursiveScheduler.swift:191 _group.dispose()() -> Bag<Disposable>? { 0115 _lock.lock(); defer { _lock.unlock() } 0116 0117 let disposeBag = _disposables 0118 _disposables = nil 0119 0120 return disposeBag 0121 } 0122 }
CompositeDisposable.swift:109 if let disposables = _dispose() {