21 #ifndef FST_RATIONAL_H_ 22 #define FST_RATIONAL_H_ 72 using Label =
typename Arc::Label;
83 : nonterminals_(0), replace_options_(opts, 0) {
85 fst_tuples_.emplace_back(0,
nullptr);
90 nonterminals_(impl.nonterminals_),
91 replace_(impl.replace_ ? impl.replace_->Copy(true) : nullptr),
92 replace_options_(impl.replace_options_) {
94 fst_tuples_.reserve(impl.fst_tuples_.size());
95 for (
const auto &pair : impl.fst_tuples_) {
96 fst_tuples_.emplace_back(pair.first,
97 pair.second ? pair.second->Copy(
true) :
nullptr);
102 for (
auto &tuple : fst_tuples_)
delete tuple.second;
114 return Replace()->NumOutputEpsilons(s);
143 fst_tuples_.emplace_back(-1, fst1.
Copy());
144 fst_tuples_.emplace_back(-2, fst2.
Copy());
165 fst_tuples_.emplace_back(-1, fst1.
Copy());
166 fst_tuples_.emplace_back(-2, fst2.
Copy());
191 fst_tuples_.emplace_back(-1, fst.
Copy());
208 afst.
EmplaceArc(0, 0, -nonterminals_, Weight::One(), 1);
210 fst_tuples_.emplace_back(-nonterminals_, fst.
Copy());
225 afst.
EmplaceArc(0, 0, -nonterminals_, Weight::One(), 1);
231 fst_tuples_.emplace_back(-nonterminals_, fst.
Copy());
248 fst_tuples_[0].second = rfst_.
Copy();
250 std::make_unique<ReplaceFst<Arc>>(fst_tuples_, replace_options_);
252 return replace_.get();
261 mutable std::vector<std::pair<Label, const Fst<Arc> *>> fst_tuples_;
263 mutable std::unique_ptr<ReplaceFst<Arc>> replace_;
290 GetImpl()->Replace()->InitStateIterator(data);
294 GetImpl()->Replace()->InitArcIterator(s, data);
301 :
Base(std::make_shared<
Impl>(opts)) {}
330 #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)
RationalFst(const RationalFstOptions &opts=RationalFstOptions())
virtual uint64_t Properties(uint64_t mask, bool test) const =0
void SetInputSymbols(const SymbolTable *isyms) 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)
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
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)
StateId AddState() override
void Concat(MutableFst< Arc > *fst1, const Fst< Arc > &fst2)
void SetOutputSymbols(const SymbolTable *osyms) override
constexpr uint64_t kFstProperties
void InitUnion(const Fst< Arc > &fst1, const Fst< Arc > &fst2)
void SetFinal(StateId s, Weight weight=Weight::One()) override
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)
void SetStart(StateId s) override
typename Arc::StateId StateId
~RationalFstImpl() override
virtual const SymbolTable * OutputSymbols() const =0