/* ERQueue.java - Camille Troillard - tuscland@mac.com */ package er.javamail; import java.util.Vector; public class ERQueue<T> extends Vector<T> { /** * Do I need to update serialVersionUID? * See section 5.6 <cite>Type Changes Affecting Serialization</cite> on page 51 of the * <a href="http://java.sun.com/j2se/1.4/pdf/serial-spec.pdf">Java Object Serialization Spec</a> */ private static final long serialVersionUID = 1L; protected int _maxSize = 0; /** * <span class="ja"> * キューの最大サイズを戻します。 * * @return キューの最大サイズ * </span> */ public int maxSize() { return _maxSize; } /** * <span class="ja"> * キューの最大サイズをセットします * * @param size - キューの最大サイズ * </span> */ public void setMaxSize(int size) { _maxSize = size; } public static class SizeOverflowException extends Exception { /** * Do I need to update serialVersionUID? * See section 5.6 <cite>Type Changes Affecting Serialization</cite> on page 51 of the * <a href="http://java.sun.com/j2se/1.4/pdf/serial-spec.pdf">Java Object Serialization Spec</a> */ private static final long serialVersionUID = 1L; public SizeOverflowException() { super(); } } public ERQueue() { this(0); } public ERQueue(int maxSize) { super(); _maxSize = maxSize; } /** * <span class="ja"> * 新しいアイテムをキューに登録します。 * * @param item - アイテム * * @return 登録されたアイテム * * @throws SizeOverflowException * </span> */ public T push(T item) throws SizeOverflowException { if ((_maxSize == 0) || (size() < _maxSize)) { addElement(item); } else { throw new SizeOverflowException(); } return item; } /** * <span class="ja"> * 一番最初にキューに入ったアイテムをポップし、戻します。 * * @return 一番最初にキューに入ったアイテム * </span> */ public synchronized T pop() { T element = elementAt(0); removeElementAt(0); return element; } /** * <span class="ja"> * 一番最初にキューに入ったアイテムを消さすに戻します。 * * @return 一番最初にキューに入ったアイテム * </span> */ public synchronized T peek() { return elementAt(0); } /** * <span class="ja"> * キューサイズが 0 の場合 * * @return キューのサイズが 0 の場合には true が戻ります。 * </span> */ public boolean empty() { return size() == 0; } /** * <span class="ja"> * キュー内のオブジェクトを探して、インデックスを戻します。 * * @param o - 検索するオブジェクト * * @return インデックス番号 * </span> */ public synchronized int search(Object o) { return indexOf(o); } }