feat(compress): move CDict query leaves into Rust
Move CDict compression-parameter and dictionary-ID snapshot reads behind a Rust-owned projection while retaining the private C field access and the existing non-null assertion for ZSTD_getCParamsFromCDict. Preserve the public NULL dictionary-ID result and ABI-compatible compression-parameter return. Test Plan: - cargo test --manifest-path rust/Cargo.toml --lib - cargo clippy --manifest-path rust/Cargo.toml --all-targets -- -D warnings - make -B -C programs -j1 zstd - make -C tests -j1 test-zstream ZSTREAM_TESTTIME=-T1s - focused cdict_query_projection unit tests
This commit is contained in:
@@ -1277,6 +1277,19 @@ typedef char ZSTD_rust_compress_begin_using_cdict_state_layout[
|
||||
&& sizeof(ZSTD_rust_compressBeginUsingCDictState)
|
||||
== 12 * sizeof(void*))
|
||||
? 1 : -1];
|
||||
typedef struct {
|
||||
const ZSTD_compressionParameters* cParams;
|
||||
const unsigned* dictID;
|
||||
} ZSTD_rust_cdictQueryState;
|
||||
ZSTD_compressionParameters ZSTD_rust_getCParamsFromCDict(
|
||||
const ZSTD_rust_cdictQueryState* state);
|
||||
unsigned ZSTD_rust_getDictIDFromCDict(
|
||||
const ZSTD_rust_cdictQueryState* state);
|
||||
typedef char ZSTD_rust_cdict_query_state_layout[
|
||||
(offsetof(ZSTD_rust_cdictQueryState, cParams) == 0
|
||||
&& offsetof(ZSTD_rust_cdictQueryState, dictID) == sizeof(void*)
|
||||
&& sizeof(ZSTD_rust_cdictQueryState) == 2 * sizeof(void*))
|
||||
? 1 : -1];
|
||||
size_t ZSTD_rust_transferSequencesWBlockDelim(
|
||||
SeqStore_t* seqStore, ZSTD_SequencePosition* seqPos,
|
||||
const ZSTD_Sequence* inSeqs, size_t inSeqsSize,
|
||||
@@ -4939,8 +4952,11 @@ const ZSTD_CDict* ZSTD_initStaticCDict(
|
||||
|
||||
ZSTD_compressionParameters ZSTD_getCParamsFromCDict(const ZSTD_CDict* cdict)
|
||||
{
|
||||
ZSTD_rust_cdictQueryState state;
|
||||
assert(cdict != NULL);
|
||||
return cdict->matchState.cParams;
|
||||
state.cParams = &cdict->matchState.cParams;
|
||||
state.dictID = NULL;
|
||||
return ZSTD_rust_getCParamsFromCDict(&state);
|
||||
}
|
||||
|
||||
/*! ZSTD_getDictID_fromCDict() :
|
||||
@@ -4949,8 +4965,10 @@ ZSTD_compressionParameters ZSTD_getCParamsFromCDict(const ZSTD_CDict* cdict)
|
||||
* Non-conformant dictionaries can still be loaded, but as content-only dictionaries. */
|
||||
unsigned ZSTD_getDictID_fromCDict(const ZSTD_CDict* cdict)
|
||||
{
|
||||
if (cdict==NULL) return 0;
|
||||
return cdict->dictID;
|
||||
ZSTD_rust_cdictQueryState state;
|
||||
state.cParams = NULL;
|
||||
state.dictID = cdict == NULL ? NULL : &cdict->dictID;
|
||||
return ZSTD_rust_getDictIDFromCDict(&state);
|
||||
}
|
||||
|
||||
static void ZSTD_rust_compressBeginUsingCDict_initParams(
|
||||
|
||||
Reference in New Issue
Block a user