21 #ifndef FST_RATIONAL_H_ 22 #define FST_RATIONAL_H_ 66 using Label =
typename Arc::Label;
77 : nonterminals_(0), replace_options_(opts, 0) {
79 fst_tuples_.emplace_back(0,
nullptr);
84 nonterminals_(impl.nonterminals_),
85 replace_(impl.replace_ ? impl.replace_->Copy(true) : nullptr),
86 replace_options_(impl.replace_options_) {
88 fst_tuples_.reserve(impl.fst_tuples_.size());
89 for (
const auto &pair : impl.fst_tuples_) {
90 fst_tuples_.emplace_back(pair.first,
91 pair.second ? pair.second->Copy(
true) :
nullptr);
96 for (
auto &tuple : fst_tuples_)
delete tuple.second;
108 return Replace()->NumOutputEpsilons(s);
137 fst_tuples_.emplace_back(-1, fst1.
Copy());
138 fst_tuples_.emplace_back(-2, fst2.
Copy());
159 fst_tuples_.emplace_back(-1, fst1.
Copy());
160 fst_tuples_.emplace_back(-2, fst2.
Copy());
185 fst_tuples_.emplace_back(-1, fst.
Copy());
202 afst.
EmplaceArc(0, 0, -nonterminals_, Weight::One(), 1);
204 fst_tuples_.emplace_back(-nonterminals_, fst.
Copy());
219 afst.
EmplaceArc(0, 0, -nonterminals_, Weight::One(), 1);
225 fst_tuples_.emplace_back(-nonterminals_, fst.
Copy());
242 fst_tuples_[0].second = rfst_.
Copy();
244 std::make_unique<ReplaceFst<Arc>>(fst_tuples_, replace_options_);
246 return replace_.get();
255 mutable std::vector<std::pair<Label, const Fst<Arc> *>> fst_tuples_;
257 mutable std::unique_ptr<ReplaceFst<Arc>> replace_;
282 GetImpl()->Replace()->InitStateIterator(data);
286 GetImpl()->Replace()->InitArcIterator(s, data);
323 #endif // FST_RATIONAL_H_ uint64_t ConcatProperties(uint64_t inprops1, uint64_t inprops2, bool delayed=false)
size_t NumOutputEpsilons(StateId s)
void SetProperties(uint64_t props)
void InitStateIterator(StateIteratorData< Arc > *data) const override
void AddConcat(const Fst< Arc > &fst, bool append)
void SetStart(StateId s) override
RationalFst(const RationalFstOptions &opts=RationalFstOptions())
virtual uint64_t Properties(uint64_t mask, bool test) const =0
void SetFinal(StateId s, Weight weight=Weight::One()) override
void Closure(MutableFst< Arc > *fst, ClosureType closure_type)
RationalFst(const RationalFst &fst, bool safe=false)
ReplaceFst< Arc > * Replace() const
void AddClosure(ClosureType closure_type)
constexpr uint64_t kError
uint64_t Properties() const override
ArcIterator(const RationalFst< Arc > &fst, StateId s)
void SetOutputSymbols(const SymbolTable *osyms)
typename Arc::Weight Weight
typename ReplaceFst< Arc >::Arc Arc
void InitArcIterator(StateId s, ArcIteratorData< Arc > *data) const override
CacheOptions RationalFstOptions
size_t NumArcs(StateId s)
void InitConcat(const Fst< Arc > &fst1, const Fst< Arc > &fst2)
StateId AddState() override
void SetOutputSymbols(const SymbolTable *osyms) override
typename Arc::StateId StateId
uint64_t ClosureProperties(uint64_t inprops, bool star, bool delayed=false)
virtual uint64_t Properties() const
uint64_t UnionProperties(uint64_t inprops1, uint64_t inprops2, bool delayed=false)
void Union(RationalFst< Arc > *fst1, const Fst< Arc > &fst2)
constexpr uint64_t kCopyProperties
void SetInputSymbols(const SymbolTable *isyms) override
virtual Fst * Copy(bool safe=false) const =0
typename Arc::StateId StateId
VectorFst * Copy(bool safe=false) const override
void InitClosure(const Fst< Arc > &fst, ClosureType closure_type)
RationalFstImpl(const RationalFstImpl< Arc > &impl)
StateIterator(const RationalFst< Arc > &fst)
void EmplaceArc(StateId state, T &&...ctor_args)
void SetInputSymbols(const SymbolTable *isyms)
void Concat(MutableFst< Arc > *fst1, const Fst< Arc > &fst2)
constexpr uint64_t kFstProperties
void InitUnion(const Fst< Arc > &fst1, const Fst< Arc > &fst2)
typename Arc::Label Label
typename ReplaceFst< Arc >::Arc Arc
virtual const SymbolTable * InputSymbols() const =0
void AddUnion(const Fst< Arc > &fst)
size_t NumInputEpsilons(StateId s)
void SetType(std::string_view type)
RationalFstImpl(const RationalFstOptions &opts)
uint64_t Properties(uint64_t mask) const override
FstImpl & operator=(const FstImpl &impl)
typename Arc::StateId StateId
~RationalFstImpl() override
virtual const SymbolTable * OutputSymbols() const =0