in hll/aux_hash_map.go [51:95]
func deserializeAuxHashMap(byteArray []byte, offset int, lgConfigL int, auxCount int, srcCompact bool) (*auxHashMap, error) {
var (
lgAuxArrInts int
)
if srcCompact {
v, err := computeLgArr(byteArray, auxCount, lgConfigL)
if err != nil {
return nil, err
}
lgAuxArrInts = v
} else {
lgAuxArrInts = extractLgArr(byteArray)
}
auxMap := newAuxHashMap(lgAuxArrInts, lgConfigL)
configKMask := (1 << lgConfigL) - 1
if srcCompact {
for i := 0; i < auxCount; i++ {
pair := int(binary.LittleEndian.Uint32(byteArray[offset+(i<<2) : offset+(i<<2)+4]))
slotNo := getPairLow26(pair) & configKMask
value := getPairValue(pair)
err := auxMap.mustAdd(slotNo, value) //increments count
if err != nil {
return nil, err
}
}
} else { //updatable
auxArrInts := 1 << lgAuxArrInts
for i := 0; i < auxArrInts; i++ {
pair := int(binary.LittleEndian.Uint32(byteArray[offset+(i<<2) : offset+(i<<2)+4]))
if pair == empty {
continue
}
slotNo := getPairLow26(pair) & configKMask
value := getPairValue(pair)
err := auxMap.mustAdd(slotNo, value) //increments count
if err != nil {
return nil, err
}
}
}
return auxMap, nil
}