From aa829988215273f8c8b1423e1a924b326168e09f Mon Sep 17 00:00:00 2001 From: Danielle Rozenblit Date: Fri, 9 Sep 2022 12:34:25 -0700 Subject: [PATCH 1/2] add sequence bound function --- lib/compress/zstd_compress.c | 4 ++++ lib/zstd.h | 9 +++++++++ 2 files changed, 13 insertions(+) diff --git a/lib/compress/zstd_compress.c b/lib/compress/zstd_compress.c index 59d441b2a..8a0c2f191 100644 --- a/lib/compress/zstd_compress.c +++ b/lib/compress/zstd_compress.c @@ -3003,6 +3003,10 @@ static void ZSTD_copyBlockSequences(ZSTD_CCtx* zc) zc->seqCollector.seqIndex += seqStoreSeqSize; } +size_t ZSTD_sequenceBound(size_t srcSize) { + return (srcSize / ZSTD_MINMATCH_MIN) + 1; +} + size_t ZSTD_generateSequences(ZSTD_CCtx* zc, ZSTD_Sequence* outSeqs, size_t outSeqsSize, const void* src, size_t srcSize) { diff --git a/lib/zstd.h b/lib/zstd.h index 112012d26..cf3dd7e27 100644 --- a/lib/zstd.h +++ b/lib/zstd.h @@ -1396,6 +1396,15 @@ typedef enum { ZSTD_sf_explicitBlockDelimiters = 1 /* Representation of ZSTD_Sequence contains explicit block delimiters */ } ZSTD_sequenceFormat_e; +/*! ZSTD_sequenceBound() : + * `srcSize` : size of the input buffer + * @return : upper-bound for the number of sequences that can be generated + * from a buffer of srcSize bytes + * + * note : returns number of sequences - to get bytes, multiply by sizeof(ZSTD_Sequence). + */ +ZSTDLIB_STATIC_API size_t ZSTD_sequenceBound(size_t srcSize); + /*! ZSTD_generateSequences() : * Generate sequences using ZSTD_compress2(), given a source buffer. * From 1613caf8bd1994c41728e43de75638ac79003164 Mon Sep 17 00:00:00 2001 From: Danielle Rozenblit Date: Fri, 9 Sep 2022 13:04:41 -0700 Subject: [PATCH 2/2] use ZSTD_sequenceBound in seqBench --- contrib/seqBench/seqBench.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/contrib/seqBench/seqBench.c b/contrib/seqBench/seqBench.c index 473649c7b..7efebec7b 100644 --- a/contrib/seqBench/seqBench.c +++ b/contrib/seqBench/seqBench.c @@ -22,9 +22,7 @@ int main(int argc, char *argv[]) { fread(inBuf, inBufSize, 1, f); fclose(f); - // Should work fine for this benchmark, but we really need - // a function like ZSTD_compressBound() for sequences - size_t seqsSize = 2 * (inBufSize / sizeof(ZSTD_Sequence)); + size_t seqsSize = ZSTD_sequenceBound(inBufSize); ZSTD_Sequence *seqs = (ZSTD_Sequence*)malloc(seqsSize * sizeof(ZSTD_Sequence)); char *outBuf = malloc(ZSTD_compressBound(inBufSize));