Bailing early when collecting sequences and documentation
This commit is contained in:
@@ -2315,10 +2315,6 @@ static void ZSTD_copyBlockSequences(ZSTD_CCtx* zc)
|
|||||||
zc->seqCollector.seqIndex += seqsSize;
|
zc->seqCollector.seqIndex += seqsSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* We call compress2() and collect sequences after each block
|
|
||||||
* compression. The function stores the ZSTD_Sequences in outSeqs
|
|
||||||
* and returns the number of collected sequences from all blocks.
|
|
||||||
*/
|
|
||||||
size_t ZSTD_getSequences(ZSTD_CCtx* zc, ZSTD_Sequence* outSeqs,
|
size_t ZSTD_getSequences(ZSTD_CCtx* zc, ZSTD_Sequence* outSeqs,
|
||||||
size_t outSeqsSize, const void* src, size_t srcSize)
|
size_t outSeqsSize, const void* src, size_t srcSize)
|
||||||
{
|
{
|
||||||
@@ -2351,6 +2347,11 @@ static size_t ZSTD_compressBlock_internal(ZSTD_CCtx* zc,
|
|||||||
if (bss == ZSTDbss_noCompress) { cSize = 0; goto out; }
|
if (bss == ZSTDbss_noCompress) { cSize = 0; goto out; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (zc->seqCollector.collectSequences) {
|
||||||
|
ZSTD_copyBlockSequences(zc);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* encode sequences and literals */
|
/* encode sequences and literals */
|
||||||
cSize = ZSTD_compressSequences(&zc->seqStore,
|
cSize = ZSTD_compressSequences(&zc->seqStore,
|
||||||
&zc->blockState.prevCBlock->entropy, &zc->blockState.nextCBlock->entropy,
|
&zc->blockState.prevCBlock->entropy, &zc->blockState.nextCBlock->entropy,
|
||||||
@@ -2360,10 +2361,6 @@ static size_t ZSTD_compressBlock_internal(ZSTD_CCtx* zc,
|
|||||||
zc->entropyWorkspace, HUF_WORKSPACE_SIZE /* statically allocated in resetCCtx */,
|
zc->entropyWorkspace, HUF_WORKSPACE_SIZE /* statically allocated in resetCCtx */,
|
||||||
zc->bmi2);
|
zc->bmi2);
|
||||||
|
|
||||||
if (zc->seqCollector.collectSequences) {
|
|
||||||
ZSTD_copyBlockSequences(zc);
|
|
||||||
}
|
|
||||||
|
|
||||||
out:
|
out:
|
||||||
if (!ZSTD_isError(cSize) && cSize != 0) {
|
if (!ZSTD_isError(cSize) && cSize != 0) {
|
||||||
/* confirm repcodes and entropy tables when emitting a compressed block */
|
/* confirm repcodes and entropy tables when emitting a compressed block */
|
||||||
|
|||||||
+11
-5
@@ -1073,11 +1073,11 @@ ZSTDLIB_API size_t ZSTD_sizeof_DDict(const ZSTD_DDict* ddict);
|
|||||||
typedef struct ZSTD_CCtx_params_s ZSTD_CCtx_params;
|
typedef struct ZSTD_CCtx_params_s ZSTD_CCtx_params;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
unsigned int matchPos;
|
unsigned int matchPos; /* match pos in dst */
|
||||||
unsigned int offset;
|
unsigned int offset; /* offset taking into account rep (different from seqdef) */
|
||||||
unsigned int litLength;
|
unsigned int litLength; /* literal length */
|
||||||
unsigned int matchLength;
|
unsigned int matchLength; /* match length */
|
||||||
unsigned int rep;
|
unsigned int rep; /* 0 when seq not rep and seqDef.offset otherwise */
|
||||||
} ZSTD_Sequence;
|
} ZSTD_Sequence;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@@ -1218,6 +1218,12 @@ ZSTDLIB_API unsigned long long ZSTD_decompressBound(const void* src, size_t srcS
|
|||||||
* or an error code (if srcSize is too small) */
|
* or an error code (if srcSize is too small) */
|
||||||
ZSTDLIB_API size_t ZSTD_frameHeaderSize(const void* src, size_t srcSize);
|
ZSTDLIB_API size_t ZSTD_frameHeaderSize(const void* src, size_t srcSize);
|
||||||
|
|
||||||
|
/*! ZSTD_getSequences() :
|
||||||
|
* Extract sequences from the sequence store
|
||||||
|
* zc can be used to insert custom compression params.
|
||||||
|
* This function invokes ZSTD_compress2
|
||||||
|
* @return : number of sequences extracted
|
||||||
|
*/
|
||||||
ZSTDLIB_API size_t ZSTD_getSequences(ZSTD_CCtx* zc, ZSTD_Sequence* outSeqs,
|
ZSTDLIB_API size_t ZSTD_getSequences(ZSTD_CCtx* zc, ZSTD_Sequence* outSeqs,
|
||||||
size_t outSeqsSize, const void* src, size_t srcSize);
|
size_t outSeqsSize, const void* src, size_t srcSize);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user