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 }