use crate::{Config, Error, U256, vm::evm::interpreter::Halt};
use core::ops::ControlFlow;
pub fn as_usize_or_halt_with(value: U256, halt: impl Fn() -> Halt) -> ControlFlow<Halt, usize> {
let limbs = value.0;
if (limbs[0] > usize::MAX as u64) | (limbs[1] != 0) | (limbs[2] != 0) | (limbs[3] != 0) {
ControlFlow::Break(halt())
} else {
ControlFlow::Continue(limbs[0] as usize)
}
}
pub fn as_usize_or_halt<T: Config>(value: U256) -> ControlFlow<Halt, usize> {
as_usize_or_halt_with(value, || Error::<T>::OutOfGas.into())
}