QuISP
Loading...
Searching...
No Matches
Backend.h
Go to the documentation of this file.
1#pragma once
2#include <omnetpp.h>
3#include <deque>
4#include <memory>
5#include <unordered_map>
10#include "Qubit.h"
13
15using abstract::IConfiguration;
16using abstract::IQuantumBackend;
17using abstract::IQubit;
18using abstract::IQubitId;
19using abstract::IRandomNumberGenerator;
20using graph_state::GraphStateQubit;
21using omnetpp::SimTime;
22
24 public:
25 class ICallback {
26 public:
27 virtual ~ICallback() {}
28 virtual void willUpdate(GraphStateBackend& backend) = 0;
29 };
30 GraphStateBackend(std::unique_ptr<IRandomNumberGenerator> rng, std::unique_ptr<StationaryQubitConfiguration> configuration);
31 GraphStateBackend(std::unique_ptr<IRandomNumberGenerator> rng, std::unique_ptr<StationaryQubitConfiguration> configuration, ICallback* callback);
33 IQubit* createQubit(const IQubitId* id, std::unique_ptr<IConfiguration> conf) override;
34 IQubit* createQubit(const IQubitId* id) override;
35 IQubit* createShortLiveQubit() override;
36 IQubit* getQubit(const IQubitId* id) override;
37 IQubit* getShortLiveQubit() override;
38 void returnToPool(IQubit*) override;
39 void deleteQubit(const IQubitId* id) override;
40 std::unique_ptr<IConfiguration> getDefaultConfiguration() const override;
41 const SimTime& getSimTime() override;
42 void setSimTime(SimTime time) override;
43 double dblrand();
44
45 protected:
46 std::unordered_map<const IQubitId*, std::unique_ptr<GraphStateQubit>, IQubitId::Hash, IQubitId::Pred> qubits;
47 SimTime current_time;
48 const std::unique_ptr<IRandomNumberGenerator> rng;
49 std::unique_ptr<StationaryQubitConfiguration> config;
50 ICallback* callback = nullptr;
51 std::deque<IQubit*> short_live_qubit_pool;
52 int short_live_qubit_pool_size; // this is used to generate qubit id for short live qubits in a pool; currenlty only photons.
53};
54} // namespace quisp::backends::graph_state
The abstract interface for a quantum backend.
Definition IQuantumBackend.h:19
Definition IQubit.h:30
a key to identify a qubit in a backend.
Definition IQubitId.h:14
virtual void willUpdate(GraphStateBackend &backend)=0
IQubit * getShortLiveQubit() override
Definition Backend.cc:65
int short_live_qubit_pool_size
Definition Backend.h:52
ICallback * callback
Definition Backend.h:50
std::deque< IQubit * > short_live_qubit_pool
Definition Backend.h:51
void returnToPool(IQubit *) override
Definition Backend.cc:74
IQubit * createQubit(const IQubitId *id, std::unique_ptr< IConfiguration > conf) override
Definition Backend.cc:36
void setSimTime(SimTime time) override
Definition Backend.cc:95
IQubit * createShortLiveQubit() override
Definition Backend.cc:24
IQubit * getQubit(const IQubitId *id) override
Definition Backend.cc:57
const SimTime & getSimTime() override
Definition Backend.cc:91
const std::unique_ptr< IRandomNumberGenerator > rng
Definition Backend.h:48
double dblrand()
Definition Backend.cc:96
std::unique_ptr< StationaryQubitConfiguration > config
Definition Backend.h:49
std::unordered_map< const IQubitId *, std::unique_ptr< GraphStateQubit >, IQubitId::Hash, IQubitId::Pred > qubits
Definition Backend.h:46
std::unique_ptr< IConfiguration > getDefaultConfiguration() const override
Definition Backend.cc:87
SimTime current_time
Definition Backend.h:47
void deleteQubit(const IQubitId *id) override
Definition Backend.cc:79
Definition Backend.cc:9