1 package org.djutils.stats.summarizers;
2
3 import org.djutils.exceptions.Throw;
4
5
6
7
8
9
10
11
12
13
14
15
16 public class Counter implements Statistic
17 {
18
19 private static final long serialVersionUID = 20200228L;
20
21
22 private long count = 0;
23
24
25 private long n = 0;
26
27
28 private String description;
29
30
31 private Object semaphore = new Object();
32
33
34
35
36
37 public Counter(final String description)
38 {
39 Throw.whenNull(description, "description cannot be null");
40 this.description = description;
41 initialize();
42 }
43
44
45
46
47
48 public long getCount()
49 {
50 return this.count;
51 }
52
53 @Override
54 public long getN()
55 {
56 return this.n;
57 }
58
59
60
61
62
63
64 public long register(final long value)
65 {
66 synchronized (this.semaphore)
67 {
68 this.count += value;
69 this.n++;
70 }
71 return value;
72 }
73
74
75
76
77 @Override
78 public void initialize()
79 {
80 synchronized (this.semaphore)
81 {
82 this.n = 0;
83 this.count = 0;
84 }
85 }
86
87 @Override
88 public String getDescription()
89 {
90 return this.description;
91 }
92
93
94
95
96
97 public static String reportHeader()
98 {
99 return "-".repeat(72) + String.format("%n| %-48.48s | %6.6s | %8.8s |%n", "Counter name", "n", "count")
100 + "-".repeat(72);
101 }
102
103 @Override
104 public String reportLine()
105 {
106 return String.format("| %-48.48s | %6d | %8d |", getDescription(), getN(), getCount());
107 }
108
109
110
111
112
113 public static String reportFooter()
114 {
115 return "-".repeat(72);
116 }
117
118 @Override
119 public String toString()
120 {
121 return "Counter [description=" + this.description + ", n=" + this.n + ", count=" + this.count + "]";
122 }
123
124 }