20 #ifndef FST_CLOSURE_H_ 21 #define FST_CLOSURE_H_ 48 using Weight =
typename Arc::Weight;
50 const auto start = fst->
Start();
53 const auto s = siter.Value();
54 const auto weight = fst->
Final(s);
55 if (weight != Weight::Zero()) fst->
AddArc(s, Arc(0, 0, weight, start));
104 GetMutableImpl()->InitClosure(fst, closure_type);
109 GetMutableImpl()->InitClosure(fst, opts.
type);
149 #endif // FST_CLOSURE_H_ ClosureFst(const Fst< Arc > &fst, const ClosureFstOptions &opts)
ArcIterator(const ClosureFst< Arc > &fst, StateId s)
virtual uint64_t Properties(uint64_t mask, bool test) const =0
void Closure(MutableFst< Arc > *fst, ClosureType closure_type)
virtual Weight Final(StateId) const =0
virtual void SetStart(StateId)=0
typename ReplaceFst< Arc >::Arc Arc
typename Arc::StateId StateId
uint64_t ClosureProperties(uint64_t inprops, bool star, bool delayed=false)
virtual void SetProperties(uint64_t props, uint64_t mask)=0
virtual StateId Start() const =0
ClosureFst * Copy(bool safe=false) const override
StateIterator(const ClosureFst< Arc > &fst)
ClosureFst(const Fst< Arc > &fst, ClosureType closure_type)
constexpr uint64_t kFstProperties
virtual void AddArc(StateId, const Arc &)=0
typename ReplaceFst< Arc >::Arc Arc
virtual StateId AddState()=0
virtual void ReserveStates(size_t)
virtual void SetFinal(StateId s, Weight weight=Weight::One())=0
ClosureFstOptions(const RationalFstOptions &opts, ClosureType type=CLOSURE_STAR)
internal::RationalFstImpl< A > * GetMutableImpl() const
virtual StateId NumStates() const =0
ClosureFst(const ClosureFst &fst, bool safe=false)
ClosureFstOptions(ClosureType type=CLOSURE_STAR)