0001 // 0002 // RecursiveScheduler.swift 0003 // RxSwift 0004 // 0005 // Created by Krunoslav Zaher on 6/7/15. 0006 // Copyright © 2015 Krunoslav Zaher. All rights reserved. 0007 // 0008 0009 import Foundation 0010 0011 /** 0012 Type erased recursive scheduler. 0013 */ 0014 class AnyRecursiveScheduler<State
RecursiveScheduler.swift:15 typealias Action = (state: State, scheduler: AnyRecursiveScheduler<State>) -> VoidSchedulerServices+Emulation.swift:18 typealias RecursiveScheduler = AnyRecursiveScheduler<SchedulePeriodicRecursiveCommand>SchedulerType.swift:71 func scheduleRecursive<State>(state: State, dueTime: RxTimeInterval, action: (state: State, scheduler: AnyRecursiveScheduler<State>) -> ()) -> Disposable {SchedulerType.swift:72 let scheduler = AnyRecursiveScheduler(scheduler: self, action: action)> { 0015 typealias Action
RecursiveScheduler.swift:15 typealias Action = (state: State, scheduler: AnyRecursiveScheduler<State>) -> VoidRecursiveScheduler.swift:15 typealias Action = (state: State, scheduler: AnyRecursiveScheduler<State>) -> VoidRecursiveScheduler.swift:36 func schedule(state: State, dueTime: RxTimeInterval) {RecursiveScheduler.swift:79 func schedule(state: State) {= (state: State, scheduler: AnyRecursiveScheduler<State>) -> Void 0016 0017 private let _lock
RecursiveScheduler.swift:23 private var _action: Action?RecursiveScheduler.swift:25 init(scheduler: SchedulerType, action: Action) {RecursiveScheduler.swift:48 let action = self._lock.calculateLocked { () -> Action? inRecursiveScheduler.swift:91 let action = self._lock.calculateLocked { () -> Action? in= NSRecursiveLock() 0018 0019 // state 0020 private let _group
RecursiveScheduler.swift:48 let action = self._lock.calculateLocked { () -> Action? inRecursiveScheduler.swift:66 _lock.performLocked {RecursiveScheduler.swift:91 let action = self._lock.calculateLocked { () -> Action? inRecursiveScheduler.swift:109 _lock.performLocked {RecursiveScheduler.swift:118 _lock.performLocked {= CompositeDisposable() 0021 0022 private var _scheduler
RecursiveScheduler.swift:44 if self._group.disposed {RecursiveScheduler.swift:50 self._group.removeDisposable(removeKey!)RecursiveScheduler.swift:68 removeKey = _group.addDisposable(d)RecursiveScheduler.swift:87 if self._group.disposed {RecursiveScheduler.swift:93 self._group.removeDisposable(removeKey!)RecursiveScheduler.swift:111 removeKey = _group.addDisposable(d)RecursiveScheduler.swift:121 _group.dispose(): SchedulerType 0023 private var _action
RecursiveScheduler.swift:27 _scheduler = schedulerRecursiveScheduler.swift:42 let d = _scheduler.scheduleRelative(state, dueTime: dueTime) { (state) -> Disposable inRecursiveScheduler.swift:85 let d = _scheduler.schedule(state) { (state) -> Disposable in: Action? 0024 0025 init
RecursiveScheduler.swift:26 _action = actionRecursiveScheduler.swift:56 return self._actionRecursiveScheduler.swift:99 return self._actionRecursiveScheduler.swift:119 _action = nil(scheduler: SchedulerType, action: Action) { 0026 _action = action 0027 _scheduler = scheduler 0028 } 0029 0030 /** 0031 Schedules an action to be executed recursively. 0032 0033 - parameter state: State passed to the action to be executed. 0034 - parameter dueTime: Relative time after which to execute the recursive action. 0035 */ 0036 func schedule
SchedulerType.swift:72 let scheduler = AnyRecursiveScheduler(scheduler: self, action: action)(state: State, dueTime: RxTimeInterval) { 0037 0038 var isAdded = false 0039 var isDone = false 0040 0041 var removeKey: CompositeDisposable.DisposeKey? = nil 0042 let d = _scheduler.scheduleRelative(state, dueTime: dueTime) { (state) -> Disposable in 0043 // best effort 0044 if self._group.disposed { 0045 return NopDisposable.instance 0046 } 0047 0048 let action = self._lock.calculateLocked { () -> Action? in 0049 if isAdded { 0050 self._group.removeDisposable(removeKey!) 0051 } 0052 else { 0053 isDone = true 0054 } 0055 0056 return self._action 0057 } 0058 0059 if let action = action { 0060 action(state: state, scheduler: self) 0061 } 0062 0063 return NopDisposable.instance 0064 } 0065 0066 _lock.performLocked { 0067 if !isDone { 0068 removeKey = _group.addDisposable(d) 0069 isAdded = true 0070 } 0071 } 0072 } 0073 0074 /** 0075 Schedules an action to be executed recursively. 0076 0077 - parameter state: State passed to the action to be executed. 0078 */ 0079 func schedule
SchedulerServices+Emulation.swift:46 scheduler.schedule(.Tick, dueTime: _period)SchedulerType.swift:74 scheduler.schedule(state, dueTime: dueTime)(state: State) { 0080 0081 var isAdded = false 0082 var isDone = false 0083 0084 var removeKey: CompositeDisposable.DisposeKey? = nil 0085 let d = _scheduler.schedule(state) { (state) -> Disposable in 0086 // best effort 0087 if self._group.disposed { 0088 return NopDisposable.instance 0089 } 0090 0091 let action = self._lock.calculateLocked { () -> Action? in 0092 if isAdded { 0093 self._group.removeDisposable(removeKey!) 0094 } 0095 else { 0096 isDone = true 0097 } 0098 0099 return self._action 0100 } 0101 0102 if let action = action { 0103 action(state: state, scheduler: self) 0104 } 0105 0106 return NopDisposable.instance 0107 } 0108 0109 _lock.performLocked { 0110 if !isDone { 0111 removeKey = _group.addDisposable(d) 0112 isAdded = true 0113 } 0114 } 0115 } 0116 0117 func dispose
SchedulerServices+Emulation.swift:59 scheduler.schedule(SchedulePeriodicRecursiveCommand.DispatchStart)() { 0118 _lock.performLocked { 0119 _action = nil 0120 } 0121 _group.dispose() 0122 } 0123 } 0124 0125 /** 0126 Type erased recursive scheduler. 0127 */ 0128 class RecursiveImmediateScheduler
SchedulerType.swift:77 scheduler.dispose()<State
ImmediateSchedulerType.swift:34 let recursiveScheduler = RecursiveImmediateScheduler(action: action, scheduler: self)> { 0129 typealias Action
RecursiveScheduler.swift:129 typealias Action = (state: State, recurse: State -> Void) -> VoidRecursiveScheduler.swift:129 typealias Action = (state: State, recurse: State -> Void) -> VoidRecursiveScheduler.swift:149 func schedule(state: State) {= (state: State, recurse: State -> Void) -> Void 0130 0131 private var _lock
RecursiveScheduler.swift:134 private var _action: Action?RecursiveScheduler.swift:137 init(action: Action, scheduler: ImmediateSchedulerType) {RecursiveScheduler.swift:161 let action = self._lock.calculateLocked { () -> Action? in= SpinLock() 0132 private let _group
RecursiveScheduler.swift:161 let action = self._lock.calculateLocked { () -> Action? inRecursiveScheduler.swift:179 _lock.performLocked {RecursiveScheduler.swift:188 _lock.performLocked {= CompositeDisposable() 0133 0134 private var _action
RecursiveScheduler.swift:157 if self._group.disposed {RecursiveScheduler.swift:163 self._group.removeDisposable(removeKey!)RecursiveScheduler.swift:181 removeKey = _group.addDisposable(d)RecursiveScheduler.swift:191 _group.dispose(): Action? 0135 private let _scheduler
RecursiveScheduler.swift:138 _action = actionRecursiveScheduler.swift:169 return self._actionRecursiveScheduler.swift:189 _action = nil: ImmediateSchedulerType 0136 0137 init
RecursiveScheduler.swift:139 _scheduler = schedulerRecursiveScheduler.swift:155 let d = _scheduler.schedule(state) { (state) -> Disposable in(action: Action, scheduler: ImmediateSchedulerType) { 0138 _action = action 0139 _scheduler = scheduler 0140 } 0141 0142 // immediate scheduling 0143 0144 /** 0145 Schedules an action to be executed recursively. 0146 0147 - parameter state: State passed to the action to be executed. 0148 */ 0149 func schedule
ImmediateSchedulerType.swift:34 let recursiveScheduler = RecursiveImmediateScheduler(action: action, scheduler: self)(state: State) { 0150 0151 var isAdded = false 0152 var isDone = false 0153 0154 var removeKey: CompositeDisposable.DisposeKey? = nil 0155 let d = _scheduler.schedule(state) { (state) -> Disposable in 0156 // best effort 0157 if self._group.disposed { 0158 return NopDisposable.instance 0159 } 0160 0161 let action = self._lock.calculateLocked { () -> Action? in 0162 if isAdded { 0163 self._group.removeDisposable(removeKey!) 0164 } 0165 else { 0166 isDone = true 0167 } 0168 0169 return self._action 0170 } 0171 0172 if let action = action { 0173 action(state: state, recurse: self.schedule) 0174 } 0175 0176 return NopDisposable.instance 0177 } 0178 0179 _lock.performLocked { 0180 if !isDone { 0181 removeKey = _group.addDisposable(d) 0182 isAdded = true 0183 } 0184 } 0185 } 0186 0187 func dispose
ImmediateSchedulerType.swift:36 recursiveScheduler.schedule(state)RecursiveScheduler.swift:173 action(state: state, recurse: self.schedule)() { 0188 _lock.performLocked { 0189 _action = nil 0190 } 0191 _group.dispose() 0192 } 0193 }
ImmediateSchedulerType.swift:39 recursiveScheduler.dispose()