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 5620x 20x 50x 50x 50x 50x 50x 20x 20x 19967x 19967x 19122x 19967x 20x 20x 30915x 30915x 30155x 30155x 30915x 30915x 30155x 30155x 30915x 30915x 30915x 30915x 20x 20x 18441x 18441x 15019x 15019x 18441x 18441x 18441x 18441x 18441x 18441x 18441x 18441x 18441x 18441x 20x 1279x 1279x 1279x 20x 20x 20x 20x 20x 20x 20x 20x  
'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
};