package jp.ac.kyutech.mns.ist.util;

import java.util.LinkedList;

/**
 * 汎用キュー
 * 
 * jaist.css.atn.Node で，生徒の筆記を受け取った順番に，なめらかに表示するために使用．
 * (処理が重くなるので，DB接続で筆記を受け取るようになってから使っていない)
 * 
 * 
 * crlibxpj.CrLibRecognizer で，文字認識タスクを１つずつ処理するのに使用．
 * @author miuramo
 *
 * @param <V> キューにいれるデータ型
 */
public class MyQueue<V> {
	LinkedList<V> queue;

	public MyQueue() {
		queue = new LinkedList<V>();
	}
	
	synchronized public int size(){
		return queue.size();
	}
	synchronized public boolean hasData(V obj){
		return queue.contains(obj);
	}

	synchronized public void put(V obj) {
		queue.addFirst(obj);
		notifyAll();
	}

	synchronized public V get() {
		while (queue.size() == 0) {
			try {
				wait();
			} catch (InterruptedException iex) {
			}
		}
		V obj = queue.removeLast();
		notifyAll();
		return obj;
	}

	@SuppressWarnings("unused")
	synchronized public void removeAll() {
		boolean ismodified = queue.removeAll(queue);
		notifyAll();
	}
}
