@@ -12,9 +12,11 @@ use strum_macros::Display;
1212
1313use crate :: hints:: error:: OsHintError ;
1414
15+ pub type ElmBoundType = u128 ;
16+
1517pub ( crate ) const COMPRESSION_VERSION : u8 = 0 ;
1618pub ( crate ) const HEADER_ELM_N_BITS : usize = 20 ;
17- pub ( crate ) const HEADER_ELM_BOUND : u32 = 1 << HEADER_ELM_N_BITS ;
19+ pub ( crate ) const HEADER_ELM_BOUND : ElmBoundType = 1 << HEADER_ELM_N_BITS ;
1820
1921pub ( crate ) const N_UNIQUE_BUCKETS : usize = BitLength :: COUNT ;
2022/// Number of buckets, including the repeating values bucket.
@@ -427,11 +429,11 @@ pub(crate) fn compress(data: &[Felt]) -> Vec<Felt> {
427429 let packed_header = pack_in_felts ( & header, HEADER_ELM_BOUND ) ;
428430 let packed_repeating_value_pointers = pack_in_felts (
429431 & compression_set. get_repeating_value_pointers ( ) ,
430- u32 :: try_from ( n_unique_values) . expect ( "Too many unique values" ) ,
432+ ElmBoundType :: try_from ( n_unique_values) . expect ( "Too many unique values" ) ,
431433 ) ;
432434 let packed_bucket_index_per_elm = pack_in_felts (
433435 & compression_set. bucket_index_per_elm ,
434- u32 :: try_from ( TOTAL_N_BUCKETS ) . expect ( "Too many buckets" ) ,
436+ ElmBoundType :: try_from ( TOTAL_N_BUCKETS ) . expect ( "Too many buckets" ) ,
435437 ) ;
436438
437439 let unique_values = compression_set. pack_unique_values ( ) ;
@@ -443,18 +445,18 @@ pub(crate) fn compress(data: &[Felt]) -> Vec<Felt> {
443445
444446/// Calculates how many instances of the largest element below the (non-inclusive) element bound can
445447/// fit into the bit length of a single felt.
446- pub fn get_n_elms_per_felt ( elm_bound : u32 ) -> usize {
448+ pub fn get_n_elms_per_felt ( elm_bound : ElmBoundType ) -> usize {
447449 if elm_bound <= 1 {
448450 return MAX_N_BITS ;
449451 }
450452 // Calculate: ceil(log2(elm_bound)).
451- let n_bits_required = u32 :: BITS - ( elm_bound - 1 ) . leading_zeros ( ) ;
453+ let n_bits_required = ElmBoundType :: BITS - ( elm_bound - 1 ) . leading_zeros ( ) ;
452454 MAX_N_BITS / usize:: try_from ( n_bits_required) . expect ( "usize overflow" )
453455}
454456
455457/// Packs a list of elements into multiple felts, ensuring that each felt contains as many elements
456458/// as can fit.
457- pub fn pack_in_felts < U > ( elms : & [ U ] , elm_bound : u32 ) -> Vec < Felt >
459+ pub fn pack_in_felts < U > ( elms : & [ U ] , elm_bound : ElmBoundType ) -> Vec < Felt >
458460where
459461 U : Copy ,
460462 BigUint : From < U > ,
@@ -465,7 +467,7 @@ where
465467}
466468
467469/// Packs a chunk of elements into a single felt. Assumes that the elms fit in a felt.
468- fn pack_in_felt < U > ( elms : & [ U ] , elm_bound : u32 ) -> Felt
470+ fn pack_in_felt < U > ( elms : & [ U ] , elm_bound : ElmBoundType ) -> Felt
469471where
470472 U : Copy ,
471473 BigUint : From < U > ,
@@ -509,7 +511,11 @@ pub fn unpack_felts<const LENGTH: usize>(
509511 result
510512}
511513
512- pub fn unpack_felts_to_usize ( compressed : & [ Felt ] , n_elms : usize , elm_bound : u32 ) -> Vec < usize > {
514+ pub fn unpack_felts_to_usize (
515+ compressed : & [ Felt ] ,
516+ n_elms : usize ,
517+ elm_bound : ElmBoundType ,
518+ ) -> Vec < usize > {
513519 let n_elms_per_felt = get_n_elms_per_felt ( elm_bound) ;
514520 let elm_bound_as_big = BigUint :: from ( elm_bound) ;
515521 let mut result = Vec :: with_capacity ( n_elms) ;
@@ -546,7 +552,7 @@ pub fn decompress(compressed: &mut impl Iterator<Item = Felt>) -> Vec<Felt> {
546552 fn unpack_chunk_to_usize (
547553 compressed : & mut impl Iterator < Item = Felt > ,
548554 n_elms : usize ,
549- elm_bound : u32 ,
555+ elm_bound : ElmBoundType ,
550556 ) -> Vec < usize > {
551557 let n_elms_per_felt = get_n_elms_per_felt ( elm_bound) ;
552558 let n_packed_felts = n_elms. div_ceil ( n_elms_per_felt) ;
0 commit comments