// +build !openbsd
// +build !windows

package fuse

import (
	"github.com/restic/restic/internal/restic"
	"golang.org/x/net/context"
)

// BlobSizeCache caches the size of blobs in the repo.
type BlobSizeCache struct {
	m map[restic.ID]uint
}

// NewBlobSizeCache returns a new blob size cache containing all entries from midx.
func NewBlobSizeCache(ctx context.Context, idx restic.Index) *BlobSizeCache {
	m := make(map[restic.ID]uint, 1000)
	for pb := range idx.Each(ctx) {
		m[pb.ID] = uint(restic.PlaintextLength(int(pb.Length)))
	}
	return &BlobSizeCache{
		m: m,
	}
}

// Lookup returns the size of the blob id.
func (c *BlobSizeCache) Lookup(id restic.ID) (size uint, found bool) {
	if c == nil {
		return 0, false
	}

	size, found = c.m[id]
	return size, found
}