]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
Allow Different Dict Attachment Cut-Offs for Different Strategies 1151/head
authorW. Felix Handte <w@felixhandte.com>
Fri, 25 May 2018 19:19:37 +0000 (15:19 -0400)
committerW. Felix Handte <w@felixhandte.com>
Thu, 31 May 2018 21:37:44 +0000 (17:37 -0400)
lib/compress/zstd_compress.c

index 46a3fe541c6709b11b1429fd2eeb83c55349f42e..68beea0c904236c94bcd8e95399575c6b574f66c 100644 (file)
@@ -1207,7 +1207,18 @@ static size_t ZSTD_resetCCtx_usingCDict(ZSTD_CCtx* cctx,
     /* We have a choice between copying the dictionary context into the working
      * context, or referencing the dictionary context from the working context
      * in-place. We decide here which strategy to use. */
-    const int attachDict = ( pledgedSrcSize <= 8 KB
+    const U64 attachDictSizeCutoffs[(unsigned)ZSTD_btultra+1] = {
+        8 KB, /* unused */
+        8 KB, /* ZSTD_fast */
+        16 KB, /* ZSTD_dfast */
+        16 KB, /* ZSTD_greedy */
+        16 KB, /* ZSTD_lazy */
+        16 KB, /* ZSTD_lazy2 */
+        16 KB, /* ZSTD_btlazy2 */
+        16 KB, /* ZSTD_btopt */
+        16 KB /* ZSTD_btultra */
+    };
+    const int attachDict = ( pledgedSrcSize <= attachDictSizeCutoffs[cdict->cParams.strategy]
                           || pledgedSrcSize == ZSTD_CONTENTSIZE_UNKNOWN )
                         && !params.forceWindow /* dictMatchState isn't correctly
                                                 * handled in _enforceMaxDist */