class QPanda::JudgeTwoNodeIterIsSwappable::OnPickUpNode

class OnPickUpNode: public QPanda::JudgeTwoNodeIterIsSwappable::AbstractJudgeStatueInterface
{
public:
    // construction

    OnPickUpNode(
        JudgeTwoNodeIterIsSwappable& parent,
        ResultStatue s
        );

    // methods

    void handle_QGate(
        std::shared_ptr<AbstractQGateNode> cur_node,
        std::shared_ptr<QNode> parent_node,
        QCircuitParam& cir_param,
        NodeIter& cur_node_iter
        );

    void handle_QMeasure(
        std::shared_ptr<AbstractQuantumMeasure> cur_node,
        std::shared_ptr<QNode> parent_node,
        QCircuitParam& cir_param,
        NodeIter& cur_node_iter
        );

    void handle_QReset(
        std::shared_ptr<AbstractQuantumReset> cur_node,
        std::shared_ptr<QNode> parent_node,
        QCircuitParam& cir_param,
        NodeIter& cur_node_iter
        );

    void enter_flow_ctrl_node();
    void leave_flow_ctrl_node();

    void on_enter_circuit(
        std::shared_ptr<AbstractQuantumCircuit> cur_node,
        QCircuitParam& cir_param
        );

    void on_leave_circuit(
        std::shared_ptr<AbstractQuantumCircuit> cur_node,
        QCircuitParam& cir_param
        );

    void on_enter_prog(
        std::shared_ptr<AbstractQuantumProgram> cur_node,
        std::shared_ptr<QNode> parent_node,
        QCircuitParam& cir_param
        );

    void on_leave_prog(
        std::shared_ptr<AbstractQuantumProgram> cur_node,
        std::shared_ptr<QNode> parent_node,
        QCircuitParam& cir_param
        );

    ResultStatue get_statue() const;
};