1// Copyright 2019 Keybase Inc. All rights reserved.
2// Use of this source code is governed by a BSD
3// license that can be found in the LICENSE file.
4
5package libkbfs
6
7import (
8	"context"
9
10	"github.com/keybase/client/go/kbfs/data"
11	"github.com/pkg/errors"
12)
13
14// dirBlockMapMemory is an internal structure to track file block
15// data in memory when putting blocks.
16type dirBlockMapMemory struct {
17	blocks map[data.BlockPointer]*data.DirBlock
18}
19
20var _ dirBlockMap = (*dirBlockMapMemory)(nil)
21
22func newDirBlockMapMemory() *dirBlockMapMemory {
23	return &dirBlockMapMemory{make(map[data.BlockPointer]*data.DirBlock)}
24}
25
26func (dbmm *dirBlockMapMemory) putBlock(
27	_ context.Context, ptr data.BlockPointer, block *data.DirBlock) error {
28	dbmm.blocks[ptr] = block
29	return nil
30}
31
32func (dbmm *dirBlockMapMemory) getBlock(
33	_ context.Context, ptr data.BlockPointer) (*data.DirBlock, error) {
34	block, ok := dbmm.blocks[ptr]
35	if !ok {
36		return nil, errors.Errorf("No such block for %s", ptr)
37	}
38	return block, nil
39}
40
41func (dbmm *dirBlockMapMemory) hasBlock(
42	_ context.Context, ptr data.BlockPointer) (bool, error) {
43	_, ok := dbmm.blocks[ptr]
44	return ok, nil
45}
46
47func (dbmm *dirBlockMapMemory) deleteBlock(
48	_ context.Context, ptr data.BlockPointer) error {
49	delete(dbmm.blocks, ptr)
50	return nil
51}
52
53func (dbmm *dirBlockMapMemory) numBlocks() int {
54	return len(dbmm.blocks)
55}
56