RVS_FIFOQueue
public struct RVS_FIFOQueue<Element> : OLEB_Queue
extension RVS_FIFOQueue: ExpressibleByArrayLiteral
extension RVS_FIFOQueue: MutableCollection
An efficient variable-size FIFO queue of elements of type “Element.”
-
This is the “delivery” queue. Elements are removed, one by one, from the top of this queue. When the queue is empty, and a request is made for an element, it first asks for the reveresed contents of the right queue, which is then emptied.
Declaration
Swift
private var _leftQueue: [Element]
-
This is the “staging queue.” We add elements, one by one, to the top of this queue.
Declaration
Swift
private var _rightQueue: [Element]
-
This will push the single element into the 0th (first) place. It is not an efficient operation, but may be necessary, in some cases.
Declaration
Swift
mutating public func cutTheLine(_ inNewElement: Element)
Parameters
inNewElement
The Element to be enqueued (placed on the front of the list).
-
Add an Element to the end of the queue.
Complexity
O(1).Declaration
Swift
mutating public func enqueue(_ inNewElement: Element)
Parameters
inNewElement
The Element to be enqueued (placed on the end of the list).
-
Add an Array of Element to the end of the queue.
Complexity
O(n), where n is the number of elements in the input Array.Declaration
Swift
mutating public func enqueue(_ inNewElements: [Element])
Parameters
inNewElements
The Elements to be enqueued (placed on the end of the list). They are appened in the order presented.
-
Removes and returns from the front of the queue. Returns nil for an empty queue.
Complexity
Amortized O(1). The “Amortized” is because there’s a one-time “charge” for dumping the right queue into the left queue. The way that this works, is that the right queue is a “staging” queue. It’s cheap to shove elements onto the top. We remove elements from the top of the left queue, so there’s no moving of memory. When the left queue is empty, we dump the entire right (staging) queue into it, as reversed. The idea is to keep all the operations on the tops of the queues. That prevents massive memory movements every time we access the bottom.Declaration
Swift
@discardableResult mutating public func dequeue() -> Element?
Return Value
The first Element. Nil, if none. Can be ignored.
-
Deletes all data in the queue.
Complexity
O(1).Declaration
Swift
mutating public func removeAll()
-
Variadic initializer.
Declaration
Swift
public init(arrayLiteral inElements: Element...)
-
Declaration
Swift
public var startIndex: Int { get }
Return Value
0. The start is always 0.
-
Declaration
Swift
public var endIndex: Int { get }
Return Value
The length of both internal queues, combined.
-
Declaration
Swift
public func index(after inIndex: Int) -> Int
Parameters
after
The index we want to get after.
Return Value
The input plus one (Can’t get simpler than that). It can return the endIndex, which is past the last element.
-
Declaration
Swift
public subscript(inPosition: Int) -> Element { get set }
Parameters
inPosition
The position of the element we are working on.
Return Value
The element we are subscripting.