summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWill Hawkins <[email protected]>2023-01-27 22:05:11 -0500
committerWill Hawkins <[email protected]>2023-01-27 22:05:11 -0500
commitb7bc5fa7dd75b8aa0bc3be22b1b3deab1979cd96 (patch)
treec00fa106b373cbdfd6ba57eba4d9ccc1a87d5e79
parentdabbcf98628d841667a0a5af6ecd5c10c7906c85 (diff)
[FEATURE] Make Saturating generic.
-rw-r--r--saturating/saturating.go18
1 files changed, 11 insertions, 7 deletions
diff --git a/saturating/saturating.go b/saturating/saturating.go
index cabf9af..273406b 100644
--- a/saturating/saturating.go
+++ b/saturating/saturating.go
@@ -14,24 +14,28 @@
package saturating
-type SaturatingInt struct {
- max int
- value int
+type Saturatable interface {
+ ~uint | ~uint32 | ~uint64
+}
+
+type Saturating[T Saturatable] struct {
+ max T
+ value T
saturated bool
}
-func NewSaturatingInt(max int) *SaturatingInt {
- return &SaturatingInt{max: max, value: 0, saturated: false}
+func NewSaturating[T Saturatable](max T) *Saturating[T] {
+ return &Saturating[T]{max: max, value: 0, saturated: false}
}
-func (s *SaturatingInt) Value() int {
+func (s *Saturating[T]) Value() T {
if s.saturated {
return s.max
}
return s.value
}
-func (s *SaturatingInt) Add(operand int) {
+func (s *Saturating[T]) Add(operand T) {
if !s.saturated {
s.value += operand
if s.value >= s.max {