quil_rs/instruction/
timing.rs1use 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}