001    package edu.jhu.mb.ernst.engine.queue;
002
003    import java.util.Collection;
004    import java.util.Comparator;
005    import java.util.PriorityQueue;
006
007    import org.slf4j.Logger;
008    import org.slf4j.LoggerFactory;
009
010    import edu.jhu.mb.ernst.engine.DiscreteEvent;
011    import edu.jhu.mb.ernst.engine.DiscreteEventQueue;
012
013    /***********************************************************************
014    * Default implementation of DiscreteEventQueue.
015    * 
016    * @version
017    *   $Date: 2012-04-15 13:06:25 -0500 (Sun, 15 Apr 2012) $
018    *   $Rev: 7 $
019    *   $Author: croft $
020    * @since
021    *   2012-02-19
022    * @author
023    *   David Wallace Croft
024    ***********************************************************************/
025    public final class  DefaultDiscreteEventQueueImp
026      implements DiscreteEventQueue
027    ////////////////////////////////////////////////////////////////////////
028    ////////////////////////////////////////////////////////////////////////
029    {
030    
031    private static final Class<DefaultDiscreteEventQueueImp>
032      CLASS = DefaultDiscreteEventQueueImp.class;
033
034    private static final Logger
035      LOGGER = LoggerFactory.getLogger ( CLASS );
036    
037    //
038  
039    private final PriorityQueue<DiscreteEvent>  priorityQueue;
040
041    ////////////////////////////////////////////////////////////////////////
042    ////////////////////////////////////////////////////////////////////////
043    
044    public  DefaultDiscreteEventQueueImp (
045      final Comparator<DiscreteEvent>  discreteEventComparator )
046    ////////////////////////////////////////////////////////////////////////
047    {
048      priorityQueue
049        = new PriorityQueue<DiscreteEvent> ( 1, discreteEventComparator );
050    }
051    
052    ////////////////////////////////////////////////////////////////////////
053    ////////////////////////////////////////////////////////////////////////
054
055    @Override
056    public void  add ( final DiscreteEvent...  discreteEvents )
057    ////////////////////////////////////////////////////////////////////////
058    {
059      for ( final DiscreteEvent  discreteEvent : discreteEvents )
060      {
061        priorityQueue.add ( discreteEvent );
062      }
063    }
064    
065    @Override
066    public void  addAll (
067      final Collection<DiscreteEvent>  discreteEventCollection )
068    ////////////////////////////////////////////////////////////////////////
069    {
070      LOGGER.debug (
071        "discreteEventCollection size:  {},",
072        Integer.valueOf ( discreteEventCollection.size ( ) ) );
073      
074      LOGGER.debug (
075        "priorityQueue size before addAll:  {},",
076        Integer.valueOf ( priorityQueue.size ( ) ) );
077      
078      priorityQueue.addAll ( discreteEventCollection );
079      
080      LOGGER.debug (
081        "priorityQueue size after addAll:  {},",
082        Integer.valueOf ( priorityQueue.size ( ) ) );
083    }
084    
085    @Override
086    public void  clear ( )
087    ////////////////////////////////////////////////////////////////////////
088    {
089      priorityQueue.clear ( );
090    }
091    
092    @Override
093    public boolean  offer ( DiscreteEvent  discreteEvent )
094    ////////////////////////////////////////////////////////////////////////
095    {
096      return priorityQueue.add ( discreteEvent );
097    }
098    
099    @Override
100    public DiscreteEvent  peek ( )
101    ////////////////////////////////////////////////////////////////////////
102    {
103      return priorityQueue.peek ( );
104    }
105    
106    @Override
107    public DiscreteEvent  poll ( )
108    ////////////////////////////////////////////////////////////////////////
109    {
110      return priorityQueue.poll ( );
111    }
112    
113    ////////////////////////////////////////////////////////////////////////
114    ////////////////////////////////////////////////////////////////////////
115    }