summaryrefslogtreecommitdiff
path: root/client/node_modules/domino/lib/LinkedList.js
diff options
context:
space:
mode:
Diffstat (limited to 'client/node_modules/domino/lib/LinkedList.js')
-rw-r--r--client/node_modules/domino/lib/LinkedList.js44
1 files changed, 44 insertions, 0 deletions
diff --git a/client/node_modules/domino/lib/LinkedList.js b/client/node_modules/domino/lib/LinkedList.js
new file mode 100644
index 0000000..3a18902
--- /dev/null
+++ b/client/node_modules/domino/lib/LinkedList.js
@@ -0,0 +1,44 @@
+"use strict";
+var utils = require('./utils');
+
+var LinkedList = module.exports = {
+ // basic validity tests on a circular linked list a
+ valid: function(a) {
+ utils.assert(a, "list falsy");
+ utils.assert(a._previousSibling, "previous falsy");
+ utils.assert(a._nextSibling, "next falsy");
+ // xxx check that list is actually circular
+ return true;
+ },
+ // insert a before b
+ insertBefore: function(a, b) {
+ utils.assert(LinkedList.valid(a) && LinkedList.valid(b));
+ var a_first = a, a_last = a._previousSibling;
+ var b_first = b, b_last = b._previousSibling;
+ a_first._previousSibling = b_last;
+ a_last._nextSibling = b_first;
+ b_last._nextSibling = a_first;
+ b_first._previousSibling = a_last;
+ utils.assert(LinkedList.valid(a) && LinkedList.valid(b));
+ },
+ // replace a single node a with a list b (which could be null)
+ replace: function(a, b) {
+ utils.assert(LinkedList.valid(a) && (b===null || LinkedList.valid(b)));
+ if (b!==null) {
+ LinkedList.insertBefore(b, a);
+ }
+ LinkedList.remove(a);
+ utils.assert(LinkedList.valid(a) && (b===null || LinkedList.valid(b)));
+ },
+ // remove single node a from its list
+ remove: function(a) {
+ utils.assert(LinkedList.valid(a));
+ var prev = a._previousSibling;
+ if (prev === a) { return; }
+ var next = a._nextSibling;
+ prev._nextSibling = next;
+ next._previousSibling = prev;
+ a._previousSibling = a._nextSibling = a;
+ utils.assert(LinkedList.valid(a));
+ }
+};