quil_rs/instruction/
timing.rs

1use super::Qubit;
2use crate::{expression::Expression, quil::Quil};
3
4#[derive(Clone, Debug, PartialEq, Eq, Hash)]
5pub struct Delay {
6    pub duration: Expression,
7    pub frame_names: Vec<String>,
8    pub qubits: Vec<Qubit>,
9}
10
11impl Delay {
12    pub fn new(duration: Expression, frame_names: Vec<String>, qubits: Vec<Qubit>) -> Self {
13        Self {
14            duration,
15            frame_names,
16            qubits,
17        }
18    }
19}
20
21impl Quil for Delay {
22    fn write(
23        &self,
24        writer: &mut impl std::fmt::Write,
25        fall_back_to_debug: bool,
26    ) -> crate::quil::ToQuilResult<()> {
27        write!(writer, "DELAY")?;
28        for qubit in &self.qubits {
29            write!(writer, " ")?;
30            qubit.write(writer, fall_back_to_debug)?;
31        }
32        for frame_name in &self.frame_names {
33            write!(writer, " \"{}\"", frame_name)?;
34        }
35        write!(writer, " ",)?;
36        self.duration.write(writer, fall_back_to_debug)
37    }
38}
39
40#[derive(Clone, Debug, PartialEq, Eq, Hash)]
41pub struct Fence {
42    pub qubits: Vec<Qubit>,
43}
44
45impl Quil for Fence {
46    fn write(
47        &self,
48        writer: &mut impl std::fmt::Write,
49        fall_back_to_debug: bool,
50    ) -> Result<(), crate::quil::ToQuilError> {
51        write!(writer, "FENCE")?;
52        for qubit in &self.qubits {
53            write!(writer, " ")?;
54            qubit.write(writer, fall_back_to_debug)?;
55        }
56        Ok(())
57    }
58}
59
60impl Fence {
61    pub fn new(qubits: Vec<Qubit>) -> Self {
62        Self { qubits }
63    }
64}