Overview
#include <ProcessOnTraversing.h>
class ProcessOnTraversing: protected QPanda::TraverseByNodeIter
{
public:
// typedefs
typedef TopologSequence<std::pair<size_t, NodeIter>> layer_iter_seq;
// methods
virtual void process(const bool on_travel_end) = 0;
virtual void run_traversal(
QProg src_prog,
const QVec qubits = {}
);
virtual void do_process(const bool on_travel_end);
virtual void execute(
std::shared_ptr<AbstractQGateNode> cur_node,
std::shared_ptr<QNode> parent_node,
QCircuitParam& cir_param,
NodeIter& cur_node_iter
);
virtual void execute(
std::shared_ptr<AbstractQuantumMeasure> cur_node,
std::shared_ptr<QNode> parent_node,
QCircuitParam& cir_param,
NodeIter& cur_node_iter
);
virtual void execute(
std::shared_ptr<AbstractQuantumReset> cur_node,
std::shared_ptr<QNode> parent_node,
QCircuitParam& cir_param,
NodeIter& cur_node_iter
);
virtual void execute(
std::shared_ptr<AbstractControlFlowNode> cur_node,
std::shared_ptr<QNode> parent_node,
QCircuitParam& cir_param,
NodeIter& cur_node_iter
);
virtual void execute(
std::shared_ptr<AbstractClassicalProg> cur_node,
std::shared_ptr<QNode> parent_node,
QCircuitParam& cir_param,
NodeIter& cur_node_iter
);
virtual void execute(
std::shared_ptr<AbstractQuantumCircuit> cur_node,
std::shared_ptr<QNode> parent_node,
QCircuitParam& cir_param,
NodeIter& cur_node_iter
);
virtual void execute(
std::shared_ptr<AbstractQuantumProgram> cur_node,
std::shared_ptr<QNode> parent_node,
QCircuitParam& cir_param,
NodeIter& cur_node_iter
);
virtual void gates_sink_to_topolog_sequence(
OptimizerSink& gate_buf,
LayeredTopoSeq& seq,
const size_t max_output_layer = MAX_LAYER
);
virtual void clean_gate_buf_to_cir(QProg& cir, bool b_clean_all_buf = false);
virtual void clean_gate_buf(bool b_clean_all_buf = false);
virtual void drop_gates(const size_t max_drop_layer);
virtual void seq_to_cir(
layer_iter_seq& tmp_seq,
QProg& prog,
const size_t start_layer_to_cir,
const size_t max_output_layer
);
virtual void seq_to_cir(
layer_iter_seq& tmp_seq,
QProg& prog
);
virtual void add_node_to_seq(
layer_iter_seq& tmp_seq,
NodeIter node_iter,
const size_t layer
);
};
// direct descendants
class QCircuitOPtimizer;
Inherited Members
public:
// methods
virtual void execute(
std::shared_ptr<AbstractQGateNode> cur_node,
std::shared_ptr<QNode> parent_node,
Args&&... func_args
);
virtual void execute(
std::shared_ptr<AbstractQuantumMeasure> cur_node,
std::shared_ptr<QNode> parent_node,
Args&&... func_args
);
virtual void execute(
std::shared_ptr<AbstractQuantumReset> cur_node,
std::shared_ptr<QNode> parent_node,
Args&&... func_args
);
virtual void execute(
std::shared_ptr<AbstractControlFlowNode> cur_node,
std::shared_ptr<QNode> parent_node,
Args&&... func_args
);
virtual void execute(
std::shared_ptr<AbstractQuantumCircuit> cur_node,
std::shared_ptr<QNode> parent_node,
Args&&... func_args
);
virtual void execute(
std::shared_ptr<AbstractQuantumProgram> cur_node,
std::shared_ptr<QNode> parent_node,
Args&&... func_args
);
virtual void execute(
std::shared_ptr<AbstractClassicalProg> cur_node,
std::shared_ptr<QNode> parent_node,
Args&&... func_args
);
virtual void execute(
std::shared_ptr<AbstractQGateNode> cur_node,
std::shared_ptr<QNode> parent_node,
QCircuitParam& cir_param,
NodeIter& cur_node_iter
);
virtual void execute(
std::shared_ptr<AbstractQuantumMeasure> cur_node,
std::shared_ptr<QNode> parent_node,
QCircuitParam& cir_param,
NodeIter& cur_node_iter
);
virtual void execute(
std::shared_ptr<AbstractQuantumReset> cur_node,
std::shared_ptr<QNode> parent_node,
QCircuitParam& cir_param,
NodeIter& cur_node_iter
);
virtual void execute(
std::shared_ptr<AbstractClassicalProg> cur_node,
std::shared_ptr<QNode> parent_node,
QCircuitParam& cir_param,
NodeIter& cur_node_iter
);
virtual void execute(
std::shared_ptr<AbstractControlFlowNode> cur_node,
std::shared_ptr<QNode> parent_node,
QCircuitParam& cir_param,
NodeIter& cur_node_iter
);
virtual void execute(
std::shared_ptr<AbstractQuantumCircuit> cur_node,
std::shared_ptr<QNode> parent_node,
QCircuitParam& cir_param,
NodeIter& cur_node_iter
);
virtual void execute(
std::shared_ptr<AbstractQuantumProgram> cur_node,
std::shared_ptr<QNode> parent_node,
QCircuitParam& cir_param,
NodeIter& cur_node_iter
);
virtual void traverse_qprog(QProg prog);