| function Queue () { |
| this.head = new Item('head', null) |
| } |
| module.exports = Queue |
| |
| Queue.prototype.append = function append (kind, value) { |
| var item = new Item(kind, value) |
| this.head.prepend(item) |
| return item |
| } |
| |
| Queue.prototype.isEmpty = function isEmpty () { |
| return this.head.prev === this.head |
| } |
| |
| Queue.prototype.first = function first () { |
| return this.head.next |
| } |
| |
| function Item (kind, value) { |
| this.prev = this |
| this.next = this |
| this.kind = kind |
| this.value = value |
| } |
| |
| Item.prototype.prepend = function prepend (other) { |
| other.prev = this.prev |
| other.next = this |
| other.prev.next = other |
| other.next.prev = other |
| } |
| |
| Item.prototype.dequeue = function dequeue () { |
| var prev = this.prev |
| var next = this.next |
| |
| prev.next = next |
| next.prev = prev |
| this.prev = this |
| this.next = this |
| |
| return this.value |
| } |
| |
| Item.prototype.isEmpty = function isEmpty () { |
| return this.prev === this |
| } |