func()

in vhdcore/block/differencingDiskBlockFactory.go [69:100]


func (f *DifferencingDiskBlockFactory) Create(blockIndex uint32) (*Block, error) {
	if !f.params.BlockAllocationTable.HasData(blockIndex) {
		if f.cachedBlock == nil || f.cachedBlock.BlockIndex != blockIndex {
			var err error
			f.cachedBlock, err = f.params.ParentBlockFactory.Create(blockIndex)
			if err != nil {
				return nil, err
			}
		}

		return f.cachedBlock, nil
	}

	if f.cachedBlock == nil || f.cachedBlock.BlockIndex != blockIndex {
		logicalRange := common.NewIndexRangeFromLength(int64(blockIndex)*f.GetBlockSize(), f.GetBlockSize())
		f.cachedBlock = &Block{
			BlockIndex:      blockIndex,
			LogicalRange:    logicalRange,
			VhdUniqueID:     f.params.VhdFooter.UniqueID,
			IsEmpty:         false,
			BlockDataReader: f.blockDataReader,
		}

		var err error
		f.cachedBlock.BitMap, err = f.bitmapFactory.Create(blockIndex)
		if err != nil {
			return nil, err
		}
	}

	return f.cachedBlock, nil
}