mirror of
https://github.com/Monibuca/engine.git
synced 2025-10-05 16:46:58 +08:00
37 lines
575 B
Go
37 lines
575 B
Go
package common
|
|
|
|
import (
|
|
"m7s.live/engine/v4/util"
|
|
)
|
|
|
|
type RingBuffer[T any] struct {
|
|
*util.Ring[T]
|
|
Size int
|
|
MoveCount uint32
|
|
}
|
|
|
|
func (rb *RingBuffer[T]) Init(n int) *RingBuffer[T] {
|
|
if rb == nil {
|
|
rb = new(RingBuffer[T])
|
|
}
|
|
rb.Ring = util.NewRing[T](n)
|
|
rb.Size = n
|
|
return rb
|
|
}
|
|
|
|
func (rb RingBuffer[T]) SubRing(rr *util.Ring[T]) *RingBuffer[T] {
|
|
rb.Ring = rr
|
|
rb.MoveCount = 0
|
|
return &rb
|
|
}
|
|
|
|
func (rb *RingBuffer[T]) MoveNext() *T {
|
|
rb.Ring = rb.Next()
|
|
rb.MoveCount++
|
|
return &rb.Value
|
|
}
|
|
|
|
func (rb *RingBuffer[T]) PreValue() *T {
|
|
return &rb.Prev().Value
|
|
}
|