.. index:: pair: class; QPanda::QProg .. _doxid-class_q_panda_1_1_q_prog: class QPanda::QProg =================== .. toctree:: :hidden: Overview ~~~~~~~~ Quantum program,can construct quantum circuit,data struct is linked list. :ref:`More...` .. ref-code-block:: cpp :class: doxyrest-overview-code-block #include class QProg: public :ref:`QPanda::AbstractQuantumProgram` { public: // construction :target:`QProg`(); :target:`QProg`(const QProg&); template :target:`QProg`(Ty& node); :target:`QProg`(std::shared_ptr<:ref:`QNode`>); :target:`QProg`(std::shared_ptr<:ref:`AbstractQuantumProgram`>); :target:`QProg`(:ref:`ClassicalCondition`& node); :target:`QProg`(QProg& other); // methods std::shared_ptr<:ref:`AbstractQuantumProgram`> :target:`getImplementationPtr`(); virtual void :ref:`pushBackNode`(std::shared_ptr<:ref:`QNode`>); template QProg& :ref:`operator <<` (:ref:`T` node); virtual :ref:`NodeIter` :ref:`getFirstNodeIter`(); virtual :ref:`NodeIter` :ref:`getLastNodeIter`(); virtual :ref:`NodeIter` :ref:`getEndNodeIter`(); virtual :ref:`NodeIter` :ref:`getHeadNodeIter`(); virtual :ref:`NodeIter` :ref:`insertQNode`(const :ref:`NodeIter`&, std::shared_ptr<:ref:`QNode`>); virtual :ref:`NodeIter` :ref:`deleteQNode`(:ref:`NodeIter`&); :ref:`NodeType` :target:`getNodeType`() const; virtual void :ref:`clear`(); bool :target:`is_empty`(); virtual size_t :ref:`get_max_qubit_addr`(); virtual size_t :ref:`get_used_qubits`(:ref:`QVec`&); virtual size_t :ref:`get_used_cbits`(std::vector<:ref:`ClassicalCondition`>&); virtual size_t :ref:`get_qgate_num`(); virtual bool :ref:`is_measure_last_pos`(); virtual std::map<:ref:`Qubit`*, bool> :ref:`get_measure_pos`(); virtual std::vector`*, :ref:`ClassicalCondition`>> :ref:`get_measure_qubits_cbits`(); }; Inherited Members ----------------- .. ref-code-block:: cpp :class: doxyrest-overview-inherited-code-block public: // methods virtual :ref:`NodeIter` :ref:`getFirstNodeIter`() = 0; virtual :ref:`NodeIter` :ref:`getLastNodeIter`() = 0; virtual :ref:`NodeIter` :ref:`getEndNodeIter`() = 0; virtual :ref:`NodeIter` :ref:`getHeadNodeIter`() = 0; virtual :ref:`NodeIter` :ref:`insertQNode`(const :ref:`NodeIter`&, std::shared_ptr<:ref:`QNode`>) = 0; virtual :ref:`NodeIter` :ref:`deleteQNode`(:ref:`NodeIter`&) = 0; virtual void :ref:`pushBackNode`(std::shared_ptr<:ref:`QNode`>) = 0; virtual void :ref:`clear`() = 0; virtual size_t :ref:`get_max_qubit_addr`() = 0; virtual size_t :ref:`get_used_qubits`(:ref:`QVec`&) = 0; virtual size_t :ref:`get_used_cbits`(std::vector<:ref:`ClassicalCondition`>&) = 0; virtual size_t :ref:`get_qgate_num`() = 0; virtual bool :ref:`is_measure_last_pos`() = 0; virtual std::map<:ref:`Qubit`*, bool> :ref:`get_measure_pos`() = 0; virtual std::vector`*, :ref:`ClassicalCondition`>> :ref:`get_measure_qubits_cbits`() = 0; .. _details-class_q_panda_1_1_q_prog: Detailed Documentation ~~~~~~~~~~~~~~~~~~~~~~ Quantum program,can construct quantum circuit,data struct is linked list. Methods ------- .. index:: pair: function; pushBackNode .. _doxid-class_q_panda_1_1_q_prog_1a52f04bef1c8f76e5d24e107ce15292a1: .. ref-code-block:: cpp :class: doxyrest-title-code-block virtual void pushBackNode(std::shared_ptr<:ref:`QNode`>) Insert a new Node at the end of current quantum circuit. .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - QNode\* - quantum node .. rubric:: Returns: void .. rubric:: See also: :ref:`QNode ` .. index:: pair: function; operator<< .. _doxid-class_q_panda_1_1_q_prog_1a5e8afc385e3e7b19e5c43a5535d37e6f: .. ref-code-block:: cpp :class: doxyrest-title-code-block template QProg& operator << (:ref:`T` node) Insert new Node at the end of current node. if T_GATE is QSingleGateNode/QDoubleGateNode/QIfEndNode, deep copy T_GATE and insert it into left :ref:`QProg `; if T_GATE is QIfProg/QWhileProg/QProg,deepcopy IF/WHILE/QProg circuit and insert it into left :ref:`QProg ` .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - Node - QGate/QCircuit/QProg/QIf/QWhile .. rubric:: Returns: :ref:`QPanda::QProg ` & quantum program .. rubric:: See also: :ref:`QNode ` .. index:: pair: function; getFirstNodeIter .. _doxid-class_q_panda_1_1_q_prog_1adda1747aa1c60d93d26fe395dd2d3c6d: .. ref-code-block:: cpp :class: doxyrest-title-code-block virtual :ref:`NodeIter` getFirstNodeIter() Get the first :ref:`NodeIter `. .. rubric:: Returns: :ref:`NodeIter ` .. index:: pair: function; getLastNodeIter .. _doxid-class_q_panda_1_1_q_prog_1a5009bfd3c6ae07e239ad41590069b076: .. ref-code-block:: cpp :class: doxyrest-title-code-block virtual :ref:`NodeIter` getLastNodeIter() Get the last :ref:`NodeIter `. .. rubric:: Returns: :ref:`NodeIter ` .. index:: pair: function; getEndNodeIter .. _doxid-class_q_panda_1_1_q_prog_1a4fef9766cd8bfeb5a27e7bd6db5e8601: .. ref-code-block:: cpp :class: doxyrest-title-code-block virtual :ref:`NodeIter` getEndNodeIter() Get the end :ref:`NodeIter `. .. rubric:: Returns: :ref:`NodeIter ` .. index:: pair: function; getHeadNodeIter .. _doxid-class_q_panda_1_1_q_prog_1a6c602df4ad87db532fd40bb8b83de726: .. ref-code-block:: cpp :class: doxyrest-title-code-block virtual :ref:`NodeIter` getHeadNodeIter() Get the head :ref:`NodeIter `. .. rubric:: Returns: :ref:`NodeIter ` .. index:: pair: function; insertQNode .. _doxid-class_q_panda_1_1_q_prog_1a0367d361d37e06aae2ce2e7cc2a272fa: .. ref-code-block:: cpp :class: doxyrest-title-code-block virtual :ref:`NodeIter` insertQNode(const :ref:`NodeIter`&, std::shared_ptr<:ref:`QNode`>) Insert a new :ref:`QNode ` at the location specified by :ref:`NodeIter `. .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - NodeIter& - specified location * - std::shared_ptr - Inserted :ref:`QNode ` .. rubric:: Returns: :ref:`NodeIter ` .. index:: pair: function; deleteQNode .. _doxid-class_q_panda_1_1_q_prog_1a7e13f7b5bc298632c64bdf04c9e3b90f: .. ref-code-block:: cpp :class: doxyrest-title-code-block virtual :ref:`NodeIter` deleteQNode(:ref:`NodeIter`&) Delete a :ref:`QNode ` at the location specified by :ref:`NodeIter `. .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - NodeIter& - specified location .. rubric:: Returns: :ref:`NodeIter ` Deleted :ref:`NodeIter ` .. index:: pair: function; clear .. _doxid-class_q_panda_1_1_q_prog_1a4539154daf7588ef19dce47f1838454b: .. ref-code-block:: cpp :class: doxyrest-title-code-block virtual void clear() Clear all node in current quantum program node. .. index:: pair: function; get_max_qubit_addr .. _doxid-class_q_panda_1_1_q_prog_1a580e83b888c69247b2d00cf3bf15a78d: .. ref-code-block:: cpp :class: doxyrest-title-code-block virtual size_t get_max_qubit_addr() Gets the maximum physical address of used qubits. .. rubric:: Returns: size_t maximum physical address .. index:: pair: function; get_used_qubits .. _doxid-class_q_panda_1_1_q_prog_1acf9d0368e058874908b2e7ac44d07b08: .. ref-code-block:: cpp :class: doxyrest-title-code-block virtual size_t get_used_qubits(:ref:`QVec`&) Get the used qubits for current quantum program. .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - :ref:`QVec ` - used qubits vector .. rubric:: Returns: size_t .. index:: pair: function; get_used_cbits .. _doxid-class_q_panda_1_1_q_prog_1ad66c6274b3775ddc40fc656ff57b4623: .. ref-code-block:: cpp :class: doxyrest-title-code-block virtual size_t get_used_cbits(std::vector<:ref:`ClassicalCondition`>&) Get the used classical bits for current quantum program. .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - :ref:`QVec ` - used qubits vector .. rubric:: Returns: size_t .. index:: pair: function; get_qgate_num .. _doxid-class_q_panda_1_1_q_prog_1a1ae4a68e8c4105edc68b6902ec271487: .. ref-code-block:: cpp :class: doxyrest-title-code-block virtual size_t get_qgate_num() Get current quantum program qgate number. .. rubric:: Returns: size_t .. index:: pair: function; is_measure_last_pos .. _doxid-class_q_panda_1_1_q_prog_1abceefb7494911603bc8a26f8f9ef033e: .. ref-code-block:: cpp :class: doxyrest-title-code-block virtual bool is_measure_last_pos() Measure operation in the last position of the program. .. rubric:: Returns: bool .. index:: pair: function; get_measure_pos .. _doxid-class_q_panda_1_1_q_prog_1ac19d9f00f216057c4d63b61379fe2585: .. ref-code-block:: cpp :class: doxyrest-title-code-block virtual std::map<:ref:`Qubit`*, bool> get_measure_pos() Get Measure operation position of the program. .. rubric:: Returns: std::map .. index:: pair: function; get_measure_qubits_cbits .. _doxid-class_q_panda_1_1_q_prog_1ad8648f6fc7eea1db2f1d76905055fbc7: .. ref-code-block:: cpp :class: doxyrest-title-code-block virtual std::vector`*, :ref:`ClassicalCondition`>> get_measure_qubits_cbits() Get Measure operation qubits and cbits vector. .. rubric:: Returns: std::vector>