mirror of
https://github.com/ReactiveX/RxSwift.git
synced 2024-10-05 22:47:15 +03:00
Improves delete simulators script.
This commit is contained in:
parent
2da4774028
commit
66dfc64207
@ -24,26 +24,19 @@ class MergeSinkIter<S: ObservableType, O: ObserverType where O.Element == S.E> :
|
||||
}
|
||||
|
||||
func on(event: Event<Element>) {
|
||||
switch event {
|
||||
case .Next:
|
||||
parent.lock.performLocked {
|
||||
trySend(parent.observer, event)
|
||||
}
|
||||
case .Error:
|
||||
parent.lock.performLocked {
|
||||
trySend(parent.observer, event)
|
||||
self.parent.dispose()
|
||||
}
|
||||
case .Completed:
|
||||
let group = parent.mergeState.group
|
||||
group.removeDisposable(disposeKey)
|
||||
|
||||
self.parent.lock.performLocked {
|
||||
let state = parent.mergeState
|
||||
parent.lock.performLocked {
|
||||
switch event {
|
||||
case .Next:
|
||||
parent.observer?.on(event)
|
||||
case .Error:
|
||||
parent.observer?.on(event)
|
||||
parent.dispose()
|
||||
case .Completed:
|
||||
parent.group.removeDisposable(disposeKey)
|
||||
|
||||
if state.stopped && state.group.count == 1 {
|
||||
trySendCompleted(parent.observer)
|
||||
self.parent.dispose()
|
||||
if parent.stopped && parent.group.count == 1 {
|
||||
parent.observer?.on(.Completed)
|
||||
parent.dispose()
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -54,47 +47,36 @@ class MergeSink<S: ObservableType, O: ObserverType where O.Element == S.E> : Sin
|
||||
typealias Element = S
|
||||
typealias Parent = Merge<S>
|
||||
|
||||
typealias MergeState = (
|
||||
stopped: Bool,
|
||||
group: CompositeDisposable,
|
||||
sourceSubscription: SingleAssignmentDisposable
|
||||
)
|
||||
|
||||
let parent: Parent
|
||||
|
||||
var lock = NSRecursiveLock()
|
||||
|
||||
var mergeState: MergeState = (
|
||||
stopped: false,
|
||||
group: CompositeDisposable(),
|
||||
sourceSubscription: SingleAssignmentDisposable()
|
||||
)
|
||||
// state
|
||||
var stopped = false
|
||||
|
||||
let group = CompositeDisposable()
|
||||
let sourceSubscription = SingleAssignmentDisposable()
|
||||
|
||||
init(parent: Parent, observer: O, cancel: Disposable) {
|
||||
self.parent = parent
|
||||
|
||||
_ = self.mergeState
|
||||
|
||||
super.init(observer: observer, cancel: cancel)
|
||||
}
|
||||
|
||||
func run() -> Disposable {
|
||||
let state = self.mergeState
|
||||
|
||||
state.group.addDisposable(state.sourceSubscription)
|
||||
group.addDisposable(sourceSubscription)
|
||||
|
||||
let disposable = self.parent.sources.subscribeSafe(self)
|
||||
state.sourceSubscription.disposable = disposable
|
||||
sourceSubscription.disposable = disposable
|
||||
|
||||
return state.group
|
||||
return group
|
||||
}
|
||||
|
||||
func on(event: Event<Element>) {
|
||||
switch event {
|
||||
case .Next(let value):
|
||||
|
||||
let innerSubscription = SingleAssignmentDisposable()
|
||||
let maybeKey = mergeState.group.addDisposable(innerSubscription)
|
||||
let maybeKey = group.addDisposable(innerSubscription)
|
||||
|
||||
if let key = maybeKey {
|
||||
let observer = MergeSinkIter(parent: self, disposeKey: key)
|
||||
@ -103,23 +85,19 @@ class MergeSink<S: ObservableType, O: ObserverType where O.Element == S.E> : Sin
|
||||
}
|
||||
case .Error(let error):
|
||||
lock.performLocked {
|
||||
trySendError(observer, error)
|
||||
observer?.on(.Error(error))
|
||||
self.dispose()
|
||||
}
|
||||
case .Completed:
|
||||
lock.performLocked {
|
||||
let mergeState = self.mergeState
|
||||
|
||||
let group = mergeState.group
|
||||
|
||||
self.mergeState.stopped = true
|
||||
self.stopped = true
|
||||
|
||||
if group.count == 1 {
|
||||
trySendCompleted(observer)
|
||||
observer?.on(.Completed)
|
||||
self.dispose()
|
||||
}
|
||||
else {
|
||||
mergeState.sourceSubscription.dispose()
|
||||
sourceSubscription.dispose()
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -142,30 +120,25 @@ class MergeConcurrentSinkIter<S: ObservableType, O: ObserverType where S.E == O.
|
||||
}
|
||||
|
||||
func on(event: Event<Element>) {
|
||||
switch event {
|
||||
case .Next:
|
||||
parent.lock.performLocked {
|
||||
trySend(parent.observer, event)
|
||||
}
|
||||
case .Error:
|
||||
parent.lock.performLocked {
|
||||
trySend(parent.observer, event)
|
||||
parent.lock.performLocked {
|
||||
switch event {
|
||||
case .Next:
|
||||
parent.observer?.on(event)
|
||||
case .Error:
|
||||
parent.observer?.on(event)
|
||||
self.parent.dispose()
|
||||
}
|
||||
case .Completed:
|
||||
parent.lock.performLocked {
|
||||
let mergeState = parent.mergeState
|
||||
mergeState.group.removeDisposable(disposeKey)
|
||||
|
||||
if mergeState.queue.value.count > 0 {
|
||||
let s = mergeState.queue.value.dequeue()
|
||||
self.parent.subscribe(s, group: mergeState.group)
|
||||
case .Completed:
|
||||
parent.group.removeDisposable(disposeKey)
|
||||
let queue = parent.queue
|
||||
if queue.value.count > 0 {
|
||||
let s = queue.value.dequeue()
|
||||
self.parent.subscribe(s, group: parent.group)
|
||||
}
|
||||
else {
|
||||
parent.mergeState.activeCount = mergeState.activeCount - 1
|
||||
parent.activeCount = parent.activeCount - 1
|
||||
|
||||
if mergeState.stopped && parent.mergeState.activeCount == 0 {
|
||||
trySendCompleted(parent.observer)
|
||||
if parent.stopped && parent.activeCount == 0 {
|
||||
parent.observer?.on(.Completed)
|
||||
self.parent.dispose()
|
||||
}
|
||||
}
|
||||
@ -179,42 +152,29 @@ class MergeConcurrentSink<S: ObservableType, O: ObserverType where S.E == O.Elem
|
||||
typealias Parent = Merge<S>
|
||||
typealias QueueType = Queue<S>
|
||||
|
||||
typealias MergeState = (
|
||||
stopped: Bool,
|
||||
queue: RxMutableBox<QueueType>,
|
||||
sourceSubscription: SingleAssignmentDisposable,
|
||||
group: CompositeDisposable,
|
||||
activeCount: Int
|
||||
)
|
||||
|
||||
let parent: Parent
|
||||
|
||||
var lock = NSRecursiveLock()
|
||||
var mergeState: MergeState = (
|
||||
stopped: false,
|
||||
queue: RxMutableBox(Queue(capacity: 2)),
|
||||
sourceSubscription: SingleAssignmentDisposable(),
|
||||
group: CompositeDisposable(),
|
||||
activeCount: 0
|
||||
)
|
||||
var stopped = false
|
||||
var activeCount = 0
|
||||
var queue = RxMutableBox(QueueType(capacity: 2))
|
||||
|
||||
let sourceSubscription = SingleAssignmentDisposable()
|
||||
let group = CompositeDisposable()
|
||||
|
||||
init(parent: Parent, observer: O, cancel: Disposable) {
|
||||
self.parent = parent
|
||||
|
||||
let state = self.mergeState
|
||||
|
||||
_ = state.group.addDisposable(state.sourceSubscription)
|
||||
group.addDisposable(sourceSubscription)
|
||||
super.init(observer: observer, cancel: cancel)
|
||||
}
|
||||
|
||||
func run() -> Disposable {
|
||||
let state = self.mergeState
|
||||
|
||||
state.group.addDisposable(state.sourceSubscription)
|
||||
group.addDisposable(sourceSubscription)
|
||||
|
||||
let disposable = self.parent.sources.subscribeSafe(self)
|
||||
state.sourceSubscription.disposable = disposable
|
||||
return state.group
|
||||
sourceSubscription.disposable = disposable
|
||||
return group
|
||||
}
|
||||
|
||||
func subscribe(innerSource: Element, group: CompositeDisposable) {
|
||||
@ -233,41 +193,36 @@ class MergeConcurrentSink<S: ObservableType, O: ObserverType where S.E == O.Elem
|
||||
func on(event: Event<Element>) {
|
||||
switch event {
|
||||
case .Next(let value):
|
||||
|
||||
let subscribe = lock.calculateLocked { () -> Bool in
|
||||
let mergeState = self.mergeState
|
||||
if mergeState.activeCount < self.parent.maxConcurrent {
|
||||
self.mergeState.activeCount += 1
|
||||
if activeCount < self.parent.maxConcurrent {
|
||||
self.activeCount += 1
|
||||
return true
|
||||
}
|
||||
else {
|
||||
mergeState.queue.value.enqueue(value)
|
||||
queue.value.enqueue(value)
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
if subscribe {
|
||||
self.subscribe(value, group: mergeState.group)
|
||||
self.subscribe(value, group: group)
|
||||
}
|
||||
case .Error(let error):
|
||||
lock.performLocked {
|
||||
trySendError(observer, error)
|
||||
observer?.on(.Error(error))
|
||||
self.dispose()
|
||||
}
|
||||
case .Completed:
|
||||
lock.performLocked {
|
||||
let mergeState = self.mergeState
|
||||
_ = mergeState.group
|
||||
|
||||
if mergeState.activeCount == 0 {
|
||||
trySendCompleted(observer)
|
||||
if activeCount == 0 {
|
||||
observer?.on(.Completed)
|
||||
self.dispose()
|
||||
}
|
||||
else {
|
||||
mergeState.sourceSubscription.dispose()
|
||||
sourceSubscription.dispose()
|
||||
}
|
||||
|
||||
self.mergeState.stopped = true
|
||||
stopped = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -91,21 +91,21 @@ function createDevices() {
|
||||
}
|
||||
|
||||
function deleteDevices() {
|
||||
xcrun simctl delete RxSwiftTest-iPhone4s-iOS_7.1
|
||||
xcrun simctl delete RxSwiftTest-iPhone5-iOS_7.1
|
||||
xcrun simctl delete RxSwiftTest-iPhone5s-iOS_7.1
|
||||
xcrun simctl delete RxSwiftTest-iPhone4s-iOS_7.1 || echo "failed"
|
||||
xcrun simctl delete RxSwiftTest-iPhone5-iOS_7.1 || echo "failed"
|
||||
xcrun simctl delete RxSwiftTest-iPhone5s-iOS_7.1 || echo "failed"
|
||||
|
||||
xcrun simctl delete RxSwiftTest-iPhone4s-iOS_8.4
|
||||
xcrun simctl delete RxSwiftTest-iPhone5-iOS_8.4
|
||||
xcrun simctl delete RxSwiftTest-iPhone5s-iOS_8.4
|
||||
xcrun simctl delete RxSwiftTest-iPhone4s-iOS_8.4 || echo "failed"
|
||||
xcrun simctl delete RxSwiftTest-iPhone5-iOS_8.4 || echo "failed"
|
||||
xcrun simctl delete RxSwiftTest-iPhone5s-iOS_8.4 || echo "failed"
|
||||
|
||||
xcrun simctl delete RxSwiftTest-iPhone6-iOS_8.4
|
||||
xcrun simctl delete RxSwiftTest-iPhone6Plus-iOS_8.4
|
||||
xcrun simctl delete RxSwiftTest-iPhone6-iOS_8.4 || echo "failed"
|
||||
xcrun simctl delete RxSwiftTest-iPhone6Plus-iOS_8.4 || echo "failed"
|
||||
|
||||
xcrun simctl delete RxSwiftTest-iPhone4s-iOS_9.0
|
||||
xcrun simctl delete RxSwiftTest-iPhone5-iOS_9.0
|
||||
xcrun simctl delete RxSwiftTest-iPhone5s-iOS_9.0
|
||||
xcrun simctl delete RxSwiftTest-iPhone4s-iOS_9.0 || echo "failed"
|
||||
xcrun simctl delete RxSwiftTest-iPhone5-iOS_9.0 || echo "failed"
|
||||
xcrun simctl delete RxSwiftTest-iPhone5s-iOS_9.0 || echo "failed"
|
||||
|
||||
xcrun simctl delete RxSwiftTest-iPhone6-iOS_9.0
|
||||
xcrun simctl delete RxSwiftTest-iPhone6Plus-iOS_9.0
|
||||
xcrun simctl delete RxSwiftTest-iPhone6-iOS_9.0 || echo "failed"
|
||||
xcrun simctl delete RxSwiftTest-iPhone6Plus-iOS_9.0 || echo "failed"
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user