MCPcopy Create free account
hub / github.com/OriginQ/QPanda-2 / deepCopyQNode

Method deepCopyQNode

Core/QuantumCircuit/QNodeDeepCopy.cpp:408–463  ·  view source on GitHub ↗

* public interface ********************************************************************/

Source from the content-addressed store, hash-verified

406* public interface
407********************************************************************/
408std::shared_ptr<QNode> QPanda::deepCopyQNode(std::shared_ptr<QNode> src_node)
409{
410 QNodeDeepCopy reproduction;
411 switch (src_node->getNodeType())
412 {
413 case GATE_NODE:
414 {
415 auto gate = reproduction.copy_node(std::dynamic_pointer_cast<AbstractQGateNode>(src_node));
416 return std::dynamic_pointer_cast<QNode>(gate.getImplementationPtr());
417 }
418 break;
419
420 case CIRCUIT_NODE:
421 {
422 auto cir_node = reproduction.copy_node(std::dynamic_pointer_cast<AbstractQuantumCircuit>(src_node));
423 return std::dynamic_pointer_cast<QNode>(cir_node.getImplementationPtr());
424 }
425 break;
426
427 case PROG_NODE:
428 {
429 auto prog_node = reproduction.copy_node(std::dynamic_pointer_cast<AbstractQuantumProgram>(src_node));
430 return std::dynamic_pointer_cast<QNode>(prog_node.getImplementationPtr());
431 }
432 break;
433
434 case MEASURE_GATE:
435 {
436 auto meas_node = reproduction.copy_node(std::dynamic_pointer_cast<AbstractQuantumMeasure>(src_node));
437 return std::dynamic_pointer_cast<QNode>(meas_node.getImplementationPtr());
438 }
439 break;
440
441 case QIF_START_NODE:
442 case CLASS_COND_NODE:
443 {
444 auto cls_node = reproduction.copy_node(std::dynamic_pointer_cast<AbstractClassicalProg>(src_node));
445 return std::dynamic_pointer_cast<QNode>(cls_node.getImplementationPtr());
446 }
447 case WHILE_START_NODE:
448 {
449 auto control_flow_node = reproduction.copy_node(std::dynamic_pointer_cast<AbstractControlFlowNode>(src_node));
450 return std::dynamic_pointer_cast<QNode>(control_flow_node);
451 }
452 break;
453
454 case RESET_NODE:
455 {
456 auto reset_node = reproduction.copy_node(std::dynamic_pointer_cast<AbstractQuantumReset>(src_node));
457 return std::dynamic_pointer_cast<QNode>(reset_node.getImplementationPtr());
458 }
459 break;
460 }
461
462 QCERR_AND_THROW(run_fail, "Error: unsupport copy-node type.");
463}

Callers

nothing calls this directly

Calls 3

copy_nodeMethod · 0.80
getNodeTypeMethod · 0.45
getImplementationPtrMethod · 0.45

Tested by

no test coverage detected