From: Yann Collet Date: Tue, 26 Jun 2018 19:04:59 +0000 (-0700) Subject: updated DEBUG_STATIC_ASSERT() X-Git-Tag: v1.3.5~3^2~1^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f98ec469792ed1ca5c6e9050bad63365dd49741f;p=thirdparty%2Fzstd.git updated DEBUG_STATIC_ASSERT() following suggestion from #1209 --- diff --git a/doc/zstd_manual.html b/doc/zstd_manual.html index 6bf731dd9..bd792008b 100644 --- a/doc/zstd_manual.html +++ b/doc/zstd_manual.html @@ -872,6 +872,28 @@ size_t ZSTD_decodingBufferSize_min(unsigned long long windowSize, unsigned long ZSTD_p_forceMaxWindow=1100, /* Force back-reference distances to remain < windowSize, * even when referencing into Dictionary content (default:0) */ + ZSTD_p_forceAttachDict, /* ZSTD supports usage of a CDict in-place + * (avoiding having to copy the compression tables + * from the CDict into the working context). Using + * a CDict in this way saves an initial setup step, + * but comes at the cost of more work per byte of + * input. ZSTD has a simple internal heuristic that + * guesses which strategy will be faster. You can + * use this flag to override that guess. + * + * Note that the by-reference, in-place strategy is + * only used when reusing a compression context + * with compatible compression parameters. (If + * incompatible / uninitialized, the working + * context needs to be cleared anyways, which is + * about as expensive as overwriting it with the + * dictionary context, so there's no savings in + * using the CDict by-ref.) + * + * Values greater than 0 force attaching the dict. + * Values less than 0 force copying the dict. + * 0 selects the default heuristic-guided behavior. + */ } ZSTD_cParameter;
diff --git a/lib/common/debug.h b/lib/common/debug.h index 95a3fcabe..9b5878cfc 100644 --- a/lib/common/debug.h +++ b/lib/common/debug.h @@ -35,9 +35,10 @@ /* * The purpose of this header is to enable debug functions. - * They regroup assert(), DEBUGLOG() and RAWLOG(). + * They regroup assert(), DEBUGLOG() and RAWLOG() for run-time, + * and DEBUG_STATIC_ASSERT() for compile-time. * - * By default, DEBUGLEVEL==0, which means debug is disabled. + * By default, DEBUGLEVEL==0, which means run-time debug is disabled. * * Level 1 enables assert() only. * Starting level 2, traces can be generated and pushed to stderr. @@ -58,7 +59,7 @@ extern "C" { /* static assert is triggered at compile time, leaving no runtime artefact, * but can only work with compile-time constants */ -#define DEBUG_STATIC_ASSERT(c) { enum { DEBUG_static_assert = 1/(int)(!!(c)) }; } +#define DEBUG_STATIC_ASSERT(c) { extern char DEBUG_static_assert[(c) ? 1 : -1]; } /* DEBUGLEVEL is expected to be defined externally, @@ -69,7 +70,7 @@ extern "C" { #endif /* recommended values for DEBUGLEVEL : - * 0 : no debug, all functions disabled (except DEBUG_STATIC_ASSERT) + * 0 : no debug, all run-time functions disabled * 1 : no display, enables assert() only * 2 : reserved, for currently active debug path * 3 : events once per object lifetime (CCtx, CDict, etc.)