Skip to content

Commit 98217cb

Browse files
committed
incremental change
1 parent 1cc89f6 commit 98217cb

File tree

1 file changed

+9
-11
lines changed

1 file changed

+9
-11
lines changed

src/_string_tools/slice_packed_field.nr

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -609,12 +609,10 @@ unconstrained fn decompose(val: Field) -> [Field; 16] {
609609
}
610610

611611
// 5 gates?
612-
pub fn get_last_limb_path<let OutputFields: u32>(last_limb_index: Field) -> [Field; OutputFields] {
612+
pub fn get_last_limb_path<let OutputFields: u32>(last_limb_index: Field) -> [u1; OutputFields] {
613613
// TODO we offset by 1 explain why (0 byte length produces 0 - 1 which = invalid array index. we just add 1 and increase array length by 1 to compensate)
614614
let path = LAST_LIMB_PATH[cast_num_to_u32(last_limb_index + 1)]; // 2
615-
let a = path.to_le_bits::<OutputFields>();
616-
let result = a.map(|b| b as Field);
617-
result
615+
path.to_le_bits::<OutputFields>()
618616
}
619617

620618
/**
@@ -718,13 +716,13 @@ pub fn slice_fields<let InputFields: u32, let OutputFields: u32>(
718716
// 1, 70.5
719717
let index_of_output_limb: Field = (num_bytes_div_31 as Field - num_bytes_mod_31_is_0 as Field);
720718
// 5, 75.5
721-
let path_valid_output: [Field; OutputFields] = get_last_limb_path(index_of_output_limb);
719+
let path_valid_output: [u1; OutputFields] = get_last_limb_path(index_of_output_limb);
722720

723721
// 2, 77.5
724722
let tail_shift = BYTE_SHIFT[cast_num_to_u32(num_unused_bytes_in_start_limb)];
725723

726724
// 51, 128.5
727-
let mut result = [0; OutputFields];
725+
let mut result: [Field; OutputFields] = [0; OutputFields];
728726
let mut previous = tail;
729727
for i in 0..(OutputFields - 1) {
730728
// 0
@@ -738,9 +736,9 @@ pub fn slice_fields<let InputFields: u32, let OutputFields: u32>(
738736
// 1, 48
739737
let combined = previous * tail_shift + head;
740738
// 1, 49
741-
result[i] = combined * slice_valid;
739+
result[i] = combined * (slice_valid as Field);
742740
// 2, 51
743-
previous = (tail - previous) * slice_valid + previous;
741+
previous = (tail - previous) * (slice_valid as Field) + previous;
744742
}
745743

746744
// 2, 130.5
@@ -777,13 +775,13 @@ pub fn slice_fields<let InputFields: u32, let OutputFields: u32>(
777775
std::as_witness(last_limb);
778776

779777
let mut path: [Field; OutputFields] = [0; OutputFields];
780-
path[0] = (1 - path_valid_output[0]);
778+
path[0] = (1 - path_valid_output[0] as Field);
781779
for i in 1..OutputFields {
782-
path[i] = path_valid_output[i] * -path_valid_output[i - 1] + path_valid_output[i - 1];
780+
path[i] = path_valid_output[i - 1] as Field - path_valid_output[i] as Field * path_valid_output[i - 1] as Field;
783781
}
784782

785783
for i in 0..OutputFields {
786-
result[i] = (last_limb - result[i]) * path[i] + result[i];
784+
result[i] = (last_limb - result[i]) * path[i]+ result[i];
787785
}
788786
result
789787
}

0 commit comments

Comments
 (0)