Esempio n. 1
0
        /** 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));
        }
Esempio n. 2
0
        /** 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);
        }
Esempio n. 3
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);
        }