mirror of
https://github.com/fleetdm/fleet
synced 2026-05-19 15:09:20 +00:00
39 lines
702 B
Go
39 lines
702 B
Go
//go:build darwin
|
|
|
|
// ringBuffer is a fixed-size circular buffer for log entries.
|
|
package santa
|
|
|
|
type ringBuffer struct {
|
|
buf []logEntry
|
|
start int
|
|
size int
|
|
}
|
|
|
|
func newRingBuffer(n int) *ringBuffer {
|
|
return &ringBuffer{buf: make([]logEntry, n)}
|
|
}
|
|
|
|
func (r *ringBuffer) Add(e logEntry) {
|
|
if len(r.buf) == 0 {
|
|
return
|
|
}
|
|
if r.size < len(r.buf) {
|
|
r.buf[(r.start+r.size)%len(r.buf)] = e
|
|
r.size++
|
|
} else {
|
|
r.buf[r.start] = e
|
|
r.start = (r.start + 1) % len(r.buf)
|
|
}
|
|
}
|
|
|
|
func (r *ringBuffer) Len() int {
|
|
return r.size
|
|
}
|
|
|
|
func (r *ringBuffer) SliceChrono() []logEntry {
|
|
out := make([]logEntry, r.size)
|
|
for i := 0; i < r.size; i++ {
|
|
out[i] = r.buf[(r.start+i)%len(r.buf)]
|
|
}
|
|
return out
|
|
}
|