feat(compress): move CDict constructor policy into Rust
Move regular and by-reference CDict parameter selection and default-level normalization behind a Rust-owned boundary. Keep advanced allocation, private workspace setup, and CDict scalar publication in C callbacks. Test Plan: - ulimit -v 41943040; CARGO_BUILD_JOBS=1 cargo test --manifest-path rust/Cargo.toml --release create_cdict -- --nocapture - ulimit -v 41943040; CARGO_BUILD_JOBS=1 cargo test --manifest-path rust/Cargo.toml --release - ulimit -v 41943040; CARGO_BUILD_JOBS=1 cargo clippy --manifest-path rust/Cargo.toml --release --all-targets -- -D warnings - ulimit -v 41943040; make -B -C programs -j1 zstd - ulimit -v 41943040; make -C tests -j1 test-zstream ZSTREAM_TESTTIME=-T1s
This commit is contained in:
@@ -344,6 +344,30 @@ typedef char ZSTD_rust_create_cctx_state_layout[
|
||||
== 4 * sizeof(void*)
|
||||
&& sizeof(ZSTD_rust_createCCtxState) == 5 * sizeof(void*))
|
||||
? 1 : -1];
|
||||
typedef void* (*ZSTD_rust_createCDictCreate_f)(
|
||||
void* context, const void* dict, size_t dictSize,
|
||||
int dictLoadMethod, int dictContentType,
|
||||
const ZSTD_compressionParameters* cParams);
|
||||
typedef void (*ZSTD_rust_createCDictSetCompressionLevel_f)(
|
||||
void* context, void* cdict, int compressionLevel);
|
||||
typedef struct {
|
||||
void* callbackContext;
|
||||
const U32* exclusionMask;
|
||||
ZSTD_rust_createCDictCreate_f create;
|
||||
ZSTD_rust_createCDictSetCompressionLevel_f setCompressionLevel;
|
||||
} ZSTD_rust_createCDictState;
|
||||
void* ZSTD_rust_createCDict(
|
||||
const ZSTD_rust_createCDictState* state,
|
||||
const void* dict, size_t dictSize,
|
||||
int compressionLevel, int dictLoadMethod);
|
||||
typedef char ZSTD_rust_create_cdict_state_layout[
|
||||
(offsetof(ZSTD_rust_createCDictState, callbackContext) == 0
|
||||
&& offsetof(ZSTD_rust_createCDictState, exclusionMask) == sizeof(void*)
|
||||
&& offsetof(ZSTD_rust_createCDictState, create) == 2 * sizeof(void*)
|
||||
&& offsetof(ZSTD_rust_createCDictState, setCompressionLevel)
|
||||
== 3 * sizeof(void*)
|
||||
&& sizeof(ZSTD_rust_createCDictState) == 4 * sizeof(void*))
|
||||
? 1 : -1];
|
||||
typedef void (*ZSTD_rust_resetCCtxClearAllDicts_f)(void* context);
|
||||
typedef size_t (*ZSTD_rust_resetCCtxResetParams_f)(void* context);
|
||||
typedef struct {
|
||||
@@ -5479,26 +5503,48 @@ ZSTD_CDict* ZSTD_createCDict_advanced2(
|
||||
return cdict;
|
||||
}
|
||||
|
||||
static void* ZSTD_rust_createCDict_create(
|
||||
void* context, const void* dict, size_t dictSize,
|
||||
int dictLoadMethod, int dictContentType,
|
||||
const ZSTD_compressionParameters* cParams)
|
||||
{
|
||||
(void)context;
|
||||
return ZSTD_createCDict_advanced(
|
||||
dict, dictSize,
|
||||
(ZSTD_dictLoadMethod_e)dictLoadMethod,
|
||||
(ZSTD_dictContentType_e)dictContentType,
|
||||
*cParams, ZSTD_defaultCMem);
|
||||
}
|
||||
|
||||
static void ZSTD_rust_createCDict_setCompressionLevel(
|
||||
void* context, void* cdict, int compressionLevel)
|
||||
{
|
||||
(void)context;
|
||||
((ZSTD_CDict*)cdict)->compressionLevel = compressionLevel;
|
||||
}
|
||||
|
||||
ZSTD_CDict* ZSTD_createCDict(const void* dict, size_t dictSize, int compressionLevel)
|
||||
{
|
||||
ZSTD_compressionParameters cParams = ZSTD_getCParams_internal(compressionLevel, ZSTD_CONTENTSIZE_UNKNOWN, dictSize, ZSTD_cpm_createCDict);
|
||||
ZSTD_CDict* const cdict = ZSTD_createCDict_advanced(dict, dictSize,
|
||||
ZSTD_dlm_byCopy, ZSTD_dct_auto,
|
||||
cParams, ZSTD_defaultCMem);
|
||||
if (cdict)
|
||||
cdict->compressionLevel = (compressionLevel == 0) ? ZSTD_CLEVEL_DEFAULT : compressionLevel;
|
||||
return cdict;
|
||||
ZSTD_rust_createCDictState state;
|
||||
U32 const exclusionMask = ZSTD_getCParamsExclusionMask();
|
||||
state.callbackContext = NULL;
|
||||
state.exclusionMask = &exclusionMask;
|
||||
state.create = ZSTD_rust_createCDict_create;
|
||||
state.setCompressionLevel = ZSTD_rust_createCDict_setCompressionLevel;
|
||||
return (ZSTD_CDict*)ZSTD_rust_createCDict(
|
||||
&state, dict, dictSize, compressionLevel, ZSTD_dlm_byCopy);
|
||||
}
|
||||
|
||||
ZSTD_CDict* ZSTD_createCDict_byReference(const void* dict, size_t dictSize, int compressionLevel)
|
||||
{
|
||||
ZSTD_compressionParameters cParams = ZSTD_getCParams_internal(compressionLevel, ZSTD_CONTENTSIZE_UNKNOWN, dictSize, ZSTD_cpm_createCDict);
|
||||
ZSTD_CDict* const cdict = ZSTD_createCDict_advanced(dict, dictSize,
|
||||
ZSTD_dlm_byRef, ZSTD_dct_auto,
|
||||
cParams, ZSTD_defaultCMem);
|
||||
if (cdict)
|
||||
cdict->compressionLevel = (compressionLevel == 0) ? ZSTD_CLEVEL_DEFAULT : compressionLevel;
|
||||
return cdict;
|
||||
ZSTD_rust_createCDictState state;
|
||||
U32 const exclusionMask = ZSTD_getCParamsExclusionMask();
|
||||
state.callbackContext = NULL;
|
||||
state.exclusionMask = &exclusionMask;
|
||||
state.create = ZSTD_rust_createCDict_create;
|
||||
state.setCompressionLevel = ZSTD_rust_createCDict_setCompressionLevel;
|
||||
return (ZSTD_CDict*)ZSTD_rust_createCDict(
|
||||
&state, dict, dictSize, compressionLevel, ZSTD_dlm_byRef);
|
||||
}
|
||||
|
||||
size_t ZSTD_freeCDict(ZSTD_CDict* cdict)
|
||||
|
||||
Reference in New Issue
Block a user