template <typename FST, typename Token>
void LatticeIncrementalDecoderTpl<FST, Token>::MarkTokensForPruning(BaseFloat beam) {
auto &last_frame_active = active_toks_.back();
BaseFloat best_cost = std::numeric_limits<BaseFloat>::infinity();
for (Token *tok = last_frame_active.toks; tok != NULL; tok = tok->next) {
BaseFloat cost = tok->tot_cost;
if (cost < best_cost) {
best_cost = cost;
best_tok = tok;
}
}
for (Token *tok = last_frame_active.toks; tok != NULL; tok = tok->next) {
auto diff = tok->tot_cost - best_cost;
if (diff > beam) {
tok->extra_cost = std::numeric_limits<BaseFloat>::infinity();
}
}
}