refactor(dict): move CDict size policy to Rust
Keep the advanced CDict estimator and its private workspace sizing inputs in C, but route the public estimate through a Rust policy bridge. Rust now selects unknown-source/create-CDict parameters and the public by-copy load mode before invoking the opaque C estimator. Focused tests verify callback ordering, selected parameters, and the missing-policy-input guard. Test Plan: Not run in this atomic commit; the capped serial Rust, native, smoke, and original test-suite verification follows.
This commit is contained in:
@@ -1751,6 +1751,25 @@ typedef char ZSTD_rust_next_input_size_hint_mt_or_st_state_layout[
|
||||
? 1 : -1];
|
||||
size_t ZSTD_rust_nextInputSizeHintMTorST(
|
||||
const ZSTD_rust_nextInputSizeHintMTorSTState* state);
|
||||
typedef size_t (*ZSTD_rust_estimateCDictSizeAdvanced_f)(
|
||||
void* context, size_t dictSize, ZSTD_compressionParameters cParams,
|
||||
int dictLoadMethod);
|
||||
typedef struct {
|
||||
void* callbackContext;
|
||||
const U32* exclusionMask;
|
||||
ZSTD_rust_estimateCDictSizeAdvanced_f estimateAdvanced;
|
||||
} ZSTD_rust_estimateCDictSizeState;
|
||||
typedef char zstd_rust_estimate_cdict_size_state_layout[
|
||||
(offsetof(ZSTD_rust_estimateCDictSizeState, callbackContext) == 0
|
||||
&& offsetof(ZSTD_rust_estimateCDictSizeState, exclusionMask)
|
||||
== sizeof(void*)
|
||||
&& offsetof(ZSTD_rust_estimateCDictSizeState, estimateAdvanced)
|
||||
== 2 * sizeof(void*)
|
||||
&& sizeof(ZSTD_rust_estimateCDictSizeState) == 3 * sizeof(void*))
|
||||
? 1 : -1];
|
||||
size_t ZSTD_rust_estimateCDictSize(
|
||||
const ZSTD_rust_estimateCDictSizeState* state,
|
||||
size_t dictSize, int compressionLevel);
|
||||
size_t ZSTD_rust_sizeofCDict(size_t objectSize, size_t workspaceSize);
|
||||
size_t ZSTD_rust_sizeofLocalDict(int dictBufferPresent, size_t dictSize,
|
||||
size_t cdictSize);
|
||||
@@ -7104,10 +7123,23 @@ size_t ZSTD_estimateCDictSize_advanced(
|
||||
dictSize, cParams, (int)dictLoadMethod, &sizing);
|
||||
}
|
||||
|
||||
static size_t ZSTD_rust_estimateCDictSize_advanced(
|
||||
void* context, size_t dictSize, ZSTD_compressionParameters cParams,
|
||||
int dictLoadMethod)
|
||||
{
|
||||
(void)context;
|
||||
return ZSTD_estimateCDictSize_advanced(
|
||||
dictSize, cParams, (ZSTD_dictLoadMethod_e)dictLoadMethod);
|
||||
}
|
||||
|
||||
size_t ZSTD_estimateCDictSize(size_t dictSize, int compressionLevel)
|
||||
{
|
||||
ZSTD_compressionParameters const cParams = ZSTD_getCParams_internal(compressionLevel, ZSTD_CONTENTSIZE_UNKNOWN, dictSize, ZSTD_cpm_createCDict);
|
||||
return ZSTD_estimateCDictSize_advanced(dictSize, cParams, ZSTD_dlm_byCopy);
|
||||
ZSTD_rust_estimateCDictSizeState state;
|
||||
U32 const exclusionMask = ZSTD_getCParamsExclusionMask();
|
||||
state.callbackContext = NULL;
|
||||
state.exclusionMask = &exclusionMask;
|
||||
state.estimateAdvanced = ZSTD_rust_estimateCDictSize_advanced;
|
||||
return ZSTD_rust_estimateCDictSize(&state, dictSize, compressionLevel);
|
||||
}
|
||||
|
||||
size_t ZSTD_sizeof_CDict(const ZSTD_CDict* cdict)
|
||||
|
||||
Reference in New Issue
Block a user