All files / lib/internal linkedlist.js

100% Statements 54/54
100% Branches 13/13
100% Functions 5/5
100% Lines 54/54

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 5518x 18x 13x 13x 13x 13x 18x 18x 15361x 15361x 14512x 15361x 18x 18x 27578x 27578x 26827x 26827x 27578x 27578x 26827x 26827x 27578x 27578x 27578x 27578x 18x 18x 16014x 16014x 14186x 14186x 16014x 16014x 16014x 16014x 16014x 16014x 16014x 16014x 16014x 16014x 18x 1244x 1244x 1244x 18x 18x 18x 18x 18x 18x 18x 18x  
'use strict';
 
function init(list) {
  list._idleNext = list;
  list._idlePrev = 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
};