//package Sorter; /** * @author D. X. Nguyen * @author S. B. Wong */ import java.awt.Color; public class GraphicSorter extends ACompareSorter { public final static int NapDuration = 1000; private ACompareSorter _aCSorter; // "DECOREE" public GraphicSorter (ACompareSorter aCSorter) { _aCSorter = aCSorter; } protected int split (IOrdered[] A, int lo, int hi) { System.out.println ("Sort from " + lo + " to " + hi); int s = _aCSorter.split (A,lo, hi); // delegates to decoree // s > lo SorterColor color = (SorterColor) ((IColored)A[s]).getColor (); Color splitColor = color.getLoSplit (); for (int i = lo; i < s; i++) { ((IColored) A[i]).setColor (splitColor); } splitColor = color.getHiSplit (); for(int i=s;i<=hi;i++) { ((IColored) A[i]).setColor (splitColor); } try { System.out.println ("Split at " + s); Thread.sleep (NapDuration); } catch (Exception e){} return s; } protected void join (IOrdered[] A, int lo, int s, int hi) { // lo < hi _aCSorter.join(A,lo,s,hi); // delegates to decoree SorterColor loColor = (SorterColor)(((IColored) A[lo]).getColor ()); SorterColor hiColor = (SorterColor)(((IColored) A[hi]).getColor ()); SorterColor color = loColor.join(hiColor); for(int i=lo;i<=hi;i++) { ((IColored) A[i]).setColor (color); } try { System.out.println ("Join at " + s); Thread.sleep (NapDuration); System.out.println ("Done sorting from " + lo + " to " + hi); } catch(Exception e){} } }