Package util contains utility functions for slot headers.
The package contains functions to pack/unpack sizes for physical slots and logical buckets. The size info is a 4 byte value which allocates 2 bytes for current size and 2 bytes for available size.
CCCC CCCC CCCC CCCC AAAA AAAA AAAA AAAA
The allocated size value is a packed integer using a 2 bit multiplier in the beginning - using these packed values a slot can grow up to 138681822 bytes (138 MB). The space allocation becomes more and more wasteful with increasing slot size. The current size is stored as a difference to the allocated size. The maximum difference between alloacted and current space is 65534 bytes.
The package contains utility functions to pack and unpack location information in an uint64. A location is a pointer which identifies a specific record and within the record a specific offset.
The 8 byte uint64 value is split into a 6 byte (48 bits) record address and 2 byte offset.
RRRR RRRR RRRR RRRR RRRR RRRR RRRR RRRR RRRR RRRR RRRR RRRR OOOO OOOO OOOO OOOO
We can address at maximum (having a record size of 32767 bytes):
(2^48 / 2 - 1) * 32767 = 4.61154528 * 10^18 which is around 4 exabyte
Considering a default page size of 4096 bytes we can address:
(2^48 / 2 - 1) * 4096 = 5.76460752 * 10^17 which is around 512 petabyte
LocationSize is the size of a location in bytes
MaxAvailableSizeDifference represents the maximal size of the difference between available size and current size
const MaxOffsetValue = 0xFFFF
MaxOffsetValue is the maximum offset value for a location (32767).
const MaxRecordValue = 0xFFFFFF
MaxRecordValue is the maximum record value (2^48 / 2 - 1)
6 byte = 48 bits
OffetAvailableSize is the offset for the available size on a slotsize header.
const OffsetCurrentSize = 0
OffsetCurrentSize is the offset for the size on a slotsize header.
SizeInfoSize represents the size of the size info
const UnsignedShortMax = 0xFFFF
UnsignedShortMax is the maximum value of an unsigned short as used for slotsizes.
AvailableSize returns the available size of a slot.
CurrentSize returns the current size of a slot.
LocationOffset returns the offset from a location.
LocationRecord retirms the record id from a location.
NormalizeSlotSize normalizes a given slot size.
PackLocation packs location information into an uint64.
SetAvailableSize sets the available size of a slot.
SetCurrentSize sets the current size of a slot.