LRU algorithm

by Daniel Cheung

JavaScript

let cache = [7, 2, 3, 1, 2, 5, 3, 4, 6, 7, 7, 1, 0, 5, 4, 6, 2, 3, 0, 1];
let frames = [null, null, null];
let ages = [0, 0, 0];

cache.forEach(f => {
	let i = emptyI();
  let fault = false;
  
  if (i !== null) {
  	frames[i] = f;
    ages[i] = 0;
  } else {
  	i = oldestI();
    frames[i] = f;
    ages[i] = 0;
    fault = true;
  }
  console.log(frames + fault && " Fault");
  
  ages.forEach((_, i) => ages[i]++);
});

function emptyI() {
	for (let i = 0; i < frames.length; i++) {
  	if (frames[i] === null)
    	return i;
  }
  return null;
}

function oldestI() {
	let iMax = -1;
  let ageMax = -1;
  ages.forEach((age, i) => {
  	if (age > ageMax) {
    	ageMax = age;
      iMax = i;
    }
  });
  return iMax;
}