1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
use raw;
use std::marker::PhantomData;
use {Phantom, Raw};
use component::{self, Component};
pub struct Core<'l> {
raw: Raw<raw::Core>,
phantom: Phantom<'l, raw::Core>,
}
impl<'l> Component for Core<'l> {
#[inline]
fn area(&self) -> f64 {
unsafe { 1e-12 * raw::Area_get_area(raw::Component_area(self.raw.0 as *mut _)) }
}
fn dynamic_power(&self) -> f64 {
unsafe {
let raw = raw::Component_rt_power(self.raw.0 as *mut _);
debug_assert!(!raw.is_null());
let raw = raw::powerDef_readOp(raw);
debug_assert!(!raw.is_null());
raw::powerComponents_dynamic(raw) / raw::Core_executionTime(self.raw.0)
}
}
fn leakage_power(&self) -> f64 {
unsafe {
let raw = raw::Component_power(self.raw.0 as *mut _);
debug_assert!(!raw.is_null());
let raw = raw::powerDef_readOp(raw);
debug_assert!(!raw.is_null());
component::leakage(self.raw.1, raw)
}
}
}
#[inline]
pub fn from_raw<'l>(raw: (*mut raw::Core, *mut raw::root_system)) -> Core<'l> {
Core { raw: raw, phantom: PhantomData }
}