All files / lib/internal linkedlist.js

100% Statements 55/55
100% Branches 12/12
100% Functions 5/5
100% Lines 55/55

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 5622x 22x 49x 49x 49x 49x 49x 22x 22x 19272x 19272x 18421x 19272x 22x 22x 30552x 30552x 29793x 29793x 30552x 30552x 29793x 29793x 30552x 30552x 30552x 30552x 22x 22x 18077x 18077x 15007x 15007x 18077x 18077x 18077x 18077x 18077x 18077x 18077x 18077x 18077x 18077x 22x 1277x 1277x 1277x 22x 22x 22x 22x 22x 22x 22x 22x  
'use strict';
 
function init(list) {
  list._idleNext = list;
  list._idlePrev = list;
  return list;
}
 
// Show the most idle item.
function peek(list) {
  if (list._idlePrev === list) return null;
  return list._idlePrev;
}
 
// Remove an item from its list.
function remove(item) {
  if (item._idleNext) {
    item._idleNext._idlePrev = item._idlePrev;
  }
 
  if (item._idlePrev) {
    item._idlePrev._idleNext = item._idleNext;
  }
 
  item._idleNext = null;
  item._idlePrev = null;
}
 
// Remove an item from its list and place at the end.
function append(list, item) {
  if (item._idleNext || item._idlePrev) {
    remove(item);
  }
 
  // Items are linked  with _idleNext -> (older) and _idlePrev -> (newer).
  // Note: This linkage (next being older) may seem counter-intuitive at first.
  item._idleNext = list._idleNext;
  item._idlePrev = list;
 
  // The list _idleNext points to tail (newest) and _idlePrev to head (oldest).
  list._idleNext._idlePrev = item;
  list._idleNext = item;
}
 
function isEmpty(list) {
  return list._idleNext === list;
}
 
module.exports = {
  init,
  peek,
  remove,
  append,
  isEmpty
};