From 13ec2c0fea8dbdd9088057cea2302fb587f01f3d Mon Sep 17 00:00:00 2001 From: Nicholas Maccharoli Date: Thu, 21 Apr 2016 18:39:57 +0900 Subject: [PATCH] Leverage defer to make Queue's code more concise --- RxSwift/DataStructures/Queue.swift | 40 ++++++++++++++++-------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/RxSwift/DataStructures/Queue.swift b/RxSwift/DataStructures/Queue.swift index f38d4ae7..7261dff3 100644 --- a/RxSwift/DataStructures/Queue.swift +++ b/RxSwift/DataStructures/Queue.swift @@ -109,7 +109,7 @@ public struct Queue: SequenceType { _storage[_pushNextIndex] = element _pushNextIndex += 1 - _count = _count + 1 + _count += 1 if _pushNextIndex >= _storage.count { _pushNextIndex -= _storage.count @@ -120,13 +120,13 @@ public struct Queue: SequenceType { precondition(count > 0) let index = dequeueIndex - let value = _storage[index]! - - _storage[index] = nil - - _count = _count - 1 - - return value + + defer { + _storage[index] = nil + _count -= 1 + } + + return _storage[index]! } /** @@ -139,14 +139,14 @@ public struct Queue: SequenceType { return nil } - let value = dequeueElementOnly() - - let downsizeLimit = _storage.count / (_resizeFactor * _resizeFactor) - if _count < downsizeLimit && downsizeLimit >= _initialCapacity { - resizeTo(_storage.count / _resizeFactor) + defer { + let downsizeLimit = _storage.count / (_resizeFactor * _resizeFactor) + if _count < downsizeLimit && downsizeLimit >= _initialCapacity { + resizeTo(_storage.count / _resizeFactor) + } } - - return value + + return dequeueElementOnly() } /** @@ -161,14 +161,16 @@ public struct Queue: SequenceType { return nil } - count -= 1 + defer { + count -= 1 + i += 1 + } + if i >= self._storage.count { i -= self._storage.count } - let element = self._storage[i] - i += 1 - return element + return self._storage[i] } } }