template class QPanda::TraversalInterface

Overview

All objects that want to use the class Traversal need to integrate this class. More…

#include <Traversal.h>

template <typename... Args>
class TraversalInterface
{
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
        );
};

// direct descendants

class CancelControlQubitVector;
class DecomposeControlSingleQGateIntoMetadataDoubleQGate;
class DecomposeControlUnitarySingleQGate;
class DecomposeDoubleQGate;
class DecomposeMultipleControlQGate;
class DecomposeUnitarySingleQGateIntoMetadataSingleQGate;
class DeleteUnitQNode;
class MergeSingleGate;
class MPSQVM;
class NoiseSimulator;
class PartialAmplitudeQVM;
class QCodarMatch;
class QGateCompare;
class QGateCounter;
class QNodeDeepCopy;
class QProgFlattening;
class QProgStored;
class QProgToOriginIR;
class QProgToQCircuit;
class QProgToQGate;
class QProgToQMeasure;
class QProgToQuil;
class SingleAmplitudeQVM;
class TopologyMatch;
class TraverseByNodeIter;

Detailed Documentation

All objects that want to use the class Traversal need to integrate this class.

Methods

virtual void execute(
    std::shared_ptr<AbstractQGateNode> cur_node,
    std::shared_ptr<QNode> parent_node,
    Args&&... func_args
    )

Execution traversal qgatenode.

Parameters:

AbstractQGateNode*

quantum gate

QNode*

parent Node

Returns:

void

virtual void execute(
    std::shared_ptr<AbstractQuantumMeasure> cur_node,
    std::shared_ptr<QNode> parent_node,
    Args&&... func_args
    )

Execution traversal measure node.

Parameters:

AbstractQuantumMeasure*

measure node

QNode*

parent Node

Returns:

void

virtual void execute(
    std::shared_ptr<AbstractQuantumReset> cur_node,
    std::shared_ptr<QNode> parent_node,
    Args&&... func_args
    )

Execution traversal reset node.

Parameters:

AbstractQuantumReset*

reset node

QNode*

parent Node

Returns:

void

virtual void execute(
    std::shared_ptr<AbstractControlFlowNode> cur_node,
    std::shared_ptr<QNode> parent_node,
    Args&&... func_args
    )

Execution traversal control flow node.

Parameters:

AbstractControlFlowNode*

control flow node

QNode*

parent Node

Returns:

void

virtual void execute(
    std::shared_ptr<AbstractQuantumCircuit> cur_node,
    std::shared_ptr<QNode> parent_node,
    Args&&... func_args
    )

Execution traversal qcircuit.

Parameters:

AbstractQuantumCircuit*

quantum circuit

QNode*

parent Node

Returns:

void

virtual void execute(
    std::shared_ptr<AbstractQuantumProgram> cur_node,
    std::shared_ptr<QNode> parent_node,
    Args&&... func_args
    )

Execution traversal qprog.

Parameters:

AbstractQuantumProgram*

quantum prog

QNode*

parent Node

Returns:

void

virtual void execute(
    std::shared_ptr<AbstractClassicalProg> cur_node,
    std::shared_ptr<QNode> parent_node,
    Args&&... func_args
    )

Execution traversal qprog.

Parameters:

AbstractClassicalProg*

classical prog

QNode*

parent Node

Returns:

void