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