# Roughly following https://learnersbucket.com/tutorials/data-structures/implement-deque-data-structure-in-javascript/ export default class Deque constructor: -> @clear() insertLeft: (elm) -> # Add an item on the left if @left_full > 0 @items[--@left_full] = elm else @right_open++ @items.unshift elm insertRight: (elm) -> # Add an item on the right of the list @items[@right_open++] = elm removeLeft: -> # Remove the item from the left @nonempty() and @items[@left_full++] removeRight: -> # Remove the item from the right @nonempty() and @items[--@right_open] left: -> # Peek the leftmost element @nonempty and @items[@left_full] right: -> # Peek the last element @nonempty and @items[@right_open - 1] nonempty: -> # Returns null if no elements (@right_open > @left_full) or null empty: -> # Returns null if any elements (@right_open is @left_full) or null size: -> # Number of elements @right_open - @left_full clear: -> # Remove all elements @right_open = @left_full = 0 @items = [] toString: -> "<#{@items[@left...@right].join(",")}>"