From 328dbc644e59338b28d21936f76bff7c7dc95a8c Mon Sep 17 00:00:00 2001 From: "Alexander \"Arav\" Andreev" Date: Sat, 30 Sep 2023 23:57:31 +0400 Subject: [PATCH] A struct to hold a number of current and peak listeners was added. --- internal/radio/listeners.go | 50 +++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 internal/radio/listeners.go diff --git a/internal/radio/listeners.go b/internal/radio/listeners.go new file mode 100644 index 0000000..a7bfc3d --- /dev/null +++ b/internal/radio/listeners.go @@ -0,0 +1,50 @@ +package radio + +import ( + "errors" + "fmt" + "math" +) + +// Listeners stores the current and peak numbers of listeners. +type Listeners struct { + current, peak int +} + +// NewListeners returns a new Listeners struct instance. +func NewListeners() *Listeners { + return &Listeners{} +} + +// Current returns a number of current listeners. +func (l *Listeners) Current() int { + return l.current +} + +// Current returns a number of peak listeners. +func (l *Listeners) Peak() int { + return l.peak +} + +// Inc increments by 1 a current number of listeners and updates a peak number. +func (l *Listeners) Inc() int { + if l.current == math.MaxInt { + // We panic here because if this will ever happen, then something's going certainly wrong. + panic(fmt.Sprint("a current number of listeners exceeded MaxInt which is", math.MaxInt)) + } + l.current++ + if l.current > l.peak { + l.peak = l.current + } + return l.current +} + +// Dec decrements by 1 a current number of listeners. An error will occur if +// a resulting number is less than 0. +func (l *Listeners) Dec() (int, error) { + if l.current == 0 { + return l.current, errors.New("an attempt to decrement a number of current listeners down to less than 0") + } + l.current-- + return l.current, nil +}