| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent e727cb5 commit a5d8945
3 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -6,6 +6,13 @@ function init(list) { | |||
| 6 | 6 | } | |
| 7 | 7 | exports.init = init; | |
| 8 | 8 | ||
| 9 | + // create a new linked list | ||
| 10 | + function create() { | ||
| 11 | + var list = { _idleNext: null, _idlePrev: null }; | ||
| 12 | + init(list); | ||
| 13 | + return list; | ||
| 14 | + } | ||
| 15 | + exports.create = create; | ||
| 9 | 16 | ||
| 10 | 17 | // show the most idle item | |
| 11 | 18 | function peek(list) { | |
@@ -42,10 +49,17 @@ exports.remove = remove; | |||
| 42 | 49 | ||
| 43 | 50 | // remove a item from its list and place at the end. | |
| 44 | 51 | function append(list, item) { | |
| 45 | - remove(item); | ||
| 52 | + if (item._idleNext || item._idlePrev) { | ||
| 53 | + remove(item); | ||
| 54 | + } | ||
| 55 | + | ||
| 56 | + // items are linked with _idleNext -> (older) and _idlePrev -> (newer) | ||
| 57 | + // TODO: swap the linkage to match the intuitive older items at "prev" | ||
| 46 | 58 | item._idleNext = list._idleNext; | |
| 47 | - list._idleNext._idlePrev = item; | ||
| 48 | 59 | item._idlePrev = list; | |
| 60 | + | ||
| 61 | + // the list _idleNext points to tail (newest) and _idlePrev to head (oldest) | ||
| 62 | + list._idleNext._idlePrev = item; | ||
| 49 | 63 | list._idleNext = item; | |
| 50 | 64 | } | |
| 51 | 65 | exports.append = append; | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -502,16 +502,14 @@ Timeout.prototype.close = function() { | |||
| 502 | 502 | }; | |
| 503 | 503 | ||
| 504 | 504 | ||
| 505 | - var immediateQueue = {}; | ||
| 506 | - L.init(immediateQueue); | ||
| 505 | + var immediateQueue = L.create(); | ||
| 507 | 506 | ||
| 508 | 507 | ||
| 509 | 508 | function processImmediate() { | |
| 510 | 509 | var queue = immediateQueue; | |
| 511 | 510 | var domain, immediate; | |
| 512 | 511 | ||
| 513 | - immediateQueue = {}; | ||
| 514 | - L.init(immediateQueue); | ||
| 512 | + immediateQueue = L.create(); | ||
| 515 | 513 | ||
| 516 | 514 | while (L.isEmpty(queue) === false) { | |
| 517 | 515 | immediate = L.shift(queue); | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -103,3 +103,8 @@ assert.equal(C, L.shift(list)); | |||
| 103 | 103 | // list | |
| 104 | 104 | assert.ok(L.isEmpty(list)); | |
| 105 | 105 | ||
| 106 | + var list2 = L.create(); | ||
| 107 | + var list3 = L.create(); | ||
| 108 | + assert.ok(L.isEmpty(list2)); | ||
| 109 | + assert.ok(L.isEmpty(list3)); | ||
| 110 | + assert.ok(list2 != list3); | ||
| Back | FazBrowse Home | New Git URL |
0 commit comments