diff options
| author | Junegunn Choi <junegunn.c@gmail.com> | 2024-05-07 01:06:42 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-05-07 01:06:42 +0900 |
| commit | e8405f40fe2eb3675f1cb4f69e825eff5f13f269 (patch) | |
| tree | c917367f1f0098939f9cdf7376a2a135907024fc /src/matcher.go | |
| parent | 065b9e6fb2ce3e6e50ff423c3786989afa04ee14 (diff) | |
| download | fzf-e8405f40fe2eb3675f1cb4f69e825eff5f13f269.tar.gz | |
Refactor the code so that fzf can be used as a library (#3769)
Diffstat (limited to 'src/matcher.go')
| -rw-r--r-- | src/matcher.go | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/src/matcher.go b/src/matcher.go index b9288bb6..26426e4f 100644 --- a/src/matcher.go +++ b/src/matcher.go @@ -21,6 +21,7 @@ type MatchRequest struct { // Matcher is responsible for performing search type Matcher struct { + cache *ChunkCache patternBuilder func([]rune) *Pattern sort bool tac bool @@ -38,10 +39,11 @@ const ( ) // NewMatcher returns a new Matcher -func NewMatcher(patternBuilder func([]rune) *Pattern, +func NewMatcher(cache *ChunkCache, patternBuilder func([]rune) *Pattern, sort bool, tac bool, eventBox *util.EventBox, revision int) *Matcher { partitions := util.Min(numPartitionsMultiplier*runtime.NumCPU(), maxPartitions) return &Matcher{ + cache: cache, patternBuilder: patternBuilder, sort: sort, tac: tac, @@ -60,8 +62,13 @@ func (m *Matcher) Loop() { for { var request MatchRequest + stop := false m.reqBox.Wait(func(events *util.Events) { - for _, val := range *events { + for t, val := range *events { + if t == reqQuit { + stop = true + return + } switch val := val.(type) { case MatchRequest: request = val @@ -71,12 +78,15 @@ func (m *Matcher) Loop() { } events.Clear() }) + if stop { + break + } if request.sort != m.sort || request.revision != m.revision { m.sort = request.sort m.revision = request.revision m.mergerCache = make(map[string]*Merger) - clearChunkCache() + m.cache.Clear() } // Restart search @@ -236,3 +246,7 @@ func (m *Matcher) Reset(chunks []*Chunk, patternRunes []rune, cancel bool, final } m.reqBox.Set(event, MatchRequest{chunks, pattern, final, sort && pattern.sortable, revision}) } + +func (m *Matcher) Stop() { + m.reqBox.Set(reqQuit, nil) +} |
