001 /* 002 * Copyright (c) Holger Pfaff - http://pfaff.ws 003 * 004 * This software maybe used for any purpose provided the 005 * above copyright notice is retained. It is supplied as is. 006 * No warranty expressed or implied - Use at your own risk. 007 */ 008 009 import java.util.Vector; 010 011 /** 012 * (#)Fifo.java 013 * @author Holger Pfaff 014 * @version 3.2 19-Mar-2004<br><br> 015 * 016 * Implements a fifo (first in - first out queue) with 017 * an option to limit the number of entries, If the fifo 018 * already contains <code>maxentries</code>, the oldest entry will be 019 * discarded on addition of any new entry. If <code>unique</code> is 020 * specified to be <code>true</code> entries already contained will not 021 * be added to this fifo. 022 */ 023 024 public class Fifo extends Vector { 025 026 /** 027 * Maximal number of entries. 0 for unlimited 028 */ 029 protected int maxentries = 0; 030 031 /** 032 * Force entries to be unique ? 033 */ 034 protected boolean unique = false; 035 036 /** 037 * Constructs an unlimited <code>Fifo</code> with duplicate 038 * entries allowed. 039 */ 040 public Fifo() { 041 } 042 043 /** 044 * Constructs a <code>Fifo</code> limited to <code>maxentries</code>. 045 * Duplicate entries allowed. 046 * 047 * @param maxentries maximal number if entries. 048 */ 049 public Fifo(int maxentries) { 050 super(maxentries); 051 this.maxentries = maxentries; 052 } 053 054 /** 055 * Constructs an unlimited <code>Fifo</code> with duplicate 056 * entries allowed or not allowed depending on <code>unique</code>. 057 * 058 * @param unique force unique entries ? 059 */ 060 public Fifo(boolean unique) { 061 this.unique = unique; 062 } 063 064 /** 065 * Constructs a <code>Fifo</code>. 066 * 067 * @param maxentries maximal number if entries. 068 * @param unique force unique entries ? 069 */ 070 public Fifo(int maxentries, boolean unique) { 071 super(maxentries); 072 this.maxentries = maxentries; 073 this.unique = unique; 074 } 075 076 /** 077 * add an object to this fifo 078 * 079 * @param obj object to add. 080 */ 081 public void in(Object obj) { 082 if(maxentries == size() && maxentries > 0) { 083 removeElementAt(0); 084 } 085 if(unique == false || contains(obj) == false) { 086 super.addElement(obj); 087 } 088 } 089 090 /** 091 * remove an object from this fifo 092 */ 093 public Object out() { 094 if(size() > 0) { 095 Object obj = elementAt(0); 096 removeElementAt(0); 097 return obj; 098 } else { 099 return null; 100 } 101 } 102 }