Simplify nth comparison when reusing transformed tokens

This commit is contained in:
Junegunn Choi
2025-01-13 17:37:50 +09:00
parent ba0935c71f
commit 56fef7c8df
4 changed files with 14 additions and 19 deletions

View File

@@ -60,6 +60,7 @@ type Pattern struct {
cacheKey string
delimiter Delimiter
nth []Range
revision int
procFun map[termType]algo.Algo
cache *ChunkCache
}
@@ -72,7 +73,7 @@ func init() {
// BuildPattern builds Pattern object from the given arguments
func BuildPattern(cache *ChunkCache, patternCache map[string]*Pattern, fuzzy bool, fuzzyAlgo algo.Algo, extended bool, caseMode Case, normalize bool, forward bool,
withPos bool, cacheable bool, nth []Range, delimiter Delimiter, runes []rune) *Pattern {
withPos bool, cacheable bool, nth []Range, delimiter Delimiter, revision int, runes []rune) *Pattern {
var asString string
if extended {
@@ -140,6 +141,7 @@ func BuildPattern(cache *ChunkCache, patternCache map[string]*Pattern, fuzzy boo
sortable: sortable,
cacheable: cacheable,
nth: nth,
revision: revision,
delimiter: delimiter,
cache: cache,
procFun: make(map[termType]algo.Algo)}
@@ -394,23 +396,14 @@ func (p *Pattern) extendedMatch(item *Item, withPos bool, slab *util.Slab) ([]Of
func (p *Pattern) transformInput(item *Item) []Token {
if item.transformed != nil {
transformed := *item.transformed
if len(transformed.nth) == len(p.nth) {
same := true
for idx, rangeItem := range transformed.nth {
if rangeItem != p.nth[idx] {
same = false
break
}
}
if same {
return transformed.tokens
}
if transformed.revision == p.revision {
return transformed.tokens
}
}
tokens := Tokenize(item.text.ToString(), p.delimiter)
ret := Transform(tokens, p.nth)
item.transformed = &transformed{p.nth, ret}
item.transformed = &transformed{p.revision, ret}
return ret
}