123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- ;(function() { // closure for web browsers
- function Item (data, prev, next) {
- this.next = next
- if (next) next.prev = this
- this.prev = prev
- if (prev) prev.next = this
- this.data = data
- }
- function FastList () {
- if (!(this instanceof FastList)) return new FastList
- this._head = null
- this._tail = null
- this.length = 0
- }
- FastList.prototype =
- { push: function (data) {
- this._tail = new Item(data, this._tail, null)
- if (!this._head) this._head = this._tail
- this.length ++
- }
- , pop: function () {
- if (this.length === 0) return undefined
- var t = this._tail
- this._tail = t.prev
- if (t.prev) {
- t.prev = this._tail.next = null
- }
- this.length --
- if (this.length === 1) this._head = this._tail
- else if (this.length === 0) this._head = this._tail = null
- return t.data
- }
- , unshift: function (data) {
- this._head = new Item(data, null, this._head)
- if (!this._tail) this._tail = this._head
- this.length ++
- }
- , shift: function () {
- if (this.length === 0) return undefined
- var h = this._head
- this._head = h.next
- if (h.next) {
- h.next = this._head.prev = null
- }
- this.length --
- if (this.length === 1) this._tail = this._head
- else if (this.length === 0) this._head = this._tail = null
- return h.data
- }
- , item: function (n) {
- if (n < 0) n = this.length + n
- var h = this._head
- while (n-- > 0 && h) h = h.next
- return h ? h.data : undefined
- }
- , slice: function (n, m) {
- if (!n) n = 0
- if (!m) m = this.length
- if (m < 0) m = this.length + m
- if (n < 0) n = this.length + n
- if (m <= n) {
- throw new Error("invalid offset: "+n+","+m)
- }
- var len = m - n
- , ret = new Array(len)
- , i = 0
- , h = this._head
- while (n-- > 0 && h) h = h.next
- while (i < len && h) {
- ret[i++] = h.data
- h = h.next
- }
- return ret
- }
- , drop: function () {
- FastList.call(this)
- }
- }
- if ("undefined" !== typeof(exports)) module.exports = FastList
- else if ("function" === typeof(define) && define.amd) {
- define("FastList", function() { return FastList })
- } else (function () { return this })().FastList = FastList
- })()
|