/** ZSTD_compressSubBlock() : * Compresses a single sub-block. * @return : compressed size of the sub-block * Or 0 if it failed to compress. */ private static nuint ZSTD_compressSubBlock(ZSTD_entropyCTables_t *entropy, ZSTD_entropyCTablesMetadata_t *entropyMetadata, seqDef_s *sequences, nuint nbSeq, byte *literals, nuint litSize, byte *llCode, byte *mlCode, byte *ofCode, ZSTD_CCtx_params_s *cctxParams, void *dst, nuint dstCapacity, int bmi2, int writeLitEntropy, int writeSeqEntropy, int *litEntropyWritten, int *seqEntropyWritten, uint lastBlock) { byte *ostart = (byte *)(dst); byte *oend = ostart + dstCapacity; byte *op = ostart + ZSTD_blockHeaderSize; { nuint cLitSize = ZSTD_compressSubBlock_literal((HUF_CElt_s *)(entropy->huf.CTable), &entropyMetadata->hufMetadata, literals, litSize, (void *)op, (nuint)(oend - op), bmi2, writeLitEntropy, litEntropyWritten); { nuint err_code = (cLitSize); if ((ERR_isError(err_code)) != 0) { return(err_code); } } if (cLitSize == 0) { return(0); } op += cLitSize; } { nuint cSeqSize = ZSTD_compressSubBlock_sequences(&entropy->fse, &entropyMetadata->fseMetadata, sequences, nbSeq, llCode, mlCode, ofCode, cctxParams, (void *)op, (nuint)(oend - op), bmi2, writeSeqEntropy, seqEntropyWritten); { nuint err_code = (cSeqSize); if ((ERR_isError(err_code)) != 0) { return(err_code); } } if (cSeqSize == 0) { return(0); } op += cSeqSize; } { nuint cSize = (nuint)((ulong)((op - ostart)) - ZSTD_blockHeaderSize); uint cBlockHeader24 = lastBlock + (((uint)(blockType_e.bt_compressed)) << 1) + (uint)(cSize << 3); MEM_writeLE24((void *)ostart, cBlockHeader24); } return((nuint)(op - ostart)); }
/** ZSTD_buildSuperBlockEntropy() : * Builds entropy for the super-block. * @return : 0 on success or error code */ private static nuint ZSTD_buildSuperBlockEntropy(seqStore_t *seqStorePtr, ZSTD_entropyCTables_t *prevEntropy, ZSTD_entropyCTables_t *nextEntropy, ZSTD_CCtx_params_s *cctxParams, ZSTD_entropyCTablesMetadata_t *entropyMetadata, void *workspace, nuint wkspSize) { nuint litSize = (nuint)(seqStorePtr->lit - seqStorePtr->litStart); entropyMetadata->hufMetadata.hufDesSize = ZSTD_buildSuperBlockEntropy_literal((void *)seqStorePtr->litStart, litSize, &prevEntropy->huf, &nextEntropy->huf, &entropyMetadata->hufMetadata, ZSTD_disableLiteralsCompression(cctxParams), workspace, wkspSize); { nuint err_code = (entropyMetadata->hufMetadata.hufDesSize); if ((ERR_isError(err_code)) != 0) { return(err_code); } } entropyMetadata->fseMetadata.fseTablesSize = ZSTD_buildSuperBlockEntropy_sequences(seqStorePtr, &prevEntropy->fse, &nextEntropy->fse, cctxParams, &entropyMetadata->fseMetadata, workspace, wkspSize); { nuint err_code = (entropyMetadata->fseMetadata.fseTablesSize); if ((ERR_isError(err_code)) != 0) { return(err_code); } } return(0); }
private static nuint ZSTD_estimateSubBlockSize(byte *literals, nuint litSize, byte *ofCodeTable, byte *llCodeTable, byte *mlCodeTable, nuint nbSeq, ZSTD_entropyCTables_t *entropy, ZSTD_entropyCTablesMetadata_t *entropyMetadata, void *workspace, nuint wkspSize, int writeLitEntropy, int writeSeqEntropy) { nuint cSizeEstimate = 0; cSizeEstimate += ZSTD_estimateSubBlockSize_literal(literals, litSize, &entropy->huf, &entropyMetadata->hufMetadata, workspace, wkspSize, writeLitEntropy); cSizeEstimate += ZSTD_estimateSubBlockSize_sequences(ofCodeTable, llCodeTable, mlCodeTable, nbSeq, &entropy->fse, &entropyMetadata->fseMetadata, workspace, wkspSize, writeSeqEntropy); return(cSizeEstimate + ZSTD_blockHeaderSize); }