in cpc/cpc_compressed_state.go [615:666]
func (c *CpcCompressedState) exportToMemory() ([]byte, error) {
// Determine the total number of bytes required.
totalBytes := c.getRequiredSerializedBytes()
// Allocate a byte slice (zero-filled by default).
mem := make([]byte, totalBytes)
// Determine the format of the state.
format := c.getFormat()
switch format {
case CpcFormatEmptyMerged:
if err := putEmptyMerged(mem, c.LgK, c.SeedHash); err != nil {
return nil, err
}
case CpcFormatEmptyHip:
if err := putEmptyHip(mem, c.LgK, c.SeedHash); err != nil {
return nil, err
}
case CpcFormatSparseHybridMerged:
if err := putSparseHybridMerged(mem, c.LgK, int(c.NumCoupons), c.CsvLengthInts, c.SeedHash, c.CsvStream); err != nil {
return nil, err
}
case CpcFormatSparseHybridHip:
if err := putSparseHybridHip(mem, c.LgK, int(c.NumCoupons), c.CsvLengthInts, c.Kxp, c.HipEstAccum, c.SeedHash, c.CsvStream); err != nil {
return nil, err
}
case CpcFormatPinnedSlidingMergedNosv:
if err := putPinnedSlidingMergedNoSv(mem, c.LgK, c.FiCol, int(c.NumCoupons), c.CwLengthInts, c.SeedHash, c.CwStream); err != nil {
return nil, err
}
case CpcFormatPinnedSlidingHipNosv:
if err := putPinnedSlidingHipNoSv(mem, c.LgK, c.FiCol, int(c.NumCoupons), c.CwLengthInts, c.Kxp, c.HipEstAccum, c.SeedHash, c.CwStream); err != nil {
return nil, err
}
case CpcFormatPinnedSlidingMerged:
if err := putPinnedSlidingMerged(mem, c.LgK, c.FiCol, int(c.NumCoupons), int(c.NumCsv), c.CsvLengthInts, c.CwLengthInts, c.SeedHash, c.CsvStream, c.CwStream); err != nil {
return nil, err
}
case CpcFormatPinnedSlidingHip:
if err := putPinnedSlidingHip(mem, c.LgK, c.FiCol, int(c.NumCoupons), int(c.NumCsv), c.Kxp, c.HipEstAccum, c.CsvLengthInts, c.CwLengthInts, c.SeedHash, c.CsvStream, c.CwStream); err != nil {
return nil, err
}
default:
return nil, fmt.Errorf("exportToMemory: format %v not implemented", format)
}
if err := checkCapacity(len(mem), totalBytes); err != nil {
return nil, err
}
return mem, nil
}