From b7bc5fa7dd75b8aa0bc3be22b1b3deab1979cd96 Mon Sep 17 00:00:00 2001 From: Will Hawkins Date: Fri, 27 Jan 2023 22:05:11 -0500 Subject: [FEATURE] Make Saturating generic. --- saturating/saturating.go | 18 +++++++++++------- 1 file 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 { -- cgit v1.2.3