From ac9d274fbf91787b77d56b4acc6bfb1995ebb445 Mon Sep 17 00:00:00 2001 From: Maksim Karelov Date: Fri, 27 Sep 2024 16:12:23 +0700 Subject: [PATCH] Optimize decode --- internal/resolvers/snap/Decode.go | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/internal/resolvers/snap/Decode.go b/internal/resolvers/snap/Decode.go index 54084eb..eae1ed9 100644 --- a/internal/resolvers/snap/Decode.go +++ b/internal/resolvers/snap/Decode.go @@ -1,7 +1,6 @@ package snap import ( - "fmt" "strconv" "strings" "unicode" @@ -9,20 +8,24 @@ import ( func Decode(h string, _ int, n string, t uint64, e int, _ int) (string, error) { var result strings.Builder - var replaces []string + result.Grow(len(h)) + replaces := make([]string, 0, len(n)*2) + for j := 0; j < len(n); j++ { + replaces = append(replaces, string(n[j]), strconv.Itoa(j)) + } + replacer := strings.NewReplacer(replaces...) + + var sb strings.Builder for i := 0; i < len(h); i++ { - s := "" + sb.Reset() + for i < len(h) && h[i] != n[e] { - s += string(h[i]) + sb.WriteByte(h[i]) i++ } - replaces = []string{} - for j := 0; j < len(n); j++ { - replaces = append(replaces, string(n[j]), fmt.Sprint(j)) - } - s = strings.NewReplacer(replaces...).Replace(s) + s := replacer.Replace(sb.String()) if !unicode.IsDigit(rune(s[0])) { result.WriteString(s)