Skip to main content

rustdv_sim/handle/
real.rs

1//! Real values with scheduled and immediate writes.
2
3use rustdv_gpi as gpi;
4
5use crate::{
6    handle::{HandleBase, ValueError},
7    phase,
8};
9
10/// A real variable with scheduled and immediate writes.
11#[derive(Copy, Clone)]
12pub struct RealHandle {
13    pub(super) raw: gpi::RealHandle,
14}
15
16impl From<gpi::RealHandle> for RealHandle {
17    fn from(raw: gpi::RealHandle) -> Self {
18        RealHandle { raw }
19    }
20}
21
22impl HandleBase for RealHandle {
23    fn name(&self) -> String {
24        self.raw.name()
25    }
26
27    fn full_name(&self) -> String {
28        self.raw.full_name()
29    }
30}
31
32impl RealHandle {
33    pub fn get(&self) -> Result<f64, ValueError> {
34        self.raw.get()
35    }
36    /// Buffer a write until ReadWrite; the last write to this handle wins.
37    pub fn set(&self, value: f64) {
38        phase::schedule(self.raw, phase::WriteVal::Real(value));
39    }
40    pub fn set_now(&self, value: f64) {
41        phase::deny_write_in_read_only(self.raw);
42        self.raw.set_now(value);
43    }
44}