From 0f7d6b5bc4b763b48feb0a13ce6465956366d311 Mon Sep 17 00:00:00 2001 From: Deluan Date: Thu, 6 Jun 2024 07:09:30 -0400 Subject: [PATCH] More micro-optimizations --- utils/index_group_parser.go | 7 ++----- utils/merge/merge_fs.go | 18 +++++++----------- utils/str/str.go | 19 ++++++++++--------- 3 files changed, 19 insertions(+), 25 deletions(-) diff --git a/utils/index_group_parser.go b/utils/index_group_parser.go index 71406233..5622164c 100644 --- a/utils/index_group_parser.go +++ b/utils/index_group_parser.go @@ -27,11 +27,8 @@ func ParseIndexGroups(spec string) IndexGroups { for _, g := range split { sub := indexGroupsRx.FindStringSubmatch(g) if len(sub) > 0 { - i := 0 - chars := strings.Split(sub[2], "") - for _, c := range chars { - parsed[c] = sub[1] - i++ + for _, c := range sub[2] { + parsed[string(c)] = sub[1] } } else { parsed[g] = g diff --git a/utils/merge/merge_fs.go b/utils/merge/merge_fs.go index e7d6c596..cbb56870 100644 --- a/utils/merge/merge_fs.go +++ b/utils/merge/merge_fs.go @@ -1,10 +1,13 @@ package merge import ( + "cmp" "errors" "io" "io/fs" - "sort" + "slices" + + "golang.org/x/exp/maps" ) // FS implements a simple merged fs.FS, that can combine a Base FS with an Overlay FS. The semantics are: @@ -44,33 +47,26 @@ func (m FS) Open(name string) (fs.File, error) { } func (m FS) mergeDirs(name string, info fs.FileInfo, baseDir fs.ReadDirFile, overlayDir fs.ReadDirFile) (fs.File, error) { - merged := map[string]fs.DirEntry{} - baseFiles, err := baseDir.ReadDir(-1) if err != nil { return nil, err } - sort.Slice(baseFiles, func(i, j int) bool { return baseFiles[i].Name() < baseFiles[j].Name() }) overlayFiles, err := overlayDir.ReadDir(-1) if err != nil { overlayFiles = nil } - sort.Slice(overlayFiles, func(i, j int) bool { return overlayFiles[i].Name() < overlayFiles[j].Name() }) + merged := map[string]fs.DirEntry{} for _, f := range baseFiles { merged[f.Name()] = f } for _, f := range overlayFiles { merged[f.Name()] = f } + entries := maps.Values(merged) - var entries []fs.DirEntry - for _, i := range merged { - entries = append(entries, i) - } - - sort.Slice(entries, func(i, j int) bool { return entries[i].Name() < entries[j].Name() }) + slices.SortFunc(entries, func(i, j fs.DirEntry) int { return cmp.Compare(i.Name(), j.Name()) }) return &mergedDir{ name: name, info: info, diff --git a/utils/str/str.go b/utils/str/str.go index 3c40c927..dc357f59 100644 --- a/utils/str/str.go +++ b/utils/str/str.go @@ -4,16 +4,17 @@ import ( "strings" ) +var utf8ToAscii = strings.NewReplacer( + "–", "-", + "‐", "-", + "“", `"`, + "”", `"`, + "‘", `'`, + "’", `'`, +) + func Clear(name string) string { - r := strings.NewReplacer( - "–", "-", - "‐", "-", - "“", `"`, - "”", `"`, - "‘", `'`, - "’", `'`, - ) - return r.Replace(name) + return utf8ToAscii.Replace(name) } func LongestCommonPrefix(list []string) string {