Inline function calls in tight loops

By only using leaf functions
This commit is contained in:
Junegunn Choi 2016-08-18 01:48:52 +09:00
parent babf877fd6
commit 0e0de29b87
No known key found for this signature in database
GPG Key ID: 254BC280FEF9C627

View File

@ -22,13 +22,6 @@ func indexAt(index int, max int, forward bool) int {
return max - index - 1 return max - index - 1
} }
func runeAt(text util.Chars, index int, max int, forward bool) rune {
if forward {
return text.Get(index)
}
return text.Get(max - index - 1)
}
// Result conatins the results of running a match function. // Result conatins the results of running a match function.
type Result struct { type Result struct {
Start int32 Start int32
@ -136,7 +129,7 @@ func FuzzyMatch(caseSensitive bool, forward bool, text util.Chars, pattern []run
lenPattern := len(pattern) lenPattern := len(pattern)
for index := 0; index < lenRunes; index++ { for index := 0; index < lenRunes; index++ {
char := runeAt(text, index, lenRunes, forward) char := text.Get(indexAt(index, lenRunes, forward))
// This is considerably faster than blindly applying strings.ToLower to the // This is considerably faster than blindly applying strings.ToLower to the
// whole string // whole string
if !caseSensitive { if !caseSensitive {
@ -164,7 +157,7 @@ func FuzzyMatch(caseSensitive bool, forward bool, text util.Chars, pattern []run
if sidx >= 0 && eidx >= 0 { if sidx >= 0 && eidx >= 0 {
pidx-- pidx--
for index := eidx - 1; index >= sidx; index-- { for index := eidx - 1; index >= sidx; index-- {
char := runeAt(text, index, lenRunes, forward) char := text.Get(indexAt(index, lenRunes, forward))
if !caseSensitive { if !caseSensitive {
if char >= 'A' && char <= 'Z' { if char >= 'A' && char <= 'Z' {
char += 32 char += 32
@ -215,7 +208,7 @@ func ExactMatchNaive(caseSensitive bool, forward bool, text util.Chars, pattern
pidx := 0 pidx := 0
for index := 0; index < lenRunes; index++ { for index := 0; index < lenRunes; index++ {
char := runeAt(text, index, lenRunes, forward) char := text.Get(indexAt(index, lenRunes, forward))
if !caseSensitive { if !caseSensitive {
if char >= 'A' && char <= 'Z' { if char >= 'A' && char <= 'Z' {
char += 32 char += 32