]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
refactor ZSTD_check_compressionLevel_monotonicIncrease_memoryBudget() 739/head
authorYann Collet <cyan@fb.com>
Thu, 29 Jun 2017 03:17:22 +0000 (20:17 -0700)
committerYann Collet <cyan@fb.com>
Thu, 29 Jun 2017 03:24:08 +0000 (20:24 -0700)
use less macro statements
the initial version was meant to work with STATIC_ASSERT
but since it doesn't work and needs assert()
it's possible to rewrite it using normally compiled code
which is better for compiler.

Downside : the error message is less precise.
There is a DEBUGLOG(3,) to compensate.

doc/zstd_manual.html
lib/compress/zstd_compress.c

index 683b70e808821ce472a3afb10ceceb218645b257..cd2b06dd8309c9dce293eee01190ee1992282549 100644 (file)
@@ -412,7 +412,7 @@ size_t ZSTD_estimateCCtxSize_advanced(ZSTD_compressionParameters cParams);
 size_t ZSTD_estimateDCtxSize(void);
 </b><p>  These functions make it possible to estimate memory usage
   of a future {D,C}Ctx, before its creation.
-  ZSTD_estimateCCtxSize() will provide a budget large for any compression level up to selected one.
+  ZSTD_estimateCCtxSize() will provide a budget large enough for any compression level up to selected one.
   It will also consider src size to be arbitrarily "large", which is worst case.
   If srcSize is known to always be small, ZSTD_estimateCCtxSize_advanced() can provide a tighter estimation.
   ZSTD_estimateCCtxSize_advanced() can be used in tandem with ZSTD_getCParams() to create cParams from compressionLevel.
@@ -423,7 +423,7 @@ size_t ZSTD_estimateDCtxSize(void);
 size_t ZSTD_estimateCStreamSize_advanced(ZSTD_compressionParameters cParams);
 size_t ZSTD_estimateDStreamSize(size_t windowSize);
 size_t ZSTD_estimateDStreamSize_fromFrame(const void* src, size_t srcSize);
-</b><p>  ZSTD_estimateCStreamSize() will provide a budget large for any compression level up to selected one.
+</b><p>  ZSTD_estimateCStreamSize() will provide a budget large enough for any compression level up to selected one.
   It will also consider src size to be arbitrarily "large", which is worst case.
   If srcSize is known to always be small, ZSTD_estimateCStreamSize_advanced() can provide a tighter estimation.
   ZSTD_estimateCStreamSize_advanced() can be used in tandem with ZSTD_getCParams() to create cParams from compressionLevel.
index b396311d34126647b4b70e400cf1a3e3ece19dcd..f492d92bdab360f17b841a5212864c5e57b97d2a 100644 (file)
@@ -4115,42 +4115,24 @@ static const ZSTD_compressionParameters ZSTD_defaultCParameters[4][ZSTD_MAX_CLEV
 },
 };
 
+#if defined(ZSTD_DEBUG) && (ZSTD_DEBUG>=1)
 /* This function just controls
  * the monotonic memory budget increase of ZSTD_defaultCParameters[0].
  * Run only once, on first ZSTD_getCParams() usage, when ZSTD_DEBUG is enabled
  */
 MEM_STATIC void ZSTD_check_compressionLevel_monotonicIncrease_memoryBudget(void)
 {
-#   define ZSTD_TABLECOST(h,c) ((1<<(h)) + (1<<(c)))
-#   define ZDCP_FIELD(l,field) (ZSTD_defaultCParameters[0][l].field)
-#   define ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(l) { \
-        assert(ZDCP_FIELD(l,windowLog) <= ZDCP_FIELD(l+1,windowLog) );  \
-        assert(ZSTD_TABLECOST(ZDCP_FIELD(l,hashLog), ZDCP_FIELD(l,chainLog)) <= ZSTD_TABLECOST(ZDCP_FIELD(l+1,hashLog), ZDCP_FIELD(l+1,chainLog)) ); \
+    int level;
+    for (level=1; level<ZSTD_maxCLevel(); level++) {
+        ZSTD_compressionParameters const c1 = ZSTD_defaultCParameters[0][level];
+        ZSTD_compressionParameters const c2 = ZSTD_defaultCParameters[0][level+1];
+        DEBUGLOG(3, "controlling compression params level %i", level);
+        assert(c1.windowLog <= c2.windowLog);
+#       define ZSTD_TABLECOST(h,c) ((1<<(h)) + (1<<(c)))
+        assert(ZSTD_TABLECOST(c1.hashLog, c1.chainLog) <= ZSTD_TABLECOST(c2.hashLog, c2.chainLog));
     }
-
-    ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(1);
-    ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(2);
-    ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(3);
-    ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(4);
-    ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(5);
-    ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(6);
-    ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(7);
-    ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(8);
-    ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(9);
-    ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(10);
-    ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(11);
-    ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(12);
-    ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(13);
-    ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(14);
-    ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(15);
-    ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(16);
-    ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(17);
-    ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(18);
-    ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(19);
-    ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(20);
-    ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(21);
-    assert(ZSTD_maxCLevel()==22);
 }
+#endif
 
 /*! ZSTD_getCParams() :
 *   @return ZSTD_compressionParameters structure for a selected compression level, `srcSize` and `dictSize`.