summaryrefslogtreecommitdiff
path: root/lib/internal/linkedlist.js
diff options
context:
space:
mode:
authorAndras <andras@kinvey.com>2016-04-26 10:33:19 -0400
committerJeremiah Senkpiel <fishrock123@rocketmail.com>2016-06-29 11:02:25 +0200
commit6b0f86a8d519fd0780d2f6db2e7f28c2715dd795 (patch)
treeb04f62fee29ec562fe534b6942faa0dfed9e0bd4 /lib/internal/linkedlist.js
parentf8d3f6fbf4b0471677a0e4becf458a186fb2e4de (diff)
downloadandroid-node-v8-6b0f86a8d519fd0780d2f6db2e7f28c2715dd795.tar.gz
android-node-v8-6b0f86a8d519fd0780d2f6db2e7f28c2715dd795.tar.bz2
android-node-v8-6b0f86a8d519fd0780d2f6db2e7f28c2715dd795.zip
timers: optimize linkedlist
Now uses a new L.create() factory to create access-optimized linkedlist objects. PR-URL: https://github.com/nodejs/node/pull/6436 Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com>
Diffstat (limited to 'lib/internal/linkedlist.js')
-rw-r--r--lib/internal/linkedlist.js18
1 files changed, 16 insertions, 2 deletions
diff --git a/lib/internal/linkedlist.js b/lib/internal/linkedlist.js
index 02186cfedc..33ada550ef 100644
--- a/lib/internal/linkedlist.js
+++ b/lib/internal/linkedlist.js
@@ -6,6 +6,13 @@ function init(list) {
}
exports.init = init;
+// create a new linked list
+function create() {
+ var list = { _idleNext: null, _idlePrev: null };
+ init(list);
+ return list;
+}
+exports.create = create;
// show the most idle item
function peek(list) {
@@ -42,10 +49,17 @@ exports.remove = remove;
// remove a item from its list and place at the end.
function append(list, item) {
- remove(item);
+ if (item._idleNext || item._idlePrev) {
+ remove(item);
+ }
+
+ // items are linked with _idleNext -> (older) and _idlePrev -> (newer)
+ // TODO: swap the linkage to match the intuitive older items at "prev"
item._idleNext = list._idleNext;
- list._idleNext._idlePrev = item;
item._idlePrev = list;
+
+ // the list _idleNext points to tail (newest) and _idlePrev to head (oldest)
+ list._idleNext._idlePrev = item;
list._idleNext = item;
}
exports.append = append;