| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- package metrics
- import "sync/atomic"
- // Counters hold an int64 value that can be incremented and decremented.
- type Counter interface {
- Clear()
- Count() int64
- Dec(int64)
- Inc(int64)
- Snapshot() Counter
- }
- // NewCounter constructs a new StandardCounter.
- func NewCounter() Counter {
- return &StandardCounter{0}
- }
- // CounterSnapshot is a read-only copy of another Counter.
- type CounterSnapshot int64
- // Clear panics.
- func (CounterSnapshot) Clear() {
- panic("Clear called on a CounterSnapshot")
- }
- // Count returns the count at the time the snapshot was taken.
- func (c CounterSnapshot) Count() int64 { return int64(c) }
- // Dec panics.
- func (CounterSnapshot) Dec(int64) {
- panic("Dec called on a CounterSnapshot")
- }
- // Inc panics.
- func (CounterSnapshot) Inc(int64) {
- panic("Inc called on a CounterSnapshot")
- }
- // Snapshot returns the snapshot.
- func (c CounterSnapshot) Snapshot() Counter { return c }
- // StandardCounter is the standard implementation of a Counter and uses the
- // sync/atomic package to manage a single int64 value.
- type StandardCounter struct {
- count int64
- }
- // Clear sets the counter to zero.
- func (c *StandardCounter) Clear() {
- atomic.StoreInt64(&c.count, 0)
- }
- // Count returns the current count.
- func (c *StandardCounter) Count() int64 {
- return atomic.LoadInt64(&c.count)
- }
- // Dec decrements the counter by the given amount.
- func (c *StandardCounter) Dec(i int64) {
- atomic.AddInt64(&c.count, -i)
- }
- // Inc increments the counter by the given amount.
- func (c *StandardCounter) Inc(i int64) {
- atomic.AddInt64(&c.count, i)
- }
- // Snapshot returns a read-only copy of the counter.
- func (c *StandardCounter) Snapshot() Counter {
- return CounterSnapshot(c.Count())
- }
|