action-gh-release/node_modules/bottleneck/src/DLList.coffee
2019-10-20 17:50:51 -04:00

38 lines
941 B
CoffeeScript

class DLList
constructor: (@incr, @decr) ->
@_first = null
@_last = null
@length = 0
push: (value) ->
@length++
@incr?()
node = { value, prev: @_last, next: null }
if @_last?
@_last.next = node
@_last = node
else @_first = @_last = node
undefined
shift: () ->
if not @_first? then return
else
@length--
@decr?()
value = @_first.value
if (@_first = @_first.next)?
@_first.prev = null
else
@_last = null
value
first: () -> if @_first? then @_first.value
getArray: () ->
node = @_first
while node? then (ref = node; node = node.next; ref.value)
forEachShift: (cb) ->
node = @shift()
while node? then (cb node; node = @shift())
undefined
debug: () ->
node = @_first
while node? then (ref = node; node = node.next; { value: ref.value, prev: ref.prev?.value, next: ref.next?.value })
module.exports = DLList