aboutsummaryrefslogtreecommitdiff
path: root/libpsi-core/src/runtimes/basic_rt.rs
blob: 20befba2864427aea1081d1614daadc1b3446992 (plain)
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
use crate::{ExecutionData, QuantumCircuit, Runtime, RuntimeBase};

pub struct BasicRT<'a> {
    circuit: &'a QuantumCircuit,
}

impl<'a> RuntimeBase for BasicRT<'a> {
    fn get_circuit(&self) -> &QuantumCircuit {
        &self.circuit
    }
}

impl<'a> Runtime<'a> for BasicRT<'a> {
    fn new(circuit: &'a QuantumCircuit) -> BasicRT {
        BasicRT { circuit }
    }

    fn execute(&self, repeat: usize) -> Vec<ExecutionData> {
        let mut result: Vec<ExecutionData> = Vec::with_capacity(repeat);
        for _ in 0..repeat {
            let executation_data = ExecutionData::new(
                self.circuit.get_quantum_register(),
                self.circuit.get_classical_registers(),
            );

            for instruction in self.circuit.get_instructions() {
                println!("{} on q{}", instruction.gate.0, instruction.target_bit);
            }

            result.push(executation_data);
        }
        result
    }
}