Home | History | Annotate | Download | only in fst

Lines Matching refs:label

19 // Class to determine if a non-epsilon label can be read as the
41 // Stores shareable data for label reachable class copies.
45 typedef L Label;
66 Label FinalLabel() {
105 Label final_label_; // Final label
107 unordered_map<L, L> label2index_; // Finds index for a label.
117 // SetState(s). Then a label l can be reached from state s of FST f
148 typedef typename A::Label Label;
150 typedef typename IntervalSet<Label>::Interval Interval;
156 data_(new LabelReachableData<Label>(reach_input, keep_relabel_data)),
167 explicit LabelReachable(LabelReachableData<Label> *data, S *s = 0)
199 // Relabels w.r.t labels that give compact label sets.
200 Label Relabel(Label label) {
201 if (label == 0 || error_)
202 return label;
203 unordered_map<Label, Label> &label2index = *data_->Label2Index();
204 Label &relabel = label2index[label];
205 if (!relabel) // Add new label
210 // Relabels Fst w.r.t to labels that give compact label sets.
239 void RelabelPairs(vector<pair<Label, Label> > *pairs,
242 unordered_map<Label, Label> &label2index = *data_->Label2Index();
244 for (typename unordered_map<Label, Label>::const_iterator
247 pairs->push_back(pair<Label, Label>(it->first, it->second));
249 // Ensures any label in [1, label2index().size()] is mapped either
252 typename unordered_map<Label, Label>::const_iterator
255 pairs->push_back(pair<Label, Label>(i, label2index.size() + 1));
270 // Can reach this label from current state?
272 bool Reach(Label label) {
273 if (label == 0 || error_)
275 vector< IntervalSet<Label> > &isets = *data_->IntervalSets();
276 return isets[s_].Member(label);
283 vector< IntervalSet<Label> > &isets = *data_->IntervalSets();
296 // Can reach any arc iterator label between iterator positions
305 vector< IntervalSet<Label> > &isets = *data_->IntervalSets();
324 Label reach_label = kNoLabel;
328 Label label = aiter_input ? arc.ilabel : arc.olabel;
329 if (label == reach_label || Reach(label)) {
330 reach_label = label;
392 // Access to the relabeling map. Excludes epsilon (0) label but
395 const unordered_map<Label, Label>& Label2Index() const {
399 LabelReachableData<Label> *GetData() const { return data_; }
405 // ReachInput()) to new label-specific final states. Each original
421 Label label = data_->ReachInput() ? arc.ilabel : arc.olabel;
422 if (label) {
423 if (label2state_.find(label) == label2state_.end()) {
424 label2state_[label] = ons;
428 arc.nextstate = label2state_[label];
468 StateReachable<A, Label> state_reachable(*fst_);
474 vector<Label> &state2index = state_reachable.State2Index();
475 vector< IntervalSet<Label> > &isets = *data_->IntervalSets();
479 unordered_map<Label, Label> &label2index = *data_->Label2Index();
480 for (typename unordered_map<Label, StateId>::const_iterator
484 Label l = it->first;
486 Label i = state2index[s];
509 Label match_label) const {
519 Label label = aiter_input ?
521 if (label > match_label) {
523 } else if (label < match_label) {
526 // Find first matching label (when non-deterministic)
529 label = aiter_input ? aiter->Value().ilabel : aiter->Value().olabel;
530 if (label != match_label) {
547 unordered_map<Label, StateId> label2state_; // Finds final state for a label
553 LabelReachableData<Label> *data_; // Shareable data between copies