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 5625x 25x 50x 50x 50x 50x 50x 25x 25x 21758x 21758x 20149x 21758x 25x 25x 32896x 32896x 32142x 32142x 32896x 32896x 32142x 32142x 32896x 32896x 32896x 32896x 25x 25x 19990x 19990x 15673x 15673x 19990x 19990x 19990x 19990x 19990x 19990x 19990x 19990x 19990x 19990x 25x 1278x 1278x 1278x 25x 25x 25x 25x 25x 25x 25x 25x  
'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
};