Files
kopia/internal/stats/countsum.go
Jarek Kowalski 65f295ed79 refactor(repository): replaced atomic values with Go 1.19 atomic wrappers (#2590)
Almost all were easy to replace, except ones exposed via JSON which
have been left as-is.

The linter has a cool behavior where it flags attempts to pass
`atomic.Int32` for example by value , which is always a mistake,
say as an argument to `fmt.Sprintf()`
2022-11-19 18:39:04 +00:00

23 lines
653 B
Go

// Package stats provides helpers for simple stats
package stats
import "sync/atomic"
// CountSum holds sum and count values.
type CountSum struct {
sum atomic.Int64
count atomic.Uint32
}
// Add adds size to s and returns approximate values for the current count
// and total bytes.
func (s *CountSum) Add(size int64) (count uint32, sum int64) {
return s.count.Add(1), s.sum.Add(size)
}
// Approximate returns an approximation of the current count and sum values.
// It is approximate because retrieving both values is not an atomic operation.
func (s *CountSum) Approximate() (count uint32, sum int64) {
return s.count.Load(), s.sum.Load()
}