NULL Out Block Compressor Table Entries When Excluded

Don't check about excluding `ZSTD_fast`. It's always included so that we know
we can resolve downwards and hit a strategy that's present.
This commit is contained in:
W. Felix Handte 2023-04-19 12:19:56 -04:00
parent cbf3e26316
commit 81b86a2024

View File

@ -2992,40 +2992,145 @@ ZSTD_blockCompressor ZSTD_selectBlockCompressor(ZSTD_strategy strat, ZSTD_paramS
static const ZSTD_blockCompressor blockCompressor[4][ZSTD_STRATEGY_MAX+1] = {
{ ZSTD_compressBlock_fast /* default for 0 */,
ZSTD_compressBlock_fast,
#ifdef ZSTD_EXCLUDE_DFAST_BLOCK_COMPRESSOR
NULL,
#else
ZSTD_compressBlock_doubleFast,
#endif
#ifdef ZSTD_EXCLUDE_GREEDY_BLOCK_COMPRESSOR
NULL,
#else
ZSTD_compressBlock_greedy,
#endif
#ifdef ZSTD_EXCLUDE_LAZY_BLOCK_COMPRESSOR
NULL,
#else
ZSTD_compressBlock_lazy,
#endif
#ifdef ZSTD_EXCLUDE_LAZY2_BLOCK_COMPRESSOR
NULL,
#else
ZSTD_compressBlock_lazy2,
#endif
#ifdef ZSTD_EXCLUDE_BTLAZY2_BLOCK_COMPRESSOR
NULL,
#else
ZSTD_compressBlock_btlazy2,
#endif
#ifdef ZSTD_EXCLUDE_BTOPT_BLOCK_COMPRESSOR
NULL,
#else
ZSTD_compressBlock_btopt,
#endif
#ifdef ZSTD_EXCLUDE_BTULTRA_BLOCK_COMPRESSOR
NULL,
#else
ZSTD_compressBlock_btultra,
ZSTD_compressBlock_btultra2 },
#endif
#ifdef ZSTD_EXCLUDE_BTULTRA2_BLOCK_COMPRESSOR
NULL
#else
ZSTD_compressBlock_btultra2
#endif
},
{ ZSTD_compressBlock_fast_extDict /* default for 0 */,
ZSTD_compressBlock_fast_extDict,
#ifdef ZSTD_EXCLUDE_DFAST_BLOCK_COMPRESSOR
NULL,
#else
ZSTD_compressBlock_doubleFast_extDict,
#endif
#ifdef ZSTD_EXCLUDE_GREEDY_BLOCK_COMPRESSOR
NULL,
#else
ZSTD_compressBlock_greedy_extDict,
#endif
#ifdef ZSTD_EXCLUDE_LAZY_BLOCK_COMPRESSOR
NULL,
#else
ZSTD_compressBlock_lazy_extDict,
#endif
#ifdef ZSTD_EXCLUDE_LAZY2_BLOCK_COMPRESSOR
NULL,
#else
ZSTD_compressBlock_lazy2_extDict,
#endif
#ifdef ZSTD_EXCLUDE_BTLAZY2_BLOCK_COMPRESSOR
NULL,
#else
ZSTD_compressBlock_btlazy2_extDict,
#endif
#ifdef ZSTD_EXCLUDE_BTOPT_BLOCK_COMPRESSOR
NULL,
#else
ZSTD_compressBlock_btopt_extDict,
#endif
#ifdef ZSTD_EXCLUDE_BTULTRA_BLOCK_COMPRESSOR
NULL,
NULL
#else
ZSTD_compressBlock_btultra_extDict,
ZSTD_compressBlock_btultra_extDict },
ZSTD_compressBlock_btultra_extDict
#endif
},
{ ZSTD_compressBlock_fast_dictMatchState /* default for 0 */,
ZSTD_compressBlock_fast_dictMatchState,
#ifdef ZSTD_EXCLUDE_DFAST_BLOCK_COMPRESSOR
NULL,
#else
ZSTD_compressBlock_doubleFast_dictMatchState,
#endif
#ifdef ZSTD_EXCLUDE_GREEDY_BLOCK_COMPRESSOR
NULL,
#else
ZSTD_compressBlock_greedy_dictMatchState,
#endif
#ifdef ZSTD_EXCLUDE_LAZY_BLOCK_COMPRESSOR
NULL,
#else
ZSTD_compressBlock_lazy_dictMatchState,
#endif
#ifdef ZSTD_EXCLUDE_LAZY2_BLOCK_COMPRESSOR
NULL,
#else
ZSTD_compressBlock_lazy2_dictMatchState,
#endif
#ifdef ZSTD_EXCLUDE_BTLAZY2_BLOCK_COMPRESSOR
NULL,
#else
ZSTD_compressBlock_btlazy2_dictMatchState,
#endif
#ifdef ZSTD_EXCLUDE_BTOPT_BLOCK_COMPRESSOR
NULL,
#else
ZSTD_compressBlock_btopt_dictMatchState,
#endif
#ifdef ZSTD_EXCLUDE_BTULTRA_BLOCK_COMPRESSOR
NULL,
NULL
#else
ZSTD_compressBlock_btultra_dictMatchState,
ZSTD_compressBlock_btultra_dictMatchState },
ZSTD_compressBlock_btultra_dictMatchState
#endif
},
{ NULL /* default for 0 */,
NULL,
NULL,
#ifdef ZSTD_EXCLUDE_GREEDY_BLOCK_COMPRESSOR
NULL,
#else
ZSTD_compressBlock_greedy_dedicatedDictSearch,
#endif
#ifdef ZSTD_EXCLUDE_LAZY_BLOCK_COMPRESSOR
NULL,
#else
ZSTD_compressBlock_lazy_dedicatedDictSearch,
#endif
#ifdef ZSTD_EXCLUDE_LAZY2_BLOCK_COMPRESSOR
NULL,
#else
ZSTD_compressBlock_lazy2_dedicatedDictSearch,
#endif
NULL,
NULL,
NULL,
@ -3038,18 +3143,74 @@ ZSTD_blockCompressor ZSTD_selectBlockCompressor(ZSTD_strategy strat, ZSTD_paramS
DEBUGLOG(4, "Selected block compressor: dictMode=%d strat=%d rowMatchfinder=%d", (int)dictMode, (int)strat, (int)useRowMatchFinder);
if (ZSTD_rowMatchFinderUsed(strat, useRowMatchFinder)) {
static const ZSTD_blockCompressor rowBasedBlockCompressors[4][3] = {
{ ZSTD_compressBlock_greedy_row,
ZSTD_compressBlock_lazy_row,
ZSTD_compressBlock_lazy2_row },
{ ZSTD_compressBlock_greedy_extDict_row,
ZSTD_compressBlock_lazy_extDict_row,
ZSTD_compressBlock_lazy2_extDict_row },
{ ZSTD_compressBlock_greedy_dictMatchState_row,
ZSTD_compressBlock_lazy_dictMatchState_row,
ZSTD_compressBlock_lazy2_dictMatchState_row },
{ ZSTD_compressBlock_greedy_dedicatedDictSearch_row,
ZSTD_compressBlock_lazy_dedicatedDictSearch_row,
ZSTD_compressBlock_lazy2_dedicatedDictSearch_row }
{
#ifdef ZSTD_EXCLUDE_GREEDY_BLOCK_COMPRESSOR
NULL,
#else
ZSTD_compressBlock_greedy_row,
#endif
#ifdef ZSTD_EXCLUDE_LAZY_BLOCK_COMPRESSOR
NULL,
#else
ZSTD_compressBlock_lazy_row,
#endif
#ifdef ZSTD_EXCLUDE_LAZY2_BLOCK_COMPRESSOR
NULL,
#else
ZSTD_compressBlock_lazy2_row
#endif
},
{
#ifdef ZSTD_EXCLUDE_GREEDY_BLOCK_COMPRESSOR
NULL,
#else
ZSTD_compressBlock_greedy_extDict_row,
#endif
#ifdef ZSTD_EXCLUDE_LAZY_BLOCK_COMPRESSOR
NULL,
#else
ZSTD_compressBlock_lazy_extDict_row,
#endif
#ifdef ZSTD_EXCLUDE_LAZY2_BLOCK_COMPRESSOR
NULL,
#else
ZSTD_compressBlock_lazy2_extDict_row
#endif
},
{
#ifdef ZSTD_EXCLUDE_GREEDY_BLOCK_COMPRESSOR
NULL,
#else
ZSTD_compressBlock_greedy_dictMatchState_row,
#endif
#ifdef ZSTD_EXCLUDE_LAZY_BLOCK_COMPRESSOR
NULL,
#else
ZSTD_compressBlock_lazy_dictMatchState_row,
#endif
#ifdef ZSTD_EXCLUDE_LAZY2_BLOCK_COMPRESSOR
NULL,
#else
ZSTD_compressBlock_lazy2_dictMatchState_row
#endif
},
{
#ifdef ZSTD_EXCLUDE_GREEDY_BLOCK_COMPRESSOR
NULL,
#else
ZSTD_compressBlock_greedy_dedicatedDictSearch_row,
#endif
#ifdef ZSTD_EXCLUDE_LAZY_BLOCK_COMPRESSOR
NULL,
#else
ZSTD_compressBlock_lazy_dedicatedDictSearch_row,
#endif
#ifdef ZSTD_EXCLUDE_LAZY2_BLOCK_COMPRESSOR
NULL,
#else
ZSTD_compressBlock_lazy2_dedicatedDictSearch_row
#endif
}
};
DEBUGLOG(4, "Selecting a row-based matchfinder");
assert(useRowMatchFinder != ZSTD_ps_auto);