func()

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
}