use core::iter::Peekable;
use starknet_ff::FieldElement as FieldElement252;
pub fn next_decommitment_node(
prev_queries: &mut Peekable<impl Iterator<Item = usize>>,
layer_queries: &mut Peekable<impl Iterator<Item = usize>>,
) -> Option<usize> {
prev_queries
.peek()
.map(|q| *q / 2)
.into_iter()
.chain(layer_queries.peek().into_iter().copied())
.min()
}
pub fn option_flatten_peekable<'a, I: IntoIterator<Item = &'a usize>>(
a: Option<I>,
) -> Peekable<core::iter::Copied<core::iter::Flatten<<Option<I> as IntoIterator>::IntoIter>>> {
a.into_iter().flatten().copied().peekable()
}
pub fn add_length_padding(word: &mut FieldElement252, n_packed_elements: usize) {
let two_pow_124: FieldElement252 = (1u128 << 124).into();
*word += FieldElement252::from(n_packed_elements) * (two_pow_124 * two_pow_124);
}