extern crate libc;
mod raw;
pub struct Circuit {
pub cores: uint,
pub nodes: uint,
pub capacitance: Vec<f64>,
pub conductance: Vec<f64>,
}
impl Circuit {
pub fn new(floorplan: &Path, config: &Path, params: &str) -> Result<Circuit, &'static str> {
use std::ptr::copy_nonoverlapping_memory as copy;
unsafe {
let raw_circuit = raw::new_circuit(floorplan.to_c_str().as_ptr(),
config.to_c_str().as_ptr(),
params.to_c_str().as_ptr());
if raw_circuit.is_null() {
return Err("HotSpot failed to construct a thermal circuit");
}
let nc = (*raw_circuit).nodes as uint;
let mut circuit = Circuit {
cores: (*raw_circuit).cores as uint,
nodes: nc,
capacitance: Vec::from_elem(nc, 0.0),
conductance: Vec::from_elem(nc * nc, 0.0),
};
copy(circuit.capacitance.as_mut_ptr(),
(*raw_circuit).capacitance as *const _, nc);
copy(circuit.conductance.as_mut_ptr(),
(*raw_circuit).conductance as *const _, nc * nc);
raw::free_circuit(raw_circuit);
Ok(circuit)
}
}
}