47 #ifdef NO_STD_CHEADERS
99 wk_vertex = RIFG::NIL;
110 TarjWork::~TarjWork()
143 TarjTreeNode::TarjTreeNode()
147 type = NestedSCR::NODE_ACYCLIC;
168 #define TARJ_nodeid(name) (tarj[name].nodeid)
169 #define TARJ_outer(name) (tarj[name].outer)
170 #define TARJ_inners(name) (tarj[name].inners)
171 #define TARJ_next(name) (tarj[name].next)
172 #define TARJ_level(name) (tarj[name].level)
173 #define TARJ_type(name) (tarj[name].type)
174 #define TARJ_last(name) (tarj[name].last)
175 #define TARJ_last_id(name) (tarj[name].last_id)
176 #define TARJ_loopIndex(name) (tarj[name].loopIndex)
177 #define TARJ_contains(a,b) \
178 ( ( tarj[a].prenum <= tarj[b].prenum ) && \
179 ( tarj[b].prenum <= tarj[tarj[a].last].prenum ) \
183 #define vertex(x) (wk[x].wk_vertex)
184 #define TLast(x) (wk[x].wk_last)
185 #define header(x) (wk[x].wk_header)
186 #define nextP(x) (wk[x].wk_nextP)
187 #define nextQ(x) (wk[x].wk_nextQ)
188 #define inP(x) (wk[x].wk_inP)
189 #define isCyclic(x) (wk[x].wk_isCyclic)
190 #define reducible(x) (wk[x].wk_reducible)
191 #define backPreds(x) (wk[x].backPreds)
192 #define nonBackPreds(x) (wk[x].nonBackPreds)
205 #define is_backedge(a,b) ((b <= a) & (a <= TLast(b)))
207 #define dfnum(v) (nodeid_to_dfnum_map[v])
267 for ( ; (ni->isValid()); ++(*ni)) {
269 int gdfn =
dfnum(gId);
279 std::list<RIFG::NodeId>::iterator i;
284 int gdfn =
dfnum(gId);
311 unsigned int g_size =
rifg->getHighWaterMarkNodeId() + 1;
332 for ( ; ni->isValid(); ++(*ni)) {
333 int nid = ni->current();
351 for (; (ei->isValid()); ++(*ei)) {
352 succ = ei->current();
353 int son =
rifg->getEdgeSink(succ);
373 for ( ; (ei->isValid()); ++(*ei)) {
374 int prednum =
dfnum(
rifg->getEdgeSrc(ei->current()));
408 std::list<int>::iterator prednum;
450 std::list<int>::iterator prednum;
467 if ((!
inP(yy)) & (yy != w)) {
470 firstP = firstQ = yy;
506 firstP =
nextP(firstP);
631 printf(
"Tarjan interval tree: <node id>(level,type)::IntervalIndex\n");
643 static const char *
NodeType[] = {
"NOTHING",
"Acyclic",
644 "Interval",
"Irreducible"};
651 printf(
"%*s%d(%d,%s)::%d\n", indent,
" ",
693 int dfn_src =
dfnum(src);
694 int dfn_lca =
dfnum(lca);
713 int dfn_src =
dfnum(src);
736 int dfn_sink =
dfnum(sink);
737 int dfn_anc =
dfnum(anc);
739 if (dfn_anc == dfn_sink) {
780 int dfn_b =
dfnum(b);
799 src =
rifg->getEdgeSrc(edgeId);
800 dest =
rifg->getEdgeSink(edgeId);
848 int dfn_id =
dfnum(
id);