summaryrefslogtreecommitdiffstats
path: root/src/pattern.go
diff options
context:
space:
mode:
authorJunegunn Choi <junegunn.c@gmail.com>2015-08-02 14:00:18 +0900
committerJunegunn Choi <junegunn.c@gmail.com>2015-08-02 14:00:18 +0900
commit0ea66329b84cc6e4f8ff61ee99c00bb238070247 (patch)
tree72c3bc62ec491246390b56b2aac5b33645839503 /src/pattern.go
parent634670e3ea51a2fa1498a3de0c074b819828e2d8 (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.go18
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