/* MonitoredPrimeTriangle.java Wrapper for PrimeTriangle that uses Monitors to gather info. Rich Acuff 28-Sep-97 */ public class MonitoredPrimeTriangle extends PrimeTriangle { IntMonitor rowCnt; DualMonitor primeCnt, rearrCnt, swapCnt; TimeMonitor rowTime, totalTime; MemMonitor mem; public MonitoredPrimeTriangle (IntMonitor r, DualMonitor p, DualMonitor re, DualMonitor sw, MemMonitor m, TimeMonitor rt, TimeMonitor tt) { super(); rowCnt = r; primeCnt = p; rearrCnt = re; swapCnt = sw; mem = m; rowTime = rt; totalTime = tt; } public int[][] triangle (int rows) throws NoSolution { int[][] res; resetMonitors(); res = super.triangle(rows); rowTime.stop(); totalTime.stop(); return res; } public int[] row(int row_number) throws NoSolution { int[] r; resetMonitors(); rowCnt.setValue(row_number); rowCnt.show(); r = super.row(row_number); rowTime.stop(); totalTime.stop(); showMonitors(); return r; } public int[] nextRow(int[] prev) throws NoSolution { int[] r; resetRowMonitors(prev.length + 1); showMonitors(); r = super.nextRow (prev); rowTime.stop(); showMonitors(); return r; } boolean rearrange(int array[], int i) { boolean res; rearrCnt.incr(); res = super.rearrange (array, i); return res; } void swap (int[] array, int i, int j) { swapCnt.incr(); super.swap (array, i, j); } boolean isPrime(int number) { primeCnt.incr(); return super.isPrime (number); } void resetMonitors () { rowCnt.setValue (0); primeCnt.reset(); rearrCnt.reset(); swapCnt.reset(); rowTime.start(); totalTime.start(); } private void resetRowMonitors (int newRow) { rowCnt.setValue (newRow); primeCnt.startSplit(); rearrCnt.startSplit(); swapCnt.startSplit(); rowTime.start(); } private void showMonitors () { rowCnt.show(); primeCnt.show (); rearrCnt.show (); swapCnt.show (); mem.show (); rowTime.show(); totalTime.show(); } }