/* Learning Net - shlomy boshy 031868912
 * Reinforcement Learning network simulation  
 */
package learnnet;

import java.util.Vector;

public class FIFOQueue extends Vector implements Queue {
	/* FIFO message queue (unbounded size) */
		
	public synchronized boolean putMessage(Message M) {
		/* unbounded queue -> always returns true */
	   addElement(M);	/* adds at end */
     return true;	   
	}
	
	public synchronized Message getMessage(){
	   /* get message by queue policy (FIFO,
	    * priority, etc. ). returns NULL if queue empty.
	    */
     Message M; 
      
	   try {
	   	      M = (Message)firstElement();
            removeElement(M); 
            return M; 
	   	   }
	   catch (java.util.NoSuchElementException e){
	   	    	return null;
	   	   }  
	 }    	
   
   public synchronized int numItems(){
     return size();     
   }

   public static void main(String args[]) {
     /** driver to check FIFOQueue */

    FIFOQueue FQ=new FIFOQueue();
    Message M;
    
    Network.debugPrint("Num=" + FQ.numItems());
    M = new Message(null,new String("1st"));
    FQ.putMessage(M);
    M = new Message(null,new String("2nd"));
    FQ.putMessage(M);
    Network.debugPrint("queue=" + FQ);
    M = new Message(null,new String("3rd"));
    FQ.putMessage(M);
    Network.debugPrint("Ext=" + (String)(FQ.getMessage().Data));
    Network.debugPrint("Num=" + FQ.numItems());
    Network.debugPrint("Ext=" + (String)(FQ.getMessage().Data));
    Network.debugPrint("Num=" + FQ.numItems());
    Network.debugPrint("Ext=" + (String)(FQ.getMessage().Data));
    Network.debugPrint("Num=" + FQ.numItems());
    Network.debugPrint("Ext=" + FQ.getMessage());     	    		
   }       
}