3232#include " Mutex.hh"
3333#include " Network.hh"
3434#include " PortDirection.hh"
35+ #include " SearchPred.hh"
3536#include " Stats.hh"
3637#include " TimingArc.hh"
3738#include " TimingRole.hh"
@@ -487,7 +488,7 @@ Graph::deleteVertex(Vertex *vertex)
487488 EdgeId edge_id, next_id;
488489 for (edge_id = vertex->in_edges_ ; edge_id; edge_id = next_id) {
489490 Edge *edge = Graph::edge (edge_id);
490- next_id = edge->vertex_in_link_ ;
491+ next_id = edge->vertex_in_next_ ;
491492 deleteOutEdge (edge->from (this ), edge);
492493 edge->clear ();
493494 edges_->destroy (edge);
508509Graph::hasFaninOne (Vertex *vertex) const
509510{
510511 return vertex->in_edges_
511- && edge (vertex->in_edges_ )->vertex_in_link_ == 0 ;
512+ && edge (vertex->in_edges_ )->vertex_in_next_ == 0 ;
512513}
513514
514515void
@@ -519,12 +520,12 @@ Graph::deleteInEdge(Vertex *vertex,
519520 EdgeId prev = 0 ;
520521 for (EdgeId i = vertex->in_edges_ ;
521522 i && i != edge_id;
522- i = Graph::edge (i)->vertex_in_link_ )
523+ i = Graph::edge (i)->vertex_in_next_ )
523524 prev = i;
524525 if (prev)
525- Graph::edge (prev)->vertex_in_link_ = edge->vertex_in_link_ ;
526+ Graph::edge (prev)->vertex_in_next_ = edge->vertex_in_next_ ;
526527 else
527- vertex->in_edges_ = edge->vertex_in_link_ ;
528+ vertex->in_edges_ = edge->vertex_in_next_ ;
528529}
529530
530531void
@@ -574,6 +575,76 @@ Graph::gateEdgeArc(const Pin *in_pin,
574575
575576// //////////////////////////////////////////////////////////////
576577
578+ void
579+ Graph::visitFanouts (Vertex *vertex,
580+ SearchPred *pred,
581+ const VertexFn &fn)
582+ {
583+ if (pred->searchFrom (vertex)) {
584+ for (Edge *edge = this ->edge (vertex->out_edges_ );
585+ edge;
586+ edge = this ->edge (edge->vertex_out_next_ )) {
587+ Vertex *to_vertex = this ->vertex (edge->to_ );
588+ if (pred->searchThru (edge)
589+ && pred->searchTo (to_vertex))
590+ fn (to_vertex);
591+ }
592+ }
593+ }
594+
595+ void
596+ Graph::visitFanoutEdges (Vertex *vertex,
597+ SearchPred *pred,
598+ const EdgeFn &fn)
599+ {
600+ if (pred->searchFrom (vertex)) {
601+ for (Edge *edge = this ->edge (vertex->out_edges_ );
602+ edge;
603+ edge = this ->edge (edge->vertex_out_next_ )) {
604+ Vertex *to_vertex = this ->vertex (edge->to_ );
605+ if (pred->searchThru (edge)
606+ && pred->searchTo (to_vertex))
607+ fn (edge, to_vertex);
608+ }
609+ }
610+ }
611+
612+ void
613+ Graph::visitFanins (Vertex *vertex,
614+ SearchPred *pred,
615+ const VertexFn &fn)
616+ {
617+ if (pred->searchFrom (vertex)) {
618+ for (Edge *edge = this ->edge (vertex->in_edges_ );
619+ edge;
620+ edge = this ->edge (edge->vertex_in_next_ )) {
621+ Vertex *from_vertex = this ->vertex (edge->from_ );
622+ if (pred->searchThru (edge)
623+ && pred->searchFrom (from_vertex))
624+ fn (from_vertex);
625+ }
626+ }
627+ }
628+
629+ void
630+ Graph::visitFaninEdges (Vertex *vertex,
631+ SearchPred *pred,
632+ const EdgeFn &fn)
633+ {
634+ if (pred->searchFrom (vertex)) {
635+ for (Edge *edge = this ->edge (vertex->in_edges_ );
636+ edge;
637+ edge = this ->edge (edge->vertex_in_next_ )) {
638+ Vertex *from_vertex = this ->vertex (edge->from_ );
639+ if (pred->searchThru (edge)
640+ && pred->searchFrom (from_vertex))
641+ fn (edge, from_vertex);
642+ }
643+ }
644+ }
645+
646+ // //////////////////////////////////////////////////////////////
647+
577648Slew
578649Graph::slew (const Vertex *vertex,
579650 const RiseFall *rf,
@@ -650,7 +721,7 @@ Graph::makeEdge(Vertex *from,
650721 from->out_edges_ = edge_id;
651722
652723 // Add in edge to to vertex.
653- edge->vertex_in_link_ = to->in_edges_ ;
724+ edge->vertex_in_next_ = to->in_edges_ ;
654725 to->in_edges_ = edge_id;
655726
656727 initArcDelays (edge);
@@ -1213,7 +1284,7 @@ Edge::init(VertexId from,
12131284 from_ = from;
12141285 to_ = to;
12151286 arc_set_ = arc_set;
1216- vertex_in_link_ = edge_id_null;
1287+ vertex_in_next_ = edge_id_null;
12171288 vertex_out_next_ = edge_id_null;
12181289 vertex_out_prev_ = edge_id_null;
12191290 is_bidirect_inst_path_ = false ;
@@ -1464,6 +1535,8 @@ VertexIterator::findNext()
14641535 findNextPin ();
14651536}
14661537
1538+ // //////////////////////////////////////////////////////////////
1539+
14671540VertexInEdgeIterator::VertexInEdgeIterator (Vertex *vertex,
14681541 const Graph *graph) :
14691542 next_(graph->edge (vertex->in_edges_)),
@@ -1483,7 +1556,7 @@ VertexInEdgeIterator::next()
14831556{
14841557 Edge *next = next_;
14851558 if (next_)
1486- next_ = graph_->edge (next_->vertex_in_link_ );
1559+ next_ = graph_->edge (next_->vertex_in_next_ );
14871560 return next;
14881561}
14891562
0 commit comments