class QPanda::QProg

Overview

Quantum program,can construct quantum circuit,data struct is linked list. More…

#include <QProgram.h>

class QProg: public QPanda::AbstractQuantumProgram
{
public:
    // construction

    QProg();
    QProg(const QProg&);

    template <typename Ty>
    QProg(Ty& node);

    QProg(std::shared_ptr<QNode>);
    QProg(std::shared_ptr<AbstractQuantumProgram>);
    QProg(ClassicalCondition& node);
    QProg(QProg& other);

    // methods

    std::shared_ptr<AbstractQuantumProgram> getImplementationPtr();
    virtual void pushBackNode(std::shared_ptr<QNode>);

    template <typename T>
    QProg& operator << (T node);

    virtual NodeIter getFirstNodeIter();
    virtual NodeIter getLastNodeIter();
    virtual NodeIter getEndNodeIter();
    virtual NodeIter getHeadNodeIter();
    virtual NodeIter insertQNode(const NodeIter&, std::shared_ptr<QNode>);
    virtual NodeIter deleteQNode(NodeIter&);
    NodeType getNodeType() const;
    virtual void clear();
    bool is_empty();
    virtual size_t get_max_qubit_addr();
    virtual size_t get_used_qubits(QVec&);
    virtual size_t get_used_cbits(std::vector<ClassicalCondition>&);
    virtual size_t get_qgate_num();
    virtual bool is_measure_last_pos();
    virtual std::map<Qubit*, bool> get_measure_pos();
    virtual std::vector<std::pair<Qubit*, ClassicalCondition>> get_measure_qubits_cbits();
};

Inherited Members

public:
    // methods

    virtual NodeIter getFirstNodeIter() = 0;
    virtual NodeIter getLastNodeIter() = 0;
    virtual NodeIter getEndNodeIter() = 0;
    virtual NodeIter getHeadNodeIter() = 0;
    virtual NodeIter insertQNode(const NodeIter&, std::shared_ptr<QNode>) = 0;
    virtual NodeIter deleteQNode(NodeIter&) = 0;
    virtual void pushBackNode(std::shared_ptr<QNode>) = 0;
    virtual void clear() = 0;
    virtual size_t get_max_qubit_addr() = 0;
    virtual size_t get_used_qubits(QVec&) = 0;
    virtual size_t get_used_cbits(std::vector<ClassicalCondition>&) = 0;
    virtual size_t get_qgate_num() = 0;
    virtual bool is_measure_last_pos() = 0;
    virtual std::map<Qubit*, bool> get_measure_pos() = 0;
    virtual std::vector<std::pair<Qubit*, ClassicalCondition>> get_measure_qubits_cbits() = 0;

Detailed Documentation

Quantum program,can construct quantum circuit,data struct is linked list.

Methods

virtual void pushBackNode(std::shared_ptr<QNode>)

Insert a new Node at the end of current quantum circuit.

Parameters:

QNode*

quantum node

Returns:

void

See also:

QNode

template <typename T>
QProg& operator << (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 QProg; if T_GATE is QIfProg/QWhileProg/QProg,deepcopy IF/WHILE/QProg circuit and insert it into left QProg

Parameters:

Node

QGate/QCircuit/QProg/QIf/QWhile

Returns:

QPanda::QProg & quantum program

See also:

QNode

virtual NodeIter getFirstNodeIter()

Get the first NodeIter.

Returns:

NodeIter

virtual NodeIter getLastNodeIter()

Get the last NodeIter.

Returns:

NodeIter

virtual NodeIter getEndNodeIter()

Get the end NodeIter.

Returns:

NodeIter

virtual NodeIter getHeadNodeIter()

Get the head NodeIter.

Returns:

NodeIter

virtual NodeIter insertQNode(const NodeIter&, std::shared_ptr<QNode>)

Insert a new QNode at the location specified by NodeIter.

Parameters:

NodeIter&

specified location

std::shared_ptr<QNode>

Inserted QNode

Returns:

NodeIter

virtual NodeIter deleteQNode(NodeIter&)

Delete a QNode at the location specified by NodeIter.

Parameters:

NodeIter&

specified location

Returns:

NodeIter Deleted NodeIter

virtual void clear()

Clear all node in current quantum program node.

virtual size_t get_max_qubit_addr()

Gets the maximum physical address of used qubits.

Returns:

size_t maximum physical address

virtual size_t get_used_qubits(QVec&)

Get the used qubits for current quantum program.

Parameters:

QVec

used qubits vector

Returns:

size_t

virtual size_t get_used_cbits(std::vector<ClassicalCondition>&)

Get the used classical bits for current quantum program.

Parameters:

QVec

used qubits vector

Returns:

size_t

virtual size_t get_qgate_num()

Get current quantum program qgate number.

Returns:

size_t

virtual bool is_measure_last_pos()

Measure operation in the last position of the program.

Returns:

bool

virtual std::map<Qubit*, bool> get_measure_pos()

Get Measure operation position of the program.

Returns:

std::map<Qubit*, bool>

virtual std::vector<std::pair<Qubit*, ClassicalCondition>> get_measure_qubits_cbits()

Get Measure operation qubits and cbits vector.

Returns:

std::vector<std::pair<Qubit*, ClassicalCondition>>