rhea/src/memory.rs

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
}