diff options
| author | Will Hawkins <[email protected]> | 2023-01-27 22:05:11 -0500 |
|---|---|---|
| committer | Will Hawkins <[email protected]> | 2023-01-27 22:05:11 -0500 |
| commit | b7bc5fa7dd75b8aa0bc3be22b1b3deab1979cd96 (patch) | |
| tree | c00fa106b373cbdfd6ba57eba4d9ccc1a87d5e79 | |
| parent | dabbcf98628d841667a0a5af6ecd5c10c7906c85 (diff) | |
[FEATURE] Make Saturating generic.
| -rw-r--r-- | saturating/saturating.go | 18 |
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 { |
