21using namespace quisp::messages;
48 assert(qubit !=
nullptr);
54 assert(qubit !=
nullptr);
60 assert(qubit !=
nullptr);
67 assert(control_qubit !=
nullptr);
68 assert(target_qubit !=
nullptr);
69 control_qubit->gateCNOT(target_qubit);
75 assert(qubit !=
nullptr);
76 assert(trash_qubit !=
nullptr);
77 qubit->gateCNOT(trash_qubit);
84 assert(qubit !=
nullptr);
85 assert(trash_qubit !=
nullptr);
86 trash_qubit->gateCNOT(qubit);
93 assert(qubit !=
nullptr);
94 assert(trash_qubit !=
nullptr);
96 trash_qubit->gateSdg();
98 trash_qubit->gateCNOT(qubit);
105 LinkTomographyResult *pk =
new LinkTomographyResult{
"LinkTomographyResult"};
108 pk->setDestAddr(partner_addr.
val);
109 pk->setCount_id(count);
110 pk->setPartner_address(src);
113 pk->setBasis(outcome.
basis);
115 if (count == max_count) {
116 pk->setFinish(simTime() - start_time);
117 pk->setMax_count(max_count);
120 LinkTomographyResult *pk_for_self = pk->dup();
121 pk_for_self->setPartner_address(pk->getDestAddr());
122 pk_for_self->setDestAddr(pk->getSrcAddr());
127 void sendPurificationResult(
const unsigned long ruleset_id,
const QNodeAddr partner_addr,
const int shared_rule_tag,
const int sequence_number,
const int measurement_result,
129 auto *pkt =
new PurificationResult{
"PurificationResult"};
131 pkt->setDestAddr(partner_addr.
val);
133 pkt->setRulesetId(ruleset_id);
134 pkt->setSharedRuleTag(shared_rule_tag);
135 pkt->setSequenceNumber(sequence_number);
136 pkt->setMeasurementResult(measurement_result);
137 pkt->setProtocol(protocol);
138 auto *pk_for_self = pkt->dup();
145 const int frame_correction)
override {
146 SwappingResult *pkt =
new SwappingResult(
"SwappingResult");
148 pkt->setDestAddr(partner_addr.
val);
149 pkt->setRulesetId(ruleset_id);
150 pkt->setSharedRuleTag(shared_rule_tag);
151 pkt->setSequenceNumber(sequence_number);
153 pkt->setCorrectionFrame(frame_correction);
154 pkt->setNewPartner(new_partner_addr.
val);
170 qubit->
Lock(rs_id, rule_id, action_index);
178 std::stringstream ss;
179 ss <<
"QNodeAddr:" << std::to_string(
rule_engine->
parentAddress) <<
", event #" << std::to_string(omnetpp::getSimulation()->getEventNumber());
virtual void Lock(unsigned long rs_id, int rule_id, int action_id)=0
int action_index
Definition IStationaryQubit.h:55
virtual types::MeasurementOutcome measureRandomPauliBasis()=0
virtual bool isLocked()=0
RuleEngine.
Definition RuleEngine.h:57
utils::ComponentProvider provider
Definition RuleEngine.h:96
void freeConsumedResource(int qnic_index, IStationaryQubit *qubit, QNIC_type qnic_type)
Definition RuleEngine.cc:376
int parentAddress
Definition RuleEngine.h:62
The QubitRecord interface.
Definition IQubitRecord.h:17
virtual QNIC_type getQNicType() const =0
virtual int getQNicIndex() const =0
The Runtime executable Rule in a RuleSet.
Definition RuleSet.h:40
ComponentProvider class provides a way to access other quisp other modules.
Definition ComponentProvider.h:22
IStationaryQubit * getStationaryQubit(modules::qrsa::IQubitRecord *const qubit_record)
Definition ComponentProvider.cc:47
Definition RuleEngine.h:32
Definition InstructionVisitor.cc:7
int PurType
purification type for Instructions. see rules::PurType enum.
Definition types.h:45
this file contains the definitions of all the user-defined types widely used alongside the runtime::R...
char basis
Definition IQubit.h:22
char GOD_clean
Definition IQubit.h:24
bool outcome_is_plus
Definition IQubit.h:23
Definition RuntimeCallback.h:23
int purifyZ(IQubitRecord *qubit_rec, IQubitRecord *trash_qubit_rec) override
Definition RuntimeCallback.h:81
void freeAndResetQubit(IQubitRecord *qubit) override
Definition RuntimeCallback.h:158
MeasurementOutcome measureQubitX(IQubitRecord *qubit_rec) override
Definition RuntimeCallback.h:31
RuntimeCallback(RuleEngine *re)
Definition RuntimeCallback.h:24
void sendSwappingResult(const unsigned long ruleset_id, const QNodeAddr partner_addr, const QNodeAddr new_partner_addr, const int shared_rule_tag, const int sequence_number, const int frame_correction) override
Definition RuntimeCallback.h:144
utils::ComponentProvider & provider
Definition RuntimeCallback.h:184
std::string getNodeInfo() override
Definition RuntimeCallback.h:177
bool isQubitLocked(IQubitRecord *const qubit_rec) override
Definition RuntimeCallback.h:163
MeasurementOutcome measureQubitZ(IQubitRecord *qubit_rec) override
Definition RuntimeCallback.h:36
void gateCNOT(IQubitRecord *control_qubit_rec, IQubitRecord *target_qubit_rec) override
Definition RuntimeCallback.h:64
void gateX(IQubitRecord *qubit_rec) override
Definition RuntimeCallback.h:46
void gateY(IQubitRecord *qubit_rec) override
Definition RuntimeCallback.h:58
void sendLinkTomographyResult(const unsigned long ruleset_id, const runtime::Rule &rule, const int action_index, const runtime::QNodeAddr partner_addr, int count, MeasurementOutcome outcome, int max_count, SimTime start_time) override
Definition RuntimeCallback.h:103
int purifyX(IQubitRecord *qubit_rec, IQubitRecord *trash_qubit_rec) override
Definition RuntimeCallback.h:72
int purifyY(IQubitRecord *qubit_rec, IQubitRecord *trash_qubit_rec) override
Definition RuntimeCallback.h:90
void sendPurificationResult(const unsigned long ruleset_id, const QNodeAddr partner_addr, const int shared_rule_tag, const int sequence_number, const int measurement_result, PurType protocol) override
Definition RuntimeCallback.h:127
void lockQubit(IQubitRecord *const qubit_rec, unsigned long rs_id, int rule_id, int action_index) override
Definition RuntimeCallback.h:168
MeasurementOutcome measureQubitY(IQubitRecord *qubit_rec) override
Definition RuntimeCallback.h:41
void gateZ(IQubitRecord *qubit_rec) override
Definition RuntimeCallback.h:52
int left_qubit_index
Definition RuntimeCallback.h:186
RuleEngine * rule_engine
Definition RuntimeCallback.h:183
int getActionIndex(IQubitRecord *const qubit_rec) override
Definition RuntimeCallback.h:172
MeasurementOutcome measureQubitRandomly(IQubitRecord *qubit_rec) override
Definition RuntimeCallback.h:26
int right_qubit_index
Definition RuntimeCallback.h:185
internal class to describe QNode's address.
Definition types.h:70
int val
Definition types.h:73
ICallBack is an interface for the callback of the Runtime.
Definition Runtime.h:58