package ca.uwaterloo.ece.qhanam.practice.lru;
import ca.uwaterloo.ece.qhanam.practice.lru.Node;
public class LRUList{
private Node mru;
private Node lru;
/* Inserts a node into the list as the MRU node. */
public void insert(Node node){
if(this.mru == null){
this.mru = node;
this.lru = node;
}
else{
node.next = mru;
mru.previous = node;
this.mru = node;
}
}
/* Removes the LRU node. */
public Node remove(){
Node removed = this.lru;
if(this.mru == this.lru){
this.mru = null;
this.lru = null;
}
else{
this.lru.previous.next = null;
this.lru = this.lru.previous;
}
return removed;
}
/* Make the given node the MRU node. */
public void access(Node node){
if(this.mru == node) { } // Do nothing
else{
if(node != lru){
node.previous.next = node.next;
node.next.previous = node.previous;
}
else{
node.previous.next = null;
this.lru = node.previous;
}
node.next = this.mru;
node.previous = null;
this.mru.previous = node;
this.mru = node;
}
}
}