func deserializeAuxHashMap()

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
}