github.com/scottcagno/storage@v1.8.0/pkg/bio/bio.go (about)

     1  package bio
     2  
     3  import "errors"
     4  
     5  var (
     6  	ErrInvalidSize   = errors.New("bio: invalid size")
     7  	ErrInvalidOffset = errors.New("bio: invalid offset")
     8  	ErrSliceTooLarge = errors.New("bio: slice is too large")
     9  	ErrSliceTooSmall = errors.New("bio: slice is too small")
    10  	ErrDataIsEmpty   = errors.New("bio: data is empty or nil")
    11  )
    12  
    13  const (
    14  	blockSize       = 32
    15  	headerSize      = 6
    16  	maxDataPerBlock = blockSize - headerSize
    17  )
    18  
    19  const (
    20  	blocksPerChunk  = 16
    21  	chunkSize       = blocksPerChunk * blockSize
    22  	maxDataPerChunk = blocksPerChunk * maxDataPerBlock
    23  )
    24  
    25  const (
    26  	chunksPerSegment = 15
    27  	segmentSize      = chunksPerSegment * chunkSize
    28  )
    29  
    30  const (
    31  	blockMask  = blockSize - 1
    32  	headerMask = headerSize - 1
    33  	chunkMask  = chunkSize - 1
    34  )
    35  
    36  func divUp(dividend, divisor int) int {
    37  	// divide
    38  	res := dividend / divisor
    39  	// divided evenly
    40  	if (dividend % divisor) == 0 {
    41  		return res
    42  	}
    43  	// rounded down
    44  	if (divisor ^ dividend) >= 0 {
    45  		return res + 1
    46  	}
    47  	return res
    48  }