From f964542c49cbbebb00ed7383cfc7f2aa85094d73 Mon Sep 17 00:00:00 2001 From: ston1th Date: Mon, 26 Aug 2019 21:08:06 +0200 Subject: [PATCH] reverse scan log --- pkg/log/scanlog.go | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/pkg/log/scanlog.go b/pkg/log/scanlog.go index 59ba625..af424ed 100644 --- a/pkg/log/scanlog.go +++ b/pkg/log/scanlog.go @@ -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() +}