1*3117ece4Schristos /* 2*3117ece4Schristos * Copyright (c) Meta Platforms, Inc. and affiliates. 3*3117ece4Schristos * All rights reserved. 4*3117ece4Schristos * 5*3117ece4Schristos * This source code is licensed under both the BSD-style license (found in the 6*3117ece4Schristos * LICENSE file in the root directory of this source tree) and the GPLv2 (found 7*3117ece4Schristos * in the COPYING file in the root directory of this source tree). 8*3117ece4Schristos * You may select, at your option, one of the above-listed licenses. 9*3117ece4Schristos */ 10*3117ece4Schristos 11*3117ece4Schristos #include "config.h" 12*3117ece4Schristos 13*3117ece4Schristos /* Define a config for each fast level we want to test with. */ 14*3117ece4Schristos #define FAST_LEVEL(x) \ 15*3117ece4Schristos param_value_t const level_fast##x##_param_values[] = { \ 16*3117ece4Schristos {.param = ZSTD_c_compressionLevel, .value = -x}, \ 17*3117ece4Schristos }; \ 18*3117ece4Schristos config_t const level_fast##x = { \ 19*3117ece4Schristos .name = "level -" #x, \ 20*3117ece4Schristos .cli_args = "--fast=" #x, \ 21*3117ece4Schristos .param_values = PARAM_VALUES(level_fast##x##_param_values), \ 22*3117ece4Schristos }; \ 23*3117ece4Schristos config_t const level_fast##x##_dict = { \ 24*3117ece4Schristos .name = "level -" #x " with dict", \ 25*3117ece4Schristos .cli_args = "--fast=" #x, \ 26*3117ece4Schristos .param_values = PARAM_VALUES(level_fast##x##_param_values), \ 27*3117ece4Schristos .use_dictionary = 1, \ 28*3117ece4Schristos }; 29*3117ece4Schristos 30*3117ece4Schristos /* Define a config for each level we want to test with. */ 31*3117ece4Schristos #define LEVEL(x) \ 32*3117ece4Schristos param_value_t const level_##x##_param_values[] = { \ 33*3117ece4Schristos {.param = ZSTD_c_compressionLevel, .value = x}, \ 34*3117ece4Schristos }; \ 35*3117ece4Schristos param_value_t const level_##x##_param_values_dms[] = { \ 36*3117ece4Schristos {.param = ZSTD_c_compressionLevel, .value = x}, \ 37*3117ece4Schristos {.param = ZSTD_c_enableDedicatedDictSearch, .value = 0}, \ 38*3117ece4Schristos {.param = ZSTD_c_forceAttachDict, .value = ZSTD_dictForceAttach}, \ 39*3117ece4Schristos }; \ 40*3117ece4Schristos param_value_t const level_##x##_param_values_dds[] = { \ 41*3117ece4Schristos {.param = ZSTD_c_compressionLevel, .value = x}, \ 42*3117ece4Schristos {.param = ZSTD_c_enableDedicatedDictSearch, .value = 1}, \ 43*3117ece4Schristos {.param = ZSTD_c_forceAttachDict, .value = ZSTD_dictForceAttach}, \ 44*3117ece4Schristos }; \ 45*3117ece4Schristos param_value_t const level_##x##_param_values_dictcopy[] = { \ 46*3117ece4Schristos {.param = ZSTD_c_compressionLevel, .value = x}, \ 47*3117ece4Schristos {.param = ZSTD_c_enableDedicatedDictSearch, .value = 0}, \ 48*3117ece4Schristos {.param = ZSTD_c_forceAttachDict, .value = ZSTD_dictForceCopy}, \ 49*3117ece4Schristos }; \ 50*3117ece4Schristos param_value_t const level_##x##_param_values_dictload[] = { \ 51*3117ece4Schristos {.param = ZSTD_c_compressionLevel, .value = x}, \ 52*3117ece4Schristos {.param = ZSTD_c_enableDedicatedDictSearch, .value = 0}, \ 53*3117ece4Schristos {.param = ZSTD_c_forceAttachDict, .value = ZSTD_dictForceLoad}, \ 54*3117ece4Schristos }; \ 55*3117ece4Schristos config_t const level_##x = { \ 56*3117ece4Schristos .name = "level " #x, \ 57*3117ece4Schristos .cli_args = "-" #x, \ 58*3117ece4Schristos .param_values = PARAM_VALUES(level_##x##_param_values), \ 59*3117ece4Schristos }; \ 60*3117ece4Schristos config_t const level_##x##_dict = { \ 61*3117ece4Schristos .name = "level " #x " with dict", \ 62*3117ece4Schristos .cli_args = "-" #x, \ 63*3117ece4Schristos .param_values = PARAM_VALUES(level_##x##_param_values), \ 64*3117ece4Schristos .use_dictionary = 1, \ 65*3117ece4Schristos }; \ 66*3117ece4Schristos config_t const level_##x##_dict_dms = { \ 67*3117ece4Schristos .name = "level " #x " with dict dms", \ 68*3117ece4Schristos .cli_args = "-" #x, \ 69*3117ece4Schristos .param_values = PARAM_VALUES(level_##x##_param_values_dms), \ 70*3117ece4Schristos .use_dictionary = 1, \ 71*3117ece4Schristos .advanced_api_only = 1, \ 72*3117ece4Schristos }; \ 73*3117ece4Schristos config_t const level_##x##_dict_dds = { \ 74*3117ece4Schristos .name = "level " #x " with dict dds", \ 75*3117ece4Schristos .cli_args = "-" #x, \ 76*3117ece4Schristos .param_values = PARAM_VALUES(level_##x##_param_values_dds), \ 77*3117ece4Schristos .use_dictionary = 1, \ 78*3117ece4Schristos .advanced_api_only = 1, \ 79*3117ece4Schristos }; \ 80*3117ece4Schristos config_t const level_##x##_dict_copy = { \ 81*3117ece4Schristos .name = "level " #x " with dict copy", \ 82*3117ece4Schristos .cli_args = "-" #x, \ 83*3117ece4Schristos .param_values = PARAM_VALUES(level_##x##_param_values_dictcopy), \ 84*3117ece4Schristos .use_dictionary = 1, \ 85*3117ece4Schristos .advanced_api_only = 1, \ 86*3117ece4Schristos }; \ 87*3117ece4Schristos config_t const level_##x##_dict_load = { \ 88*3117ece4Schristos .name = "level " #x " with dict load", \ 89*3117ece4Schristos .cli_args = "-" #x, \ 90*3117ece4Schristos .param_values = PARAM_VALUES(level_##x##_param_values_dictload), \ 91*3117ece4Schristos .use_dictionary = 1, \ 92*3117ece4Schristos .advanced_api_only = 1, \ 93*3117ece4Schristos }; 94*3117ece4Schristos 95*3117ece4Schristos /* Define a config specifically to test row hash based levels and settings. 96*3117ece4Schristos */ 97*3117ece4Schristos #define ROW_LEVEL(x, y) \ 98*3117ece4Schristos param_value_t const row_##y##_level_##x##_param_values[] = { \ 99*3117ece4Schristos {.param = ZSTD_c_useRowMatchFinder, .value = y}, \ 100*3117ece4Schristos {.param = ZSTD_c_compressionLevel, .value = x}, \ 101*3117ece4Schristos }; \ 102*3117ece4Schristos param_value_t const row_##y##_level_##x##_param_values_dms[] = { \ 103*3117ece4Schristos {.param = ZSTD_c_useRowMatchFinder, .value = y}, \ 104*3117ece4Schristos {.param = ZSTD_c_compressionLevel, .value = x}, \ 105*3117ece4Schristos {.param = ZSTD_c_enableDedicatedDictSearch, .value = 0}, \ 106*3117ece4Schristos {.param = ZSTD_c_forceAttachDict, .value = ZSTD_dictForceAttach}, \ 107*3117ece4Schristos }; \ 108*3117ece4Schristos param_value_t const row_##y##_level_##x##_param_values_dds[] = { \ 109*3117ece4Schristos {.param = ZSTD_c_useRowMatchFinder, .value = y}, \ 110*3117ece4Schristos {.param = ZSTD_c_compressionLevel, .value = x}, \ 111*3117ece4Schristos {.param = ZSTD_c_enableDedicatedDictSearch, .value = 1}, \ 112*3117ece4Schristos {.param = ZSTD_c_forceAttachDict, .value = ZSTD_dictForceAttach}, \ 113*3117ece4Schristos }; \ 114*3117ece4Schristos param_value_t const row_##y##_level_##x##_param_values_dictcopy[] = { \ 115*3117ece4Schristos {.param = ZSTD_c_useRowMatchFinder, .value = y}, \ 116*3117ece4Schristos {.param = ZSTD_c_compressionLevel, .value = x}, \ 117*3117ece4Schristos {.param = ZSTD_c_enableDedicatedDictSearch, .value = 0}, \ 118*3117ece4Schristos {.param = ZSTD_c_forceAttachDict, .value = ZSTD_dictForceCopy}, \ 119*3117ece4Schristos }; \ 120*3117ece4Schristos param_value_t const row_##y##_level_##x##_param_values_dictload[] = { \ 121*3117ece4Schristos {.param = ZSTD_c_useRowMatchFinder, .value = y}, \ 122*3117ece4Schristos {.param = ZSTD_c_compressionLevel, .value = x}, \ 123*3117ece4Schristos {.param = ZSTD_c_enableDedicatedDictSearch, .value = 0}, \ 124*3117ece4Schristos {.param = ZSTD_c_forceAttachDict, .value = ZSTD_dictForceLoad}, \ 125*3117ece4Schristos }; \ 126*3117ece4Schristos config_t const row_##y##_level_##x = { \ 127*3117ece4Schristos .name = "level " #x " row " #y, \ 128*3117ece4Schristos .cli_args = "-" #x, \ 129*3117ece4Schristos .param_values = PARAM_VALUES(row_##y##_level_##x##_param_values), \ 130*3117ece4Schristos .advanced_api_only = 1, \ 131*3117ece4Schristos }; \ 132*3117ece4Schristos config_t const row_##y##_level_##x##_dict_dms = { \ 133*3117ece4Schristos .name = "level " #x " row " #y " with dict dms", \ 134*3117ece4Schristos .cli_args = "-" #x, \ 135*3117ece4Schristos .param_values = PARAM_VALUES(row_##y##_level_##x##_param_values_dms), \ 136*3117ece4Schristos .use_dictionary = 1, \ 137*3117ece4Schristos .advanced_api_only = 1, \ 138*3117ece4Schristos }; \ 139*3117ece4Schristos config_t const row_##y##_level_##x##_dict_dds = { \ 140*3117ece4Schristos .name = "level " #x " row " #y " with dict dds", \ 141*3117ece4Schristos .cli_args = "-" #x, \ 142*3117ece4Schristos .param_values = PARAM_VALUES(row_##y##_level_##x##_param_values_dds), \ 143*3117ece4Schristos .use_dictionary = 1, \ 144*3117ece4Schristos .advanced_api_only = 1, \ 145*3117ece4Schristos }; \ 146*3117ece4Schristos config_t const row_##y##_level_##x##_dict_copy = { \ 147*3117ece4Schristos .name = "level " #x " row " #y" with dict copy", \ 148*3117ece4Schristos .cli_args = "-" #x, \ 149*3117ece4Schristos .param_values = PARAM_VALUES(row_##y##_level_##x##_param_values_dictcopy), \ 150*3117ece4Schristos .use_dictionary = 1, \ 151*3117ece4Schristos .advanced_api_only = 1, \ 152*3117ece4Schristos }; \ 153*3117ece4Schristos config_t const row_##y##_level_##x##_dict_load = { \ 154*3117ece4Schristos .name = "level " #x " row " #y " with dict load", \ 155*3117ece4Schristos .cli_args = "-" #x, \ 156*3117ece4Schristos .param_values = PARAM_VALUES(row_##y##_level_##x##_param_values_dictload), \ 157*3117ece4Schristos .use_dictionary = 1, \ 158*3117ece4Schristos .advanced_api_only = 1, \ 159*3117ece4Schristos }; 160*3117ece4Schristos 161*3117ece4Schristos #define PARAM_VALUES(pv) \ 162*3117ece4Schristos { .data = pv, .size = sizeof(pv) / sizeof((pv)[0]) } 163*3117ece4Schristos 164*3117ece4Schristos #include "levels.h" 165*3117ece4Schristos 166*3117ece4Schristos #undef LEVEL 167*3117ece4Schristos #undef FAST_LEVEL 168*3117ece4Schristos #undef ROW_LEVEL 169*3117ece4Schristos 170*3117ece4Schristos static config_t no_pledged_src_size = { 171*3117ece4Schristos .name = "no source size", 172*3117ece4Schristos .cli_args = "", 173*3117ece4Schristos .param_values = PARAM_VALUES(level_0_param_values), 174*3117ece4Schristos .no_pledged_src_size = 1, 175*3117ece4Schristos }; 176*3117ece4Schristos 177*3117ece4Schristos static config_t no_pledged_src_size_with_dict = { 178*3117ece4Schristos .name = "no source size with dict", 179*3117ece4Schristos .cli_args = "", 180*3117ece4Schristos .param_values = PARAM_VALUES(level_0_param_values), 181*3117ece4Schristos .no_pledged_src_size = 1, 182*3117ece4Schristos .use_dictionary = 1, 183*3117ece4Schristos }; 184*3117ece4Schristos 185*3117ece4Schristos static param_value_t const ldm_param_values[] = { 186*3117ece4Schristos {.param = ZSTD_c_enableLongDistanceMatching, .value = ZSTD_ps_enable}, 187*3117ece4Schristos }; 188*3117ece4Schristos 189*3117ece4Schristos static config_t ldm = { 190*3117ece4Schristos .name = "long distance mode", 191*3117ece4Schristos .cli_args = "--long", 192*3117ece4Schristos .param_values = PARAM_VALUES(ldm_param_values), 193*3117ece4Schristos }; 194*3117ece4Schristos 195*3117ece4Schristos static param_value_t const mt_param_values[] = { 196*3117ece4Schristos {.param = ZSTD_c_nbWorkers, .value = 2}, 197*3117ece4Schristos }; 198*3117ece4Schristos 199*3117ece4Schristos static config_t mt = { 200*3117ece4Schristos .name = "multithreaded", 201*3117ece4Schristos .cli_args = "-T2", 202*3117ece4Schristos .param_values = PARAM_VALUES(mt_param_values), 203*3117ece4Schristos }; 204*3117ece4Schristos 205*3117ece4Schristos static param_value_t const mt_ldm_param_values[] = { 206*3117ece4Schristos {.param = ZSTD_c_nbWorkers, .value = 2}, 207*3117ece4Schristos {.param = ZSTD_c_enableLongDistanceMatching, .value = ZSTD_ps_enable}, 208*3117ece4Schristos }; 209*3117ece4Schristos 210*3117ece4Schristos static config_t mt_ldm = { 211*3117ece4Schristos .name = "multithreaded long distance mode", 212*3117ece4Schristos .cli_args = "-T2 --long", 213*3117ece4Schristos .param_values = PARAM_VALUES(mt_ldm_param_values), 214*3117ece4Schristos }; 215*3117ece4Schristos 216*3117ece4Schristos static param_value_t mt_advanced_param_values[] = { 217*3117ece4Schristos {.param = ZSTD_c_nbWorkers, .value = 2}, 218*3117ece4Schristos {.param = ZSTD_c_literalCompressionMode, .value = ZSTD_ps_disable}, 219*3117ece4Schristos }; 220*3117ece4Schristos 221*3117ece4Schristos static config_t mt_advanced = { 222*3117ece4Schristos .name = "multithreaded with advanced params", 223*3117ece4Schristos .cli_args = "-T2 --no-compress-literals", 224*3117ece4Schristos .param_values = PARAM_VALUES(mt_advanced_param_values), 225*3117ece4Schristos }; 226*3117ece4Schristos 227*3117ece4Schristos static param_value_t const small_wlog_param_values[] = { 228*3117ece4Schristos {.param = ZSTD_c_windowLog, .value = 10}, 229*3117ece4Schristos }; 230*3117ece4Schristos 231*3117ece4Schristos static config_t small_wlog = { 232*3117ece4Schristos .name = "small window log", 233*3117ece4Schristos .cli_args = "--zstd=wlog=10", 234*3117ece4Schristos .param_values = PARAM_VALUES(small_wlog_param_values), 235*3117ece4Schristos }; 236*3117ece4Schristos 237*3117ece4Schristos static param_value_t const small_hlog_param_values[] = { 238*3117ece4Schristos {.param = ZSTD_c_hashLog, .value = 6}, 239*3117ece4Schristos {.param = ZSTD_c_strategy, .value = (int)ZSTD_btopt}, 240*3117ece4Schristos }; 241*3117ece4Schristos 242*3117ece4Schristos static config_t small_hlog = { 243*3117ece4Schristos .name = "small hash log", 244*3117ece4Schristos .cli_args = "--zstd=hlog=6,strat=7", 245*3117ece4Schristos .param_values = PARAM_VALUES(small_hlog_param_values), 246*3117ece4Schristos }; 247*3117ece4Schristos 248*3117ece4Schristos static param_value_t const small_clog_param_values[] = { 249*3117ece4Schristos {.param = ZSTD_c_chainLog, .value = 6}, 250*3117ece4Schristos {.param = ZSTD_c_strategy, .value = (int)ZSTD_btopt}, 251*3117ece4Schristos }; 252*3117ece4Schristos 253*3117ece4Schristos static config_t small_clog = { 254*3117ece4Schristos .name = "small chain log", 255*3117ece4Schristos .cli_args = "--zstd=clog=6,strat=7", 256*3117ece4Schristos .param_values = PARAM_VALUES(small_clog_param_values), 257*3117ece4Schristos }; 258*3117ece4Schristos 259*3117ece4Schristos static param_value_t const uncompressed_literals_param_values[] = { 260*3117ece4Schristos {.param = ZSTD_c_compressionLevel, .value = 3}, 261*3117ece4Schristos {.param = ZSTD_c_literalCompressionMode, .value = ZSTD_ps_disable}, 262*3117ece4Schristos }; 263*3117ece4Schristos 264*3117ece4Schristos static config_t uncompressed_literals = { 265*3117ece4Schristos .name = "uncompressed literals", 266*3117ece4Schristos .cli_args = "-3 --no-compress-literals", 267*3117ece4Schristos .param_values = PARAM_VALUES(uncompressed_literals_param_values), 268*3117ece4Schristos }; 269*3117ece4Schristos 270*3117ece4Schristos static param_value_t const uncompressed_literals_opt_param_values[] = { 271*3117ece4Schristos {.param = ZSTD_c_compressionLevel, .value = 19}, 272*3117ece4Schristos {.param = ZSTD_c_literalCompressionMode, .value = ZSTD_ps_disable}, 273*3117ece4Schristos }; 274*3117ece4Schristos 275*3117ece4Schristos static config_t uncompressed_literals_opt = { 276*3117ece4Schristos .name = "uncompressed literals optimal", 277*3117ece4Schristos .cli_args = "-19 --no-compress-literals", 278*3117ece4Schristos .param_values = PARAM_VALUES(uncompressed_literals_opt_param_values), 279*3117ece4Schristos }; 280*3117ece4Schristos 281*3117ece4Schristos static param_value_t const huffman_literals_param_values[] = { 282*3117ece4Schristos {.param = ZSTD_c_compressionLevel, .value = -1}, 283*3117ece4Schristos {.param = ZSTD_c_literalCompressionMode, .value = ZSTD_ps_enable}, 284*3117ece4Schristos }; 285*3117ece4Schristos 286*3117ece4Schristos static config_t huffman_literals = { 287*3117ece4Schristos .name = "huffman literals", 288*3117ece4Schristos .cli_args = "--fast=1 --compress-literals", 289*3117ece4Schristos .param_values = PARAM_VALUES(huffman_literals_param_values), 290*3117ece4Schristos }; 291*3117ece4Schristos 292*3117ece4Schristos static param_value_t const explicit_params_param_values[] = { 293*3117ece4Schristos {.param = ZSTD_c_checksumFlag, .value = 1}, 294*3117ece4Schristos {.param = ZSTD_c_contentSizeFlag, .value = 0}, 295*3117ece4Schristos {.param = ZSTD_c_dictIDFlag, .value = 0}, 296*3117ece4Schristos {.param = ZSTD_c_strategy, .value = (int)ZSTD_greedy}, 297*3117ece4Schristos {.param = ZSTD_c_windowLog, .value = 18}, 298*3117ece4Schristos {.param = ZSTD_c_hashLog, .value = 21}, 299*3117ece4Schristos {.param = ZSTD_c_chainLog, .value = 21}, 300*3117ece4Schristos {.param = ZSTD_c_targetLength, .value = 100}, 301*3117ece4Schristos }; 302*3117ece4Schristos 303*3117ece4Schristos static config_t explicit_params = { 304*3117ece4Schristos .name = "explicit params", 305*3117ece4Schristos .cli_args = "--no-check --no-dictID --zstd=strategy=3,wlog=18,hlog=21,clog=21,tlen=100", 306*3117ece4Schristos .param_values = PARAM_VALUES(explicit_params_param_values), 307*3117ece4Schristos }; 308*3117ece4Schristos 309*3117ece4Schristos static config_t const* g_configs[] = { 310*3117ece4Schristos 311*3117ece4Schristos #define FAST_LEVEL(x) &level_fast##x, &level_fast##x##_dict, 312*3117ece4Schristos #define LEVEL(x) &level_##x, &level_##x##_dict, &level_##x##_dict_dms, &level_##x##_dict_dds, &level_##x##_dict_copy, &level_##x##_dict_load, 313*3117ece4Schristos #define ROW_LEVEL(x, y) &row_##y##_level_##x, &row_##y##_level_##x##_dict_dms, &row_##y##_level_##x##_dict_dds, &row_##y##_level_##x##_dict_copy, &row_##y##_level_##x##_dict_load, 314*3117ece4Schristos #include "levels.h" 315*3117ece4Schristos #undef ROW_LEVEL 316*3117ece4Schristos #undef LEVEL 317*3117ece4Schristos #undef FAST_LEVEL 318*3117ece4Schristos 319*3117ece4Schristos &no_pledged_src_size, 320*3117ece4Schristos &no_pledged_src_size_with_dict, 321*3117ece4Schristos &ldm, 322*3117ece4Schristos &mt, 323*3117ece4Schristos &mt_ldm, 324*3117ece4Schristos &small_wlog, 325*3117ece4Schristos &small_hlog, 326*3117ece4Schristos &small_clog, 327*3117ece4Schristos &explicit_params, 328*3117ece4Schristos &uncompressed_literals, 329*3117ece4Schristos &uncompressed_literals_opt, 330*3117ece4Schristos &huffman_literals, 331*3117ece4Schristos &mt_advanced, 332*3117ece4Schristos NULL, 333*3117ece4Schristos }; 334*3117ece4Schristos 335*3117ece4Schristos config_t const* const* configs = g_configs; 336*3117ece4Schristos 337*3117ece4Schristos int config_skip_data(config_t const* config, data_t const* data) { 338*3117ece4Schristos return config->use_dictionary && !data_has_dict(data); 339*3117ece4Schristos } 340*3117ece4Schristos 341*3117ece4Schristos int config_get_level(config_t const* config) 342*3117ece4Schristos { 343*3117ece4Schristos param_values_t const params = config->param_values; 344*3117ece4Schristos size_t i; 345*3117ece4Schristos for (i = 0; i < params.size; ++i) { 346*3117ece4Schristos if (params.data[i].param == ZSTD_c_compressionLevel) 347*3117ece4Schristos return (int)params.data[i].value; 348*3117ece4Schristos } 349*3117ece4Schristos return CONFIG_NO_LEVEL; 350*3117ece4Schristos } 351*3117ece4Schristos 352*3117ece4Schristos ZSTD_parameters config_get_zstd_params( 353*3117ece4Schristos config_t const* config, 354*3117ece4Schristos uint64_t srcSize, 355*3117ece4Schristos size_t dictSize) 356*3117ece4Schristos { 357*3117ece4Schristos ZSTD_parameters zparams = {}; 358*3117ece4Schristos param_values_t const params = config->param_values; 359*3117ece4Schristos int level = config_get_level(config); 360*3117ece4Schristos if (level == CONFIG_NO_LEVEL) 361*3117ece4Schristos level = 3; 362*3117ece4Schristos zparams = ZSTD_getParams( 363*3117ece4Schristos level, 364*3117ece4Schristos config->no_pledged_src_size ? ZSTD_CONTENTSIZE_UNKNOWN : srcSize, 365*3117ece4Schristos dictSize); 366*3117ece4Schristos for (size_t i = 0; i < params.size; ++i) { 367*3117ece4Schristos unsigned const value = params.data[i].value; 368*3117ece4Schristos switch (params.data[i].param) { 369*3117ece4Schristos case ZSTD_c_contentSizeFlag: 370*3117ece4Schristos zparams.fParams.contentSizeFlag = value; 371*3117ece4Schristos break; 372*3117ece4Schristos case ZSTD_c_checksumFlag: 373*3117ece4Schristos zparams.fParams.checksumFlag = value; 374*3117ece4Schristos break; 375*3117ece4Schristos case ZSTD_c_dictIDFlag: 376*3117ece4Schristos zparams.fParams.noDictIDFlag = !value; 377*3117ece4Schristos break; 378*3117ece4Schristos case ZSTD_c_windowLog: 379*3117ece4Schristos zparams.cParams.windowLog = value; 380*3117ece4Schristos break; 381*3117ece4Schristos case ZSTD_c_chainLog: 382*3117ece4Schristos zparams.cParams.chainLog = value; 383*3117ece4Schristos break; 384*3117ece4Schristos case ZSTD_c_hashLog: 385*3117ece4Schristos zparams.cParams.hashLog = value; 386*3117ece4Schristos break; 387*3117ece4Schristos case ZSTD_c_searchLog: 388*3117ece4Schristos zparams.cParams.searchLog = value; 389*3117ece4Schristos break; 390*3117ece4Schristos case ZSTD_c_minMatch: 391*3117ece4Schristos zparams.cParams.minMatch = value; 392*3117ece4Schristos break; 393*3117ece4Schristos case ZSTD_c_targetLength: 394*3117ece4Schristos zparams.cParams.targetLength = value; 395*3117ece4Schristos break; 396*3117ece4Schristos case ZSTD_c_strategy: 397*3117ece4Schristos zparams.cParams.strategy = (ZSTD_strategy)value; 398*3117ece4Schristos break; 399*3117ece4Schristos default: 400*3117ece4Schristos break; 401*3117ece4Schristos } 402*3117ece4Schristos } 403*3117ece4Schristos return zparams; 404*3117ece4Schristos } 405