reverse scan log

This commit is contained in:
ston1th 2019-08-26 21:08:06 +02:00
commit f964542c49

View file

@ -3,6 +3,7 @@ package log
import (
"fmt"
"git.giftfish.de/ston1th/docstore/pkg/core"
"strings"
"sync"
)
@ -39,9 +40,31 @@ func (l *ScanLog) Printf(f string, v ...interface{}) {
func (l *ScanLog) Logs() (logs string) {
l.RLock()
for i := len(l.logs) - 1; i >= 0; i-- {
logs += "\n" + l.logs[i]
}
logs = reverseJoin(l.logs, "\n")
l.RUnlock()
return
}
// reverseJoin is a reverse version of strings.Join
// code taken from strings.Join
func reverseJoin(a []string, sep string) string {
switch len(a) {
case 0:
return ""
case 1:
return a[0]
}
n := len(sep) * (len(a) - 1)
for i := 0; i < len(a); i++ {
n += len(a[i])
}
var b strings.Builder
b.Grow(n)
b.WriteString(a[len(a)-1])
for i := len(a) - 2; i >= 0; i-- {
b.WriteString(sep)
b.WriteString(a[i])
}
return b.String()
}