feat(params): move context-free getters into Rust
Compression-parameter table selection and adjustment were already implemented as Rust leaves, but the internal and public ZSTD_getCParams/ZSTD_getParams helpers still assembled those results in the C translation unit. That left source-size and dictionary-mode policy duplicated at the C/Rust boundary. Add Rust implementations for the internal and public getter policies. The internal helpers preserve a zero source size as a known empty input, while the public helpers retain the API rule that zero means unknown. The C side keeps only the build-specific exclusion-mask construction and thin ABI adapters, so reduced builds continue to select the same available strategy cascade. Test Plan: - `cargo test --manifest-path rust/Cargo.toml --lib -- --test-threads=1` -- passed (411 tests). - `cargo clippy --manifest-path rust/Cargo.toml --lib -- -D warnings` -- passed. - `cargo +nightly fmt --manifest-path rust/Cargo.toml -- --check` -- passed. - `make -B -C lib -j2 lib` -- passed. - Focused tests cover public zero-to-unknown translation, internal zero semantics, default frame parameters, and dictionary attachment modes.
This commit is contained in:
@@ -148,6 +148,18 @@ ZSTD_compressionParameters
|
||||
ZSTD_rust_params_adjustCParams(ZSTD_compressionParameters cParams, U64 srcSize,
|
||||
size_t dictSize, int mode,
|
||||
int useRowMatchFinder);
|
||||
ZSTD_compressionParameters ZSTD_rust_params_getCParamsInternal(
|
||||
int compressionLevel, U64 srcSizeHint, size_t dictSize, int mode,
|
||||
U32 exclusionMask);
|
||||
ZSTD_parameters ZSTD_rust_params_getParamsInternal(
|
||||
int compressionLevel, U64 srcSizeHint, size_t dictSize, int mode,
|
||||
U32 exclusionMask);
|
||||
ZSTD_compressionParameters ZSTD_rust_params_getCParams(
|
||||
int compressionLevel, U64 srcSizeHint, size_t dictSize,
|
||||
U32 exclusionMask);
|
||||
ZSTD_parameters ZSTD_rust_params_getParams(
|
||||
int compressionLevel, U64 srcSizeHint, size_t dictSize,
|
||||
U32 exclusionMask);
|
||||
ZSTD_compressionParameters ZSTD_rust_params_applyStrategyExclusions(
|
||||
ZSTD_compressionParameters cParams, U32 exclusionMask);
|
||||
ZSTD_compressionParameters ZSTD_rust_params_getCParamsFromCCtxParams(
|
||||
@@ -5697,12 +5709,9 @@ static void ZSTD_dedicatedDictSearch_revertCParams(
|
||||
* Note: `mode` controls how we treat the `dictSize`. See docs for `ZSTD_CParamMode_e`. */
|
||||
static ZSTD_compressionParameters ZSTD_getCParams_internal(int compressionLevel, unsigned long long srcSizeHint, size_t dictSize, ZSTD_CParamMode_e mode)
|
||||
{
|
||||
/* Table selection is context-free and lives in Rust; the adjustment step
|
||||
* stays behind ZSTD_adjustCParams_internal() so this build's strategy
|
||||
* cascade applies. */
|
||||
ZSTD_compressionParameters const cp = ZSTD_rust_params_selectCParams(
|
||||
compressionLevel, srcSizeHint, dictSize, (int)mode);
|
||||
return ZSTD_adjustCParams_internal(cp, srcSizeHint, dictSize, mode, ZSTD_ps_auto);
|
||||
return ZSTD_rust_params_getCParamsInternal(
|
||||
compressionLevel, srcSizeHint, dictSize, (int)mode,
|
||||
ZSTD_getCParamsExclusionMask());
|
||||
}
|
||||
|
||||
/*! ZSTD_getCParams() :
|
||||
@@ -5710,8 +5719,9 @@ static ZSTD_compressionParameters ZSTD_getCParams_internal(int compressionLevel,
|
||||
* Size values are optional, provide 0 if not known or unused */
|
||||
ZSTD_compressionParameters ZSTD_getCParams(int compressionLevel, unsigned long long srcSizeHint, size_t dictSize)
|
||||
{
|
||||
if (srcSizeHint == 0) srcSizeHint = ZSTD_CONTENTSIZE_UNKNOWN;
|
||||
return ZSTD_getCParams_internal(compressionLevel, srcSizeHint, dictSize, ZSTD_cpm_unknown);
|
||||
return ZSTD_rust_params_getCParams(
|
||||
compressionLevel, srcSizeHint, dictSize,
|
||||
ZSTD_getCParamsExclusionMask());
|
||||
}
|
||||
|
||||
/*! ZSTD_getParams() :
|
||||
@@ -5721,9 +5731,10 @@ ZSTD_compressionParameters ZSTD_getCParams(int compressionLevel, unsigned long l
|
||||
static ZSTD_parameters
|
||||
ZSTD_getParams_internal(int compressionLevel, unsigned long long srcSizeHint, size_t dictSize, ZSTD_CParamMode_e mode)
|
||||
{
|
||||
ZSTD_compressionParameters const cParams = ZSTD_getCParams_internal(compressionLevel, srcSizeHint, dictSize, mode);
|
||||
DEBUGLOG(5, "ZSTD_getParams (cLevel=%i)", compressionLevel);
|
||||
return ZSTD_rust_params_makeParams(cParams);
|
||||
return ZSTD_rust_params_getParamsInternal(
|
||||
compressionLevel, srcSizeHint, dictSize, (int)mode,
|
||||
ZSTD_getCParamsExclusionMask());
|
||||
}
|
||||
|
||||
/*! ZSTD_getParams() :
|
||||
@@ -5732,8 +5743,9 @@ ZSTD_getParams_internal(int compressionLevel, unsigned long long srcSizeHint, si
|
||||
* Fields of `ZSTD_frameParameters` are set to default values */
|
||||
ZSTD_parameters ZSTD_getParams(int compressionLevel, unsigned long long srcSizeHint, size_t dictSize)
|
||||
{
|
||||
if (srcSizeHint == 0) srcSizeHint = ZSTD_CONTENTSIZE_UNKNOWN;
|
||||
return ZSTD_getParams_internal(compressionLevel, srcSizeHint, dictSize, ZSTD_cpm_unknown);
|
||||
return ZSTD_rust_params_getParams(
|
||||
compressionLevel, srcSizeHint, dictSize,
|
||||
ZSTD_getCParamsExclusionMask());
|
||||
}
|
||||
|
||||
void ZSTD_registerSequenceProducer(
|
||||
|
||||
Reference in New Issue
Block a user