mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-08-08 08:31:13 +00:00
no message
This commit is contained in:
parent
c3b00d270b
commit
a65ac6b5fb
@ -34,7 +34,7 @@ public final class ActionDisposable : Disposable {
|
|||||||
pthread_mutex_destroy(&self.lock)
|
pthread_mutex_destroy(&self.lock)
|
||||||
}
|
}
|
||||||
|
|
||||||
public func dispose() {var disposable: Disposable! = nil
|
public func dispose() {
|
||||||
let disposeAction: (() -> Void)?
|
let disposeAction: (() -> Void)?
|
||||||
|
|
||||||
pthread_mutex_lock(&self.lock)
|
pthread_mutex_lock(&self.lock)
|
||||||
@ -171,3 +171,59 @@ public final class DisposableSet : Disposable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final class DisposableDict<T: Hashable> : Disposable {
|
||||||
|
private var lock = pthread_mutex_t()
|
||||||
|
private var disposed = false
|
||||||
|
private var disposables: [T: Disposable] = [:]
|
||||||
|
|
||||||
|
public init() {
|
||||||
|
pthread_mutex_init(&self.lock, nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
deinit {
|
||||||
|
pthread_mutex_lock(&self.lock)
|
||||||
|
self.disposables.removeAll()
|
||||||
|
pthread_mutex_unlock(&self.lock)
|
||||||
|
|
||||||
|
pthread_mutex_destroy(&self.lock)
|
||||||
|
}
|
||||||
|
|
||||||
|
public func set(_ disposable: Disposable?, forKey key: T) {
|
||||||
|
var disposeImmediately = false
|
||||||
|
var disposePrevious: Disposable?
|
||||||
|
|
||||||
|
pthread_mutex_lock(&self.lock)
|
||||||
|
if self.disposed {
|
||||||
|
disposeImmediately = true
|
||||||
|
} else {
|
||||||
|
disposePrevious = self.disposables[key]
|
||||||
|
if let disposable = disposable {
|
||||||
|
self.disposables[key] = disposable
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pthread_mutex_unlock(&self.lock)
|
||||||
|
|
||||||
|
if disposeImmediately {
|
||||||
|
disposable?.dispose()
|
||||||
|
}
|
||||||
|
disposePrevious?.dispose()
|
||||||
|
}
|
||||||
|
|
||||||
|
public func dispose() {
|
||||||
|
var disposables: [T: Disposable] = [:]
|
||||||
|
pthread_mutex_lock(&self.lock)
|
||||||
|
if !self.disposed {
|
||||||
|
self.disposed = true
|
||||||
|
disposables = self.disposables
|
||||||
|
self.disposables = [:]
|
||||||
|
}
|
||||||
|
pthread_mutex_unlock(&self.lock)
|
||||||
|
|
||||||
|
if disposables.count != 0 {
|
||||||
|
for disposable in disposables.values {
|
||||||
|
disposable.dispose()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user