54 lines
1.1 KiB
Rust
54 lines
1.1 KiB
Rust
use std::ops::Range;
|
|
|
|
// I do not like std
|
|
use hashbrown::HashMap;
|
|
|
|
pub type MemoryMap = Vec<(u64, u64)>;
|
|
|
|
pub type VariableHashmap = HashMap<String, Variable>;
|
|
|
|
pub enum VariableType {
|
|
Unsigned,
|
|
Signed,
|
|
String,
|
|
}
|
|
|
|
pub struct Variable {
|
|
vtype: VariableType,
|
|
constant: bool,
|
|
memory_addr: u64,
|
|
length: u64,
|
|
}
|
|
impl Variable {
|
|
pub fn new(
|
|
memmap: &mut MemoryMap,
|
|
variable_type: Option<VariableType>,
|
|
constant: bool,
|
|
length: u64,
|
|
) -> Self {
|
|
let addr = get_random_addr_and_validate(memmap, length);
|
|
//todo type guessing
|
|
let vtype = VariableType::String;
|
|
Self {
|
|
vtype,
|
|
constant,
|
|
memory_addr: addr,
|
|
length,
|
|
}
|
|
}
|
|
}
|
|
|
|
use rand::prelude::*;
|
|
|
|
pub fn get_random_addr_and_validate(memmap: &mut MemoryMap, length: u64) -> u64 {
|
|
let raddr: u64 = rand::random();
|
|
// TODO: validate fr later
|
|
// for (x, _) in memmap.iter() {
|
|
// if *x == raddr {
|
|
// }
|
|
// }
|
|
|
|
memmap.push((raddr, raddr + length));
|
|
raddr
|
|
}
|