diff options
Diffstat (limited to 'saturating/saturating.go')
| -rw-r--r-- | saturating/saturating.go | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/saturating/saturating.go b/saturating/saturating.go new file mode 100644 index 0000000..10a0c87 --- /dev/null +++ b/saturating/saturating.go @@ -0,0 +1,27 @@ +package saturating + +type SaturatingInt struct { + max int + value int + saturated bool +} + +func NewSaturatingInt(max int) *SaturatingInt { + return &SaturatingInt{max: max, value: 0, saturated: false} +} + +func (s *SaturatingInt) Value() int { + if s.saturated { + return s.max + } + return s.value +} + +func (s *SaturatingInt) Add(operand int) { + if !s.saturated { + s.value += operand + if s.value >= s.max { + s.saturated = true + } + } +} |
