All files / lib/internal linkedlist.js

100% Statements 55/55
100% Branches 13/13
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 5627x 27x 53x 53x 53x 53x 53x 27x 27x 21054x 21054x 19302x 21054x 27x 27x 54661x 54661x 54104x 54104x 54661x 54661x 54104x 54104x 54661x 54661x 54661x 54661x 27x 27x 38308x 38308x 34531x 34531x 38308x 38308x 38308x 38308x 38308x 38308x 38308x 38308x 38308x 38308x 27x 868x 868x 868x 27x 27x 27x 27x 27x 27x 27x 27x  
'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
};