51 lines
1.0 KiB
Go
51 lines
1.0 KiB
Go
package main
|
|
|
|
import "fmt"
|
|
|
|
type LogBuffer struct {
|
|
strings []string
|
|
size int
|
|
}
|
|
|
|
func NewLogBuffer(size int) *LogBuffer {
|
|
return &LogBuffer{
|
|
strings: make([]string, 0, size),
|
|
size: size,
|
|
}
|
|
}
|
|
|
|
func (l *LogBuffer) Add(s string) {
|
|
if len(l.strings) == l.size {
|
|
l.strings = l.strings[1:]
|
|
}
|
|
l.strings = append(l.strings, s)
|
|
}
|
|
|
|
func (l *LogBuffer) Get() []string {
|
|
return l.strings
|
|
}
|
|
|
|
func (l *LogBuffer) GetLast() (string, error) {
|
|
if len(l.strings) == 0 {
|
|
return "", fmt.Errorf("log buffer is empty")
|
|
}
|
|
return l.strings[len(l.strings)-1], nil
|
|
}
|
|
|
|
func (l *LogBuffer) GetSecondToLast() (string, error) {
|
|
if len(l.strings) < 2 {
|
|
return "", fmt.Errorf("log buffer does not have enough lines")
|
|
}
|
|
return l.strings[len(l.strings)-2], nil
|
|
}
|
|
|
|
func (l *LogBuffer) GetLineStepsBack(x int) (string, error) {
|
|
if x < 0 || x >= len(l.strings) {
|
|
return "", fmt.Errorf("log buffer does not have enough lines to step back %d times", x)
|
|
}
|
|
return l.strings[len(l.strings)-1-x], nil
|
|
}
|
|
|
|
//
|
|
//var LogBuf = NewLogBuffer(10)
|