MCPcopy Create free account
hub / github.com/OAID/Tengine / StripGraph

Method StripGraph

core/lib/graph.cpp:542–606  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

540}
541
542void Graph::StripGraph(void)
543{
544 int node_number = seq_nodes.size();
545
546 std::vector<Node*> new_seq;
547 std::vector<int> access_flag(node_number, 0);
548
549 /* make sure the node index is correct first */
550 for(int i = 0; i < node_number; i++)
551 seq_nodes[i]->SetNodeIndex(i);
552
553 BFSVisit(this, output_nodes,
554 graph_visit_t([&](Graph* graph, Node* node) { access_flag[node->GetNodeIndex()] = 1; }), true, false);
555
556 /* assume all the nodes in seq_nodes are in order,
557 so that we just simply collect them one by one */
558
559 for(int i = 0; i < node_number; i++)
560 {
561 if(access_flag[i])
562 {
563 new_seq.push_back(seq_nodes[i]);
564 }
565 }
566
567 for(unsigned int i = 0; i < input_nodes.size(); i++)
568 {
569 int input_index = input_nodes[i]->GetNodeIndex();
570
571 if(!access_flag[input_index])
572 {
573 access_flag[input_index] = 1;
574 new_seq.insert(new_seq.begin(), input_nodes[i]);
575 }
576 }
577
578 auto ir = seq_nodes.begin();
579
580 // removing node that can not be visited
581 for(int i = 0; i < node_number; i++)
582 {
583 if(access_flag[i])
584 {
585 ir++;
586 continue;
587 }
588
589 Node* node = (*ir);
590 ir = seq_nodes.erase(ir);
591
592 if(!RemoveNode(node))
593 break;
594 }
595
596 seq_nodes = new_seq;
597
598 for(unsigned int i = 0; i < seq_nodes.size(); i++)
599 {

Callers 1

SetGraphOutputNodeMethod · 0.80

Calls 4

SetNodeIndexMethod · 0.80
GetNodeIndexMethod · 0.80
beginMethod · 0.80
sizeMethod · 0.45

Tested by

no test coverage detected