github.com/keybase/client/go@v0.0.0-20240309051027-028f7c731f8b/kbfs/libkbfs/dir_block_map_memory.go (about)

     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  
     5  package libkbfs
     6  
     7  import (
     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.
    16  type dirBlockMapMemory struct {
    17  	blocks map[data.BlockPointer]*data.DirBlock
    18  }
    19  
    20  var _ dirBlockMap = (*dirBlockMapMemory)(nil)
    21  
    22  func newDirBlockMapMemory() *dirBlockMapMemory {
    23  	return &dirBlockMapMemory{make(map[data.BlockPointer]*data.DirBlock)}
    24  }
    25  
    26  func (dbmm *dirBlockMapMemory) putBlock(
    27  	_ context.Context, ptr data.BlockPointer, block *data.DirBlock) error {
    28  	dbmm.blocks[ptr] = block
    29  	return nil
    30  }
    31  
    32  func (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  
    41  func (dbmm *dirBlockMapMemory) hasBlock(
    42  	_ context.Context, ptr data.BlockPointer) (bool, error) {
    43  	_, ok := dbmm.blocks[ptr]
    44  	return ok, nil
    45  }
    46  
    47  func (dbmm *dirBlockMapMemory) deleteBlock(
    48  	_ context.Context, ptr data.BlockPointer) error {
    49  	delete(dbmm.blocks, ptr)
    50  	return nil
    51  }
    52  
    53  func (dbmm *dirBlockMapMemory) numBlocks() int {
    54  	return len(dbmm.blocks)
    55  }