File tree Expand file tree Collapse file tree 3 files changed +23
-6
lines changed Expand file tree Collapse file tree 3 files changed +23
-6
lines 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 ) ;
You can’t perform that action at this time.
0 commit comments