Timer.java 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package util;
  2. import java.util.Stack;
  3. import exceptions.TimerException;
  4. public class Timer {
  5. StopWatch[][] watches;
  6. Stack<StopWatch> stack;
  7. public Timer() {
  8. watches = new StopWatch[P.size][M.size];
  9. for (int i = 0; i < P.size; i++)
  10. for (int j = 0; j < M.size; j++)
  11. watches[i][j] = new StopWatch(P.names[i] + "_" + M.names[j]);
  12. stack = new Stack<StopWatch>();
  13. }
  14. public Timer(StopWatch[][] sws) {
  15. watches = sws;
  16. stack = new Stack<StopWatch>();
  17. }
  18. public void start(int p, int m) {
  19. if (!stack.empty()) {
  20. if (stack.peek() == watches[p][m])
  21. throw new TimerException("Stopwatch already added to stack");
  22. stack.peek().stop();
  23. }
  24. stack.push(watches[p][m]).start();
  25. }
  26. public void stop(int p, int m) {
  27. if (stack.empty())
  28. throw new TimerException("No stopwatch found");
  29. stack.pop().stop();
  30. if (!stack.empty())
  31. stack.peek().start();
  32. }
  33. public void reset() {
  34. if (!stack.empty())
  35. throw new TimerException("Stack not empty");
  36. for (int i = 0; i < watches.length; i++)
  37. for (int j = 0; j < watches[i].length; j++)
  38. watches[i][j].reset();
  39. }
  40. public void print() {
  41. if (!stack.empty())
  42. throw new TimerException("Stack not empty");
  43. for (int i = 0; i < watches.length; i++)
  44. for (int j = 0; j < watches[i].length; j++)
  45. System.out.println(watches[i][j].toMS());
  46. }
  47. public void noPrePrint() {
  48. if (!stack.empty())
  49. throw new TimerException("Stack not empty");
  50. for (int i = 0; i < watches.length; i++)
  51. for (int j = 0; j < watches[i].length; j++)
  52. System.out.println(watches[i][j].noPreToMS());
  53. }
  54. public Timer divideBy(int n) {
  55. if (!stack.empty())
  56. throw new TimerException("Stack not empty");
  57. StopWatch[][] sws = new StopWatch[P.size][M.size];
  58. for (int i = 0; i < watches.length; i++)
  59. for (int j = 0; j < watches[i].length; j++)
  60. sws[i][j] = watches[i][j].divideBy(n);
  61. return new Timer(sws);
  62. }
  63. public Timer add(Timer t) {
  64. if (!stack.empty() || !t.stack.empty())
  65. throw new TimerException("Stack not empty");
  66. StopWatch[][] sws = new StopWatch[P.size][M.size];
  67. for (int i = 0; i < watches.length; i++)
  68. for (int j = 0; j < watches[i].length; j++)
  69. sws[i][j] = watches[i][j].add(t.watches[i][j]);
  70. return new Timer(sws);
  71. }
  72. }