Home | History | Annotate | Download | only in fst

Lines Matching defs:arc

44 // template <class Arc>
47 // typedef typename Arc::StateId StateId;
51 // void InitVisit(const Fst<Arc> &fst);
54 // // Invoked when tree arc examined (to white/undiscovered state)
55 // bool TreeArc(StateId s, const Arc &a);
56 // // Invoked when back arc examined (to grey/unfinished state)
57 // bool BackArc(StateId s, const Arc &a);
58 // // Invoked when forward or cross arc examined (to black/finished state)
59 // bool ForwardOrCrossArc(StateId s, const Arc &a);
60 // // Invoked when state finished (PARENT is kNoStateID and ARC == NULL
62 // void FinishState(StateId s, StateId parent, const Arc *parent_arc);
73 template <class Arc>
75 typedef typename Arc::StateId StateId;
77 DfsState(const Fst<Arc> &fst, StateId s): state_id(s), arc_iter(fst, s) {}
80 ArcIterator< Fst<Arc> > arc_iter; // and its corresponding arcs
91 template <class Arc, class V, class ArcFilter>
92 void DfsVisit(const Fst<Arc> &fst, V *visitor, ArcFilter filter) {
93 typedef typename Arc::StateId StateId;
104 stack<DfsState<Arc> *> state_stack; // DFS execution stack
114 StateIterator< Fst<Arc> > siter(fst);
122 state_stack.push(new DfsState<Arc>(fst, root));
125 DfsState<Arc> *dfs_state = state_stack.top();
131 ArcIterator< Fst<Arc> > &aiter = dfs_state->arc_iter;
137 DfsState<Arc> *parent_state = state_stack.top();
139 ArcIterator< Fst<Arc> > &piter = parent_state->arc_iter;
147 const Arc &arc = aiter.Value();
148 if (arc.nextstate >= state_color.size()) {
149 nstates = arc.nextstate + 1;
152 if (!filter(arc)) {
156 int next_color = state_color[arc.nextstate];
160 dfs = visitor->TreeArc(s, arc);
162 state_color[arc.nextstate] = kDfsGrey;
163 state_stack.push(new DfsState<Arc>(fst, arc.nextstate));
164 dfs = visitor->InitState(arc.nextstate, root);
167 dfs = visitor->BackArc(s, arc);
171 dfs = visitor->ForwardOrCrossArc(s, arc);
198 template <class Arc, class V>
199 void DfsVisit(const Fst<Arc> &fst, V *visitor) {
200 DfsVisit(fst, visitor, AnyArcFilter<Arc>());