123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- //go:build 5BytesOffset
- // +build 5BytesOffset
- package types
- import (
- "fmt"
- )
- type OffsetHigher struct {
- b4 byte
- }
- const (
- OffsetSize = 4 + 1
- MaxPossibleVolumeSize uint64 = 4 * 1024 * 1024 * 1024 * 8 * 256 /* 256 is from the extra byte */ // 8TB
- )
- func OffsetToBytes(bytes []byte, offset Offset) {
- bytes[4] = offset.b4
- bytes[3] = offset.b0
- bytes[2] = offset.b1
- bytes[1] = offset.b2
- bytes[0] = offset.b3
- }
- // only for testing, will be removed later.
- func Uint32ToOffset(offset uint32) Offset {
- return Offset{
- OffsetHigher: OffsetHigher{
- b4: byte(offset >> 32),
- },
- OffsetLower: OffsetLower{
- b0: byte(offset),
- b1: byte(offset >> 8),
- b2: byte(offset >> 16),
- b3: byte(offset >> 24),
- },
- }
- }
- func BytesToOffset(bytes []byte) Offset {
- return Offset{
- OffsetHigher: OffsetHigher{
- b4: bytes[4],
- },
- OffsetLower: OffsetLower{
- b0: bytes[3],
- b1: bytes[2],
- b2: bytes[1],
- b3: bytes[0],
- },
- }
- }
- func (offset Offset) IsZero() bool {
- return offset.b0 == 0 && offset.b1 == 0 && offset.b2 == 0 && offset.b3 == 0 && offset.b4 == 0
- }
- func ToOffset(offset int64) Offset {
- smaller := offset / int64(NeedlePaddingSize)
- return Offset{
- OffsetHigher: OffsetHigher{
- b4: byte(smaller >> 32),
- },
- OffsetLower: OffsetLower{
- b0: byte(smaller),
- b1: byte(smaller >> 8),
- b2: byte(smaller >> 16),
- b3: byte(smaller >> 24),
- },
- }
- }
- func (offset Offset) ToActualOffset() (actualOffset int64) {
- return (int64(offset.b0) + int64(offset.b1)<<8 + int64(offset.b2)<<16 + int64(offset.b3)<<24 + int64(offset.b4)<<32) * int64(NeedlePaddingSize)
- }
- func (offset Offset) String() string {
- return fmt.Sprintf("%d", int64(offset.b0)+int64(offset.b1)<<8+int64(offset.b2)<<16+int64(offset.b3)<<24+int64(offset.b4)<<32)
- }
|