mirror of
https://github.com/dolthub/dolt.git
synced 2026-01-24 03:09:22 -06:00
56 lines
1.1 KiB
Go
56 lines
1.1 KiB
Go
// Copyright 2016 Attic Labs, Inc. All rights reserved.
|
|
// Licensed under the Apache License, version 2.0:
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
package chunks
|
|
|
|
import (
|
|
"sync"
|
|
|
|
"github.com/attic-labs/noms/go/hash"
|
|
)
|
|
|
|
func newUnwrittenPutCache() *unwrittenPutCache {
|
|
return &unwrittenPutCache{map[hash.Hash]Chunk{}, &sync.Mutex{}}
|
|
}
|
|
|
|
type unwrittenPutCache struct {
|
|
unwrittenPuts map[hash.Hash]Chunk
|
|
mu *sync.Mutex
|
|
}
|
|
|
|
func (p *unwrittenPutCache) Add(c Chunk) bool {
|
|
p.mu.Lock()
|
|
defer p.mu.Unlock()
|
|
if _, ok := p.unwrittenPuts[c.Hash()]; !ok {
|
|
p.unwrittenPuts[c.Hash()] = c
|
|
return true
|
|
}
|
|
|
|
return false
|
|
}
|
|
|
|
func (p *unwrittenPutCache) Has(c Chunk) (has bool) {
|
|
p.mu.Lock()
|
|
defer p.mu.Unlock()
|
|
_, has = p.unwrittenPuts[c.Hash()]
|
|
return
|
|
}
|
|
|
|
func (p *unwrittenPutCache) Get(r hash.Hash) Chunk {
|
|
p.mu.Lock()
|
|
defer p.mu.Unlock()
|
|
if c, ok := p.unwrittenPuts[r]; ok {
|
|
return c
|
|
}
|
|
return EmptyChunk
|
|
}
|
|
|
|
func (p *unwrittenPutCache) Clear(chunks []Chunk) {
|
|
p.mu.Lock()
|
|
defer p.mu.Unlock()
|
|
for _, c := range chunks {
|
|
delete(p.unwrittenPuts, c.Hash())
|
|
}
|
|
}
|