Skip to content

Commit 47ffe6a

Browse files
committed
Improve _Handlers by keeping element order.
1 parent 406e7d0 commit 47ffe6a

File tree

1 file changed

+11
-4
lines changed

1 file changed

+11
-4
lines changed

SwiftTask/_StateMachine.swift

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -220,21 +220,28 @@ internal struct _HandlerToken
220220

221221
internal struct _Handlers<T>: SequenceType
222222
{
223+
internal typealias KeyValue = (key: Int, value: T)
224+
223225
private var currentKey: Int = 0
224-
private var elements = [Int : T]()
226+
private var elements = [KeyValue]()
225227

226228
internal mutating func append(value: T) -> _HandlerToken
227229
{
228230
self.currentKey = self.currentKey &+ 1
229231

230-
self.elements[self.currentKey] = value
232+
self.elements += [(key: self.currentKey, value: value)]
231233

232234
return _HandlerToken(key: self.currentKey)
233235
}
234236

235237
internal mutating func remove(token: _HandlerToken) -> T?
236238
{
237-
return self.elements.removeValueForKey(token.key)
239+
for var i = 0; i < self.elements.count; i++ {
240+
if self.elements[i].key == token.key {
241+
return self.elements.removeAtIndex(i).value
242+
}
243+
}
244+
return nil
238245
}
239246

240247
internal mutating func removeAll(keepCapacity: Bool = false)
@@ -244,6 +251,6 @@ internal struct _Handlers<T>: SequenceType
244251

245252
internal func generate() -> GeneratorOf<T>
246253
{
247-
return GeneratorOf(self.elements.values.generate())
254+
return GeneratorOf(self.elements.map { $0.value }.generate())
248255
}
249256
}

0 commit comments

Comments
 (0)