diff options
author | Junegunn Choi <junegunn.c@gmail.com> | 2015-08-02 14:00:18 +0900 |
---|---|---|
committer | Junegunn Choi <junegunn.c@gmail.com> | 2015-08-02 14:00:18 +0900 |
commit | 0ea66329b84cc6e4f8ff61ee99c00bb238070247 (patch) | |
tree | 72c3bc62ec491246390b56b2aac5b33645839503 /src/pattern.go | |
parent | 634670e3ea51a2fa1498a3de0c074b819828e2d8 (diff) |
Performance tuning - eager rune array conversion
> wc -l /tmp/list2
2594098 /tmp/list2
> time cat /tmp/list2 | fzf-0.10.1-darwin_amd64 -fqwerty > /dev/null
real 0m5.418s
user 0m10.990s
sys 0m1.302s
> time cat /tmp/list2 | fzf-head -fqwerty > /dev/null
real 0m4.862s
user 0m6.619s
sys 0m0.982s
Diffstat (limited to 'src/pattern.go')
-rw-r--r-- | src/pattern.go | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/src/pattern.go b/src/pattern.go index ffdf6d8b..990450a9 100644 --- a/src/pattern.go +++ b/src/pattern.go @@ -44,7 +44,7 @@ type Pattern struct { hasInvTerm bool delimiter *regexp.Regexp nth []Range - procFun map[termType]func(bool, *[]rune, []rune) (int, int) + procFun map[termType]func(bool, []rune, []rune) (int, int) } var ( @@ -114,7 +114,7 @@ func BuildPattern(mode Mode, caseMode Case, hasInvTerm: hasInvTerm, nth: nth, delimiter: delimiter, - procFun: make(map[termType]func(bool, *[]rune, []rune) (int, int))} + procFun: make(map[termType]func(bool, []rune, []rune) (int, int))} ptr.procFun[termFuzzy] = algo.FuzzyMatch ptr.procFun[termEqual] = algo.EqualMatch @@ -305,27 +305,25 @@ func (p *Pattern) extendedMatch(item *Item) []Offset { return offsets } -func (p *Pattern) prepareInput(item *Item) *[]Token { +func (p *Pattern) prepareInput(item *Item) []Token { if item.transformed != nil { return item.transformed } - var ret *[]Token + var ret []Token if len(p.nth) > 0 { tokens := Tokenize(item.text, p.delimiter) ret = Transform(tokens, p.nth) } else { - runes := []rune(*item.text) - trans := []Token{Token{text: &runes, prefixLength: 0}} - ret = &trans + ret = []Token{Token{text: item.text, prefixLength: 0}} } item.transformed = ret return ret } -func (p *Pattern) iter(pfun func(bool, *[]rune, []rune) (int, int), - tokens *[]Token, caseSensitive bool, pattern []rune) (int, int) { - for _, part := range *tokens { +func (p *Pattern) iter(pfun func(bool, []rune, []rune) (int, int), + tokens []Token, caseSensitive bool, pattern []rune) (int, int) { + for _, part := range tokens { prefixLength := part.prefixLength if sidx, eidx := pfun(caseSensitive, part.text, pattern); sidx >= 0 { return sidx + prefixLength, eidx + prefixLength |