Source of Sorter.java


  1: import java.util.*;
  2: import java.util.concurrent.*;

  4: /**
  5:    This runnable executes a sort algorithm.
  6:    When two elements are compared, the algorithm
  7:    pauses and updates a panel.
  8: */
  9: public class Sorter implements Runnable
 10: {
 11:    public Sorter(Double[] values, ArrayComponent panel, BlockingQueue<String> queue)
 12:    {
 13:       this.values = values;
 14:       this.panel = panel;
 15:       this.queue = queue;
 16:    }

 18:    public void run()
 19:    {
 20:       Comparator<Double> comp = new
 21:          Comparator<Double>()
 22:          {
 23:             public int compare(Double d1, Double d2)
 24:             {
 25:                try
 26:                {
 27:                   String command = queue.take();
 28:                   if (command.equals("Run"))
 29:                   {
 30:                      Thread.sleep(DELAY);
 31:                      if (!"Step".equals(queue.peek()))
 32:                         queue.add("Run");
 33:                   }
 34:                }
 35:                catch (InterruptedException exception)
 36:                {
 37:                   Thread.currentThread().interrupt();
 38:                }
 39:                panel.setValues(values, d1, d2);
 40:                return d1.compareTo(d2);
 41:             }
 42:          };
 43:       MergeSorter.sort(values, comp);
 44:       panel.setValues(values, null, null);
 45:    }

 47:    private Double[] values;
 48:    private ArrayComponent panel;
 49:    private BlockingQueue<String> queue;
 50:    private static final int DELAY = 100;
 51: }