Files
Cloud-book/node_modules/dagre-layout/lib/data/list.js
2025-08-27 17:10:05 +08:00

57 lines
1.1 KiB
JavaScript

/*
* Simple doubly linked list implementation derived from Cormen, et al.,
* "Introduction to Algorithms".
*/
function List () {
const sentinel = {}
sentinel._next = sentinel._prev = sentinel
this._sentinel = sentinel
}
List.prototype.dequeue = function () {
const sentinel = this._sentinel
const entry = sentinel._prev
if (entry !== sentinel) {
unlink(entry)
return entry
}
}
List.prototype.enqueue = function (entry) {
const sentinel = this._sentinel
if (entry._prev && entry._next) {
unlink(entry)
}
entry._next = sentinel._next
sentinel._next._prev = entry
sentinel._next = entry
entry._prev = sentinel
}
List.prototype.toString = function () {
const strs = []
const sentinel = this._sentinel
let curr = sentinel._prev
while (curr !== sentinel) {
strs.push(JSON.stringify(curr, filterOutLinks))
curr = curr._prev
}
return '[' + strs.join(', ') + ']'
}
function unlink (entry) {
entry._prev._next = entry._next
entry._next._prev = entry._prev
delete entry._next
delete entry._prev
}
function filterOutLinks (k, v) {
if (k !== '_next' && k !== '_prev') {
return v
}
}
export default List