| 1535 | } |
| 1536 | |
| 1537 | void CopyGraph(const Graph& src, Graph* dest) { |
| 1538 | for (Node* n : dest->nodes()) { |
| 1539 | CHECK(n->IsSource() || n->IsSink()) << "*dest must be empty"; |
| 1540 | } |
| 1541 | |
| 1542 | // Copy GraphDef versions |
| 1543 | dest->set_versions(src.versions()); |
| 1544 | |
| 1545 | // Copy the nodes. |
| 1546 | // "Node in src" -> "Node in *dest" |
| 1547 | gtl::FlatMap<const Node*, Node*> node_map; |
| 1548 | node_map[src.source_node()] = dest->source_node(); |
| 1549 | node_map[src.sink_node()] = dest->sink_node(); |
| 1550 | for (Node* n : src.op_nodes()) { |
| 1551 | node_map[n] = dest->CopyNode(n); |
| 1552 | } |
| 1553 | |
| 1554 | // Copy the edges |
| 1555 | for (const Edge* e : src.edges()) { |
| 1556 | Node* src_copy = node_map[e->src()]; |
| 1557 | Node* dst_copy = node_map[e->dst()]; |
| 1558 | dest->AddEdge(src_copy, e->src_output(), dst_copy, e->dst_input()); |
| 1559 | } |
| 1560 | } |
| 1561 | |
| 1562 | namespace { |
| 1563 | Node* scalar_const_node(Graph* g, int64 val, const string& name, |