Save This Page
Home » oscache-2.4.1-full » com.opensymphony.oscache » base » algorithm » [javadoc | source]
    1   /*
    2    * Copyright (c) 2002-2003 by OpenSymphony
    3    * All rights reserved.
    4    */
    5   package com.opensymphony.oscache.base.algorithm;
    6   
    7   import java.util;
    8   
    9   /**
   10    * FIFO (First In First Out) based queue algorithm for the cache.
   11    *
   12    * No synchronization is required in this class since the
   13    * <code>AbstractConcurrentReadCache</code> already takes care of any
   14    * synchronization requirements.
   15    *
   16    * @version        $Revision: 427 $
   17    * @author        <a href="mailto:mike@atlassian.com">Mike Cannon-Brookes</a>
   18    * @author        <a href="mailto:abergevin@pyxis-tech.com">Alain Bergevin</a>
   19    * @author        <a href="&#109;a&#105;&#108;&#116;&#111;:chris&#64;swebtec.&#99;&#111;&#109;">Chris Miller</a>
   20    */
   21   public class FIFOCache extends AbstractConcurrentReadCache {
   22   
   23       private static final long serialVersionUID = -10333778645392679L;
   24   
   25       /**
   26        * A queue containing all cache keys
   27        */
   28       private Collection list = new LinkedHashSet();
   29   
   30       /**
   31        * Constructs a FIFO Cache.
   32        */
   33       public FIFOCache() {
   34           super();
   35       }
   36   
   37       /**
   38        * Constructs a FIFO Cache of the specified capacity.
   39        *
   40        * @param capacity The maximum cache capacity.
   41        */
   42       public FIFOCache(int capacity) {
   43           this();
   44           maxEntries = capacity;
   45       }
   46   
   47       /**
   48        * An object was retrieved from the cache. This implementation
   49        * does noting since this event has no impact on the FIFO algorithm.
   50        *
   51        * @param key The cache key of the item that was retrieved.
   52        */
   53       protected void itemRetrieved(Object key) {
   54       }
   55   
   56       /**
   57        * An object was put in the cache. This implementation just adds
   58        * the key to the end of the list if it doesn't exist in the list
   59        * already.
   60        *
   61        * @param key The cache key of the item that was put.
   62        */
   63       protected void itemPut(Object key) {
   64           if (!list.contains(key)) {
   65               list.add(key);
   66           }
   67       }
   68   
   69       /**
   70        * An item needs to be removed from the cache. The FIFO implementation
   71        * removes the first element in the list (ie, the item that has been in
   72        * the cache for the longest time).
   73        *
   74        * @return The key of whichever item was removed.
   75        */
   76       protected Object removeItem() {
   77           Iterator it = list.iterator();
   78           Object toRemove = it.next();
   79           it.remove();
   80   
   81           return toRemove;
   82       }
   83   
   84       /**
   85        * Remove specified key since that object has been removed from the cache.
   86        *
   87        * @param key The cache key of the item that was removed.
   88        */
   89       protected void itemRemoved(Object key) {
   90           list.remove(key);
   91       }
   92   }

Save This Page
Home » oscache-2.4.1-full » com.opensymphony.oscache » base » algorithm » [javadoc | source]