Skip to content

Commit 77bef2d

Browse files
committed
feat(util/compareNumInFilename): compare filename in ascii case-insensitive mode
1 parent d9eb391 commit 77bef2d

File tree

2 files changed

+44
-6
lines changed

2 files changed

+44
-6
lines changed

src/util/compareNumInFilename.go

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,42 @@ func extractPrefixDigits(input []byte) []byte {
3535
return buf[:prefixLen]
3636
}
3737

38+
func compareIgnoreAsciiCase(prev, next []byte) (less, ok bool) {
39+
prevLen := len(prev)
40+
nextLen := len(next)
41+
42+
maxLen := prevLen
43+
if nextLen < maxLen {
44+
maxLen = nextLen
45+
}
46+
47+
for i := 0; i < maxLen; i++ {
48+
prevByte := prev[i]
49+
prevChar := prevByte
50+
if prevChar >= 'A' && prevChar <= 'Z' {
51+
prevChar += 'a' - 'A'
52+
}
53+
54+
nextByte := next[i]
55+
nextChar := nextByte
56+
if nextChar >= 'A' && nextChar <= 'Z' {
57+
nextChar += 'a' - 'A'
58+
}
59+
60+
if prevChar != nextChar {
61+
return prevChar < nextChar, true
62+
} else if prevByte != nextByte {
63+
return prevByte < nextByte, true
64+
}
65+
}
66+
67+
if prevLen != nextLen {
68+
return prevLen < nextLen, true
69+
}
70+
71+
return
72+
}
73+
3874
func CompareNumInFilename(prev, next []byte) (less, ok bool) {
3975
if len(prev) == 0 && len(next) == 0 {
4076
return false, false
@@ -72,12 +108,7 @@ func CompareNumInFilename(prev, next []byte) (less, ok bool) {
72108
case next[0] == '.' && prev[0] != '.':
73109
return false, true
74110
default:
75-
byteCmpResult := bytes.Compare(prev, next)
76-
if byteCmpResult != 0 {
77-
return byteCmpResult < 0, true
78-
} else {
79-
return false, false
80-
}
111+
return compareIgnoreAsciiCase(prev, next)
81112
}
82113
}
83114

src/util/compareNumInFilename_test.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,13 @@ func TestCompareNumInFilename(t *testing.T) {
5454
if !less {
5555
t.Error(prev, next)
5656
}
57+
58+
prev = "a1.txt"
59+
next = "B1.txt"
60+
less, _ = CompareNumInFilename([]byte(prev), []byte(next))
61+
if !less {
62+
t.Error(prev, next)
63+
}
5764
}
5865

5966
func TestExtractPrefixDigits(t *testing.T) {

0 commit comments

Comments
 (0)