Listing 4: On every access, the LRU algorithm ages each page except for the ``hit'' page, which is made the youngest. UpdateCache then knows which page is oldest if a page must be evicted

void CPageCache :: AgeCache(int iHit)
{
  for (int i = 0; i < CACHE_SIZE; i++)
    if (m_iCachedPages[i][PT_IDX] == iHit).
      // make younger
      m_iCachedPages[i][AGE] = 0;
    else
      m_iCachedPages[i][AGE]++;
}

void CPageCache :: UpdateCache(int iNewPageIdx)
{
  int iOld = 0;

  for (int i = 0; i < CACHE_SIZE; i++)
  {
    // if there's room in cache,grab first space
    if (m_iCachedPages[i][PT_IDX] < 0)
    {
      iOld = i;
      break;
    }
    // search for oldest page
    if (m_iCachedPages[i][AGE] > m_iCachedPages[iOld][AGE])
      iOld = i;
  }

  if (m_iCachedPages[iOld][PT_IDX] >= 0)
    PageOut(m_iCachedPages[iOld][PT_IDX]);  

  m_iCachedPages[iOld][PT_IDX] = iNewPageIdx;
  m_iCachedPages[iOld][AGE]  = 0;
}
//End of File