2025-01-09 19:56:36 -05:00
|
|
|
use std::ops::Range;
|
|
|
|
|
|
|
|
use rand::Rng;
|
|
|
|
|
2025-02-05 19:27:51 -05:00
|
|
|
use crate::vm::Thread;
|
2025-01-09 19:56:36 -05:00
|
|
|
|
2025-02-03 17:49:38 -05:00
|
|
|
pub fn random_int(data: &mut Thread, destination: usize, argument_range: Range<usize>) {
|
2025-01-09 19:56:36 -05:00
|
|
|
let mut argument_range_iter = argument_range.into_iter();
|
|
|
|
let (min, max) = {
|
|
|
|
let mut min = None;
|
|
|
|
|
|
|
|
loop {
|
|
|
|
let register_index = argument_range_iter
|
|
|
|
.next()
|
|
|
|
.unwrap_or_else(|| panic!("No argument was passed to \"random_int\""));
|
2025-02-05 19:12:26 -05:00
|
|
|
let integer = data.get_integer_register(register_index);
|
2025-01-09 19:56:36 -05:00
|
|
|
|
2025-02-05 19:12:26 -05:00
|
|
|
if min.is_none() {
|
|
|
|
min = Some(integer);
|
|
|
|
} else {
|
|
|
|
break (min, integer);
|
2025-01-09 19:56:36 -05:00
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
let random_integer = rand::thread_rng().gen_range(min.unwrap()..max);
|
|
|
|
|
2025-02-05 19:12:26 -05:00
|
|
|
data.set_integer_register(destination, random_integer);
|
2025-01-09 19:56:36 -05:00
|
|
|
}
|