Refactor cache lookup

- Remove multiple mutex locks in partial cache lookup
- Simplify return values
This commit is contained in:
Junegunn Choi
2017-07-15 19:35:27 +09:00
parent 6725151a99
commit 8dbdd55730
2 changed files with 34 additions and 20 deletions

View File

@@ -247,27 +247,13 @@ func (p *Pattern) Match(chunk *Chunk, slab *util.Slab) []*Result {
// ChunkCache: Exact match
cacheKey := p.CacheKey()
if p.cacheable {
if cached, found := _cache.Find(chunk, cacheKey); found {
if cached := _cache.Find(chunk, cacheKey); cached != nil {
return cached
}
}
// Prefix/suffix cache
var space []*Result
Loop:
for idx := 1; idx < len(cacheKey); idx++ {
// [---------| ] | [ |---------]
// [--------| ] | [ |--------]
// [-------| ] | [ |-------]
prefix := cacheKey[:len(cacheKey)-idx]
suffix := cacheKey[idx:]
for _, substr := range [2]*string{&prefix, &suffix} {
if cached, found := _cache.Find(chunk, *substr); found {
space = cached
break Loop
}
}
}
space := _cache.Search(chunk, cacheKey)
matches := p.matchChunk(chunk, space, slab)