in cpc/cpc_compressed_state.go [528:613]
func importFromMemory(bytes []byte) (*CpcCompressedState, error) {
if err := checkLoPreamble(bytes); err != nil {
return nil, err
}
if !isCompressed(bytes) {
return nil, fmt.Errorf("not compressed")
}
lgK := getLgK(bytes)
seedHash := getSeedHash(bytes)
state := NewCpcCompressedState(lgK, seedHash)
fmtOrd := getFormatOrdinal(bytes)
format := CpcFormat(fmtOrd)
state.MergeFlag = (fmtOrd & 1) == 0
state.CsvIsValid = (fmtOrd & 2) > 0
state.WindowIsValid = (fmtOrd & 4) > 0
switch format {
case CpcFormatEmptyMerged, CpcFormatEmptyHip:
if err := checkCapacity(len(bytes), 8); err != nil {
return nil, err
}
case CpcFormatSparseHybridMerged:
state.NumCoupons = getNumCoupons(bytes)
state.NumCsv = state.NumCoupons
state.CsvLengthInts = getSvLengthInts(bytes)
if err := checkCapacity(len(bytes), state.getRequiredSerializedBytes()); err != nil {
return nil, err
}
state.CsvStream = getSvStream(bytes)
case CpcFormatSparseHybridHip:
state.NumCoupons = getNumCoupons(bytes)
state.NumCsv = state.NumCoupons
state.CsvLengthInts = getSvLengthInts(bytes)
state.Kxp = getKxP(bytes)
state.HipEstAccum = getHipAccum(bytes)
if err := checkCapacity(len(bytes), state.getRequiredSerializedBytes()); err != nil {
return nil, err
}
state.CsvStream = getSvStream(bytes)
case CpcFormatPinnedSlidingMergedNosv:
state.FiCol = getFiCol(bytes)
state.NumCoupons = getNumCoupons(bytes)
state.CwLengthInts = getWLengthInts(bytes)
if err := checkCapacity(len(bytes), state.getRequiredSerializedBytes()); err != nil {
return nil, err
}
state.CwStream = getWStream(bytes)
case CpcFormatPinnedSlidingHipNosv:
state.FiCol = getFiCol(bytes)
state.NumCoupons = getNumCoupons(bytes)
state.CwLengthInts = getWLengthInts(bytes)
state.Kxp = getKxP(bytes)
state.HipEstAccum = getHipAccum(bytes)
if err := checkCapacity(len(bytes), state.getRequiredSerializedBytes()); err != nil {
return nil, err
}
state.CwStream = getWStream(bytes)
case CpcFormatPinnedSlidingMerged:
state.FiCol = getFiCol(bytes)
state.NumCoupons = getNumCoupons(bytes)
state.NumCsv = getNumSV(bytes)
state.CsvLengthInts = getSvLengthInts(bytes)
state.CwLengthInts = getWLengthInts(bytes)
if err := checkCapacity(len(bytes), state.getRequiredSerializedBytes()); err != nil {
return nil, err
}
state.CwStream = getWStream(bytes)
state.CsvStream = getSvStream(bytes)
case CpcFormatPinnedSlidingHip:
state.FiCol = getFiCol(bytes)
state.NumCoupons = getNumCoupons(bytes)
state.NumCsv = getNumSV(bytes)
state.CsvLengthInts = getSvLengthInts(bytes)
state.CwLengthInts = getWLengthInts(bytes)
state.Kxp = getKxP(bytes)
state.HipEstAccum = getHipAccum(bytes)
if err := checkCapacity(len(bytes), state.getRequiredSerializedBytes()); err != nil {
return nil, err
}
state.CwStream = getWStream(bytes)
state.CsvStream = getSvStream(bytes)
default:
panic("not implemented")
}
return state, nil
}