refactor(compress): expose sequence statistics leaves from Rust
The C definitions of ZSTD_get1BlockSummary() and ZSTD_resetSeqStore() only forwarded their arguments to Rust, so they duplicated the ABI boundary without contributing assertions, private-state adaptation, or C-only policy. Make Rust provide the existing internal symbols directly and remove only the corresponding C declarations and forwarding bodies. Keep crate-local aliases for the current compressor-module imports; they are Rust name aliases and do not add the former ABI symbols back. No other statistics leaf is included. Test Plan: - `ulimit -v 41943040; cc -Ilib -Ilib/common -Ilib/compress -Ilib/decompress -Ilib/dictBuilder -Ilib/legacy -Ilib/deprecated -Ilib/zstd -fsyntax-only lib/compress/zstd_compress.c` -- passed - `ulimit -v 41943040; cargo +nightly fmt --manifest-path rust/Cargo.toml --all -- --check` -- passed - `git diff --check` and `git diff --cached --check` -- passed - No cargo builds, make commands, or tests run, per request
This commit is contained in:
@@ -2137,10 +2137,7 @@ void ZSTD_rust_confirmRepcodesAndEntropyTables(
|
|||||||
ZSTD_compressedBlockState_t** nextCBlock);
|
ZSTD_compressedBlockState_t** nextCBlock);
|
||||||
void ZSTD_rust_storeLastLiterals(SeqStore_t* seqStorePtr,
|
void ZSTD_rust_storeLastLiterals(SeqStore_t* seqStorePtr,
|
||||||
const BYTE* anchor, size_t lastLLSize);
|
const BYTE* anchor, size_t lastLLSize);
|
||||||
void ZSTD_rust_resetSeqStore(SeqStore_t* ssPtr);
|
|
||||||
void ZSTD_rust_validateSeqStore(const SeqStore_t* seqStore, U32 minMatch);
|
void ZSTD_rust_validateSeqStore(const SeqStore_t* seqStore, U32 minMatch);
|
||||||
BlockSummary ZSTD_rust_get1BlockSummary(const ZSTD_Sequence* seqs,
|
|
||||||
size_t nbSeqs);
|
|
||||||
U32 ZSTD_rust_resolveRepcodeToRawOffset(const U32 rep[ZSTD_REP_NUM],
|
U32 ZSTD_rust_resolveRepcodeToRawOffset(const U32 rep[ZSTD_REP_NUM],
|
||||||
U32 offBase, U32 ll0);
|
U32 offBase, U32 ll0);
|
||||||
size_t ZSTD_rust_loadCEntropy(ZSTD_compressedBlockState_t* bs, void* workspace,
|
size_t ZSTD_rust_loadCEntropy(ZSTD_compressedBlockState_t* bs, void* workspace,
|
||||||
@@ -5355,11 +5352,6 @@ ZSTD_BlockCompressor_f ZSTD_selectBlockCompressor(ZSTD_strategy strat, ZSTD_Para
|
|||||||
return selectedCompressor;
|
return selectedCompressor;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ZSTD_resetSeqStore(SeqStore_t* ssPtr)
|
|
||||||
{
|
|
||||||
ZSTD_rust_resetSeqStore(ssPtr);
|
|
||||||
}
|
|
||||||
|
|
||||||
static size_t ZSTD_rust_externalSequenceProducer_transfer(
|
static size_t ZSTD_rust_externalSequenceProducer_transfer(
|
||||||
void* context, ZSTD_SequencePosition* seqPos,
|
void* context, ZSTD_SequencePosition* seqPos,
|
||||||
const ZSTD_Sequence* inSeqs, size_t inSeqsSize,
|
const ZSTD_Sequence* inSeqs, size_t inSeqsSize,
|
||||||
@@ -8540,11 +8532,6 @@ ZSTD_compressSequencesAndLiterals(ZSTD_CCtx* cctx,
|
|||||||
litCapacity, decompressedSize);
|
litCapacity, decompressedSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
BlockSummary ZSTD_get1BlockSummary(const ZSTD_Sequence* seqs, size_t nbSeqs)
|
|
||||||
{
|
|
||||||
return ZSTD_rust_get1BlockSummary(seqs, nbSeqs);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*====== Finalize ======*/
|
/*====== Finalize ======*/
|
||||||
|
|
||||||
static ZSTD_inBuffer inBuffer_forEndFlush(const ZSTD_CStream* zcs)
|
static ZSTD_inBuffer inBuffer_forEndFlush(const ZSTD_CStream* zcs)
|
||||||
|
|||||||
@@ -227,7 +227,7 @@ pub unsafe extern "C" fn ZSTD_rust_convertSequencesNoRepcodes(
|
|||||||
/// `ZSTD_get1BlockSummary()`; the delimiter is identified by zero match
|
/// `ZSTD_get1BlockSummary()`; the delimiter is identified by zero match
|
||||||
/// length and contributes its literal length to the totals.
|
/// length and contributes its literal length to the totals.
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub unsafe extern "C" fn ZSTD_rust_get1BlockSummary(
|
pub unsafe extern "C" fn ZSTD_get1BlockSummary(
|
||||||
seqs: *const ZSTD_Sequence,
|
seqs: *const ZSTD_Sequence,
|
||||||
nb_seqs: usize,
|
nb_seqs: usize,
|
||||||
) -> BlockSummary {
|
) -> BlockSummary {
|
||||||
@@ -261,6 +261,10 @@ pub unsafe extern "C" fn ZSTD_rust_get1BlockSummary(
|
|||||||
invalid()
|
invalid()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Keep the old crate-local names for callers in the compressor module. These
|
||||||
|
// aliases do not create additional ABI symbols.
|
||||||
|
pub(crate) use ZSTD_get1BlockSummary as ZSTD_rust_get1BlockSummary;
|
||||||
|
|
||||||
/// Estimates the literal-section size used by the block splitter.
|
/// Estimates the literal-section size used by the block splitter.
|
||||||
unsafe fn estimate_block_size_literal(
|
unsafe fn estimate_block_size_literal(
|
||||||
literals: *const u8,
|
literals: *const u8,
|
||||||
@@ -1128,13 +1132,15 @@ pub unsafe extern "C" fn ZSTD_rust_storeLastLiterals(
|
|||||||
|
|
||||||
/// Resets the sequence and literal cursors for a new block.
|
/// Resets the sequence and literal cursors for a new block.
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub unsafe extern "C" fn ZSTD_rust_resetSeqStore(seq_store: *mut SeqStore_t) {
|
pub unsafe extern "C" fn ZSTD_resetSeqStore(seq_store: *mut SeqStore_t) {
|
||||||
let seq_store = unsafe { &mut *seq_store };
|
let seq_store = unsafe { &mut *seq_store };
|
||||||
seq_store.lit = seq_store.litStart;
|
seq_store.lit = seq_store.litStart;
|
||||||
seq_store.sequences = seq_store.sequencesStart;
|
seq_store.sequences = seq_store.sequencesStart;
|
||||||
seq_store.longLengthType = 0;
|
seq_store.longLengthType = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub(crate) use ZSTD_resetSeqStore as ZSTD_rust_resetSeqStore;
|
||||||
|
|
||||||
/// Returns the sum of all literal and match lengths in an external sequence
|
/// Returns the sum of all literal and match lengths in an external sequence
|
||||||
/// buffer, without looking for a block delimiter.
|
/// buffer, without looking for a block delimiter.
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
@@ -2682,7 +2688,7 @@ mod tests {
|
|||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
let summary = unsafe { ZSTD_rust_get1BlockSummary(sequences.as_ptr(), sequences.len()) };
|
let summary = unsafe { ZSTD_get1BlockSummary(sequences.as_ptr(), sequences.len()) };
|
||||||
|
|
||||||
assert_eq!(summary.nbSequences, 2);
|
assert_eq!(summary.nbSequences, 2);
|
||||||
assert_eq!(summary.blockSize, 12);
|
assert_eq!(summary.blockSize, 12);
|
||||||
@@ -2697,13 +2703,13 @@ mod tests {
|
|||||||
matchLength: 4,
|
matchLength: 4,
|
||||||
rep: 0,
|
rep: 0,
|
||||||
}];
|
}];
|
||||||
let missing = unsafe { ZSTD_rust_get1BlockSummary(sequences.as_ptr(), sequences.len()) };
|
let missing = unsafe { ZSTD_get1BlockSummary(sequences.as_ptr(), sequences.len()) };
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
missing.nbSequences,
|
missing.nbSequences,
|
||||||
ERROR(ZstdErrorCode::ExternalSequencesInvalid)
|
ERROR(ZstdErrorCode::ExternalSequencesInvalid)
|
||||||
);
|
);
|
||||||
|
|
||||||
let empty = unsafe { ZSTD_rust_get1BlockSummary(std::ptr::null(), 0) };
|
let empty = unsafe { ZSTD_get1BlockSummary(std::ptr::null(), 0) };
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
empty.nbSequences,
|
empty.nbSequences,
|
||||||
ERROR(ZstdErrorCode::ExternalSequencesInvalid)
|
ERROR(ZstdErrorCode::ExternalSequencesInvalid)
|
||||||
@@ -3369,7 +3375,7 @@ mod tests {
|
|||||||
longLengthPos: 11,
|
longLengthPos: 11,
|
||||||
};
|
};
|
||||||
|
|
||||||
unsafe { ZSTD_rust_resetSeqStore(&mut seq_store) };
|
unsafe { ZSTD_resetSeqStore(&mut seq_store) };
|
||||||
|
|
||||||
assert_eq!(seq_store.sequences, sequences_start);
|
assert_eq!(seq_store.sequences, sequences_start);
|
||||||
assert_eq!(seq_store.lit, literals_start);
|
assert_eq!(seq_store.lit, literals_start);
|
||||||
|
|||||||
Reference in New Issue
Block a user