15b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin
25b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin// Licensed under the Apache License, Version 2.0 (the "License");
35b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin// you may not use this file except in compliance with the License.
45b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin// You may obtain a copy of the License at
55b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin//
65b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin//     http://www.apache.org/licenses/LICENSE-2.0
75b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin//
85b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin// Unless required by applicable law or agreed to in writing, software
95b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin// distributed under the License is distributed on an "AS IS" BASIS,
105b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
115b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin// See the License for the specific language governing permissions and
125b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin// limitations under the License.
135b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin//
145b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin// Copyright 2005-2010 Google, Inc.
155b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin// Author: riley@google.com (Jake Ratkiewicz)
165b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin
175b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin#ifndef FST_SCRIPT_DISAMBIGUATE_H_
185b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin#define FST_SCRIPT_DISAMBIGUATE_H_
195b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin
205b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin#include <fst/disambiguate.h>
215b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin#include <fst/script/arg-packs.h>
225b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin#include <fst/script/fst-class.h>
235b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin#include <fst/script/weight-class.h>
245b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin
255b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkinnamespace fst {
265b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkinnamespace script {
275b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin
285b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkinstruct DisambiguateOptions {
295b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin  float delta;
305b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin  WeightClass weight_threshold;
315b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin  int64 state_threshold;
325b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin  int64 subsequential_label;
335b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin
345b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin  explicit DisambiguateOptions(float d = fst::kDelta,
355b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin                              WeightClass w =
365b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin                                fst::script::WeightClass::Zero(),
375b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin                              int64 n = fst::kNoStateId, int64 l = 0)
385b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin      : delta(d), weight_threshold(w), state_threshold(n),
395b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin        subsequential_label(l) {}
405b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin};
415b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin
425b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkintypedef args::Package<const FstClass&, MutableFstClass*,
435b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin                      const DisambiguateOptions &> DisambiguateArgs;
445b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin
455b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkintemplate<class Arc>
465b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkinvoid Disambiguate(DisambiguateArgs *args) {
475b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin  const Fst<Arc> &ifst = *(args->arg1.GetFst<Arc>());
485b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin  MutableFst<Arc> *ofst = args->arg2->GetMutableFst<Arc>();
495b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin  const DisambiguateOptions &opts = args->arg3;
505b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin
515b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin  fst::DisambiguateOptions<Arc> detargs;
525b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin  detargs.delta = opts.delta;
535b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin  detargs.weight_threshold =
545b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin      *(opts.weight_threshold.GetWeight<typename Arc::Weight>());
555b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin  detargs.state_threshold = opts.state_threshold;
565b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin  detargs.subsequential_label = opts.subsequential_label;
575b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin
585b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin  Disambiguate(ifst, ofst, detargs);
595b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin}
605b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin
615b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkinvoid Disambiguate(const FstClass &ifst, MutableFstClass *ofst,
625b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin                 const DisambiguateOptions &opts =
635b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin                   fst::script::DisambiguateOptions());
645b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin
655b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin}  // namespace script
665b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin}  // namespace fst
675b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin
685b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin#endif  // FST_SCRIPT_DISAMBIGUATE_H_
69