7 #ifndef FST_MUTABLE_FST_H_ 8 #define FST_MUTABLE_FST_H_ 11 #include <sys/types.h> 64 virtual void DeleteStates(
const std::vector<StateId> &) = 0;
109 if (!hdr.
Read(strm, opts.
source))
return nullptr;
113 LOG(ERROR) <<
"MutableFst::Read: Not a MutableFst: " << ropts.
source;
116 const auto &fst_type = hdr.
FstType();
119 LOG(ERROR) <<
"MutableFst::Read: Unknown FST type \"" << fst_type
120 <<
"\" (arc type = \"" << A::Type() <<
"\"): " << ropts.
source;
123 auto *
fst = reader(strm, ropts);
124 if (!
fst)
return nullptr;
133 const string &convert_type =
"vector") {
134 if (convert ==
false) {
135 if (!filename.empty()) {
136 std::ifstream strm(filename,
137 std::ios_base::in | std::ios_base::binary);
139 LOG(ERROR) <<
"MutableFst::Read: Can't open file: " << filename;
148 if (!ifst)
return nullptr;
149 if (ifst->Properties(
kMutable,
false)) {
152 std::unique_ptr<Fst<Arc>> ofst(
Convert(*ifst, convert_type));
154 if (!ofst)
return nullptr;
155 if (!ofst->Properties(
kMutable,
false)) {
156 LOG(ERROR) <<
"MutableFst: Bad convert type: " << convert_type;
176 virtual void SetValue(
const Arc &) = 0;
202 using Arc =
typename FST::Arc;
206 fst->InitMutableArcIterator(s, &data_);
211 bool Done()
const {
return data_.base->Done(); }
213 const Arc &
Value()
const {
return data_.base->Value(); }
215 void Next() { data_.base->Next(); }
217 size_t Position()
const {
return data_.base->Position(); }
219 void Reset() { data_.base->Reset(); }
221 void Seek(
size_t a) { data_.base->Seek(a); }
228 return data_.base->SetFlags(flags, mask);
243 typename Arc::StateId s) {
254 typename Arc::StateId s) {
260 typename Arc::StateId s) {
271 template <
class Impl,
class FST = MutableFst<
typename Impl::Arc>>
274 using Arc =
typename Impl::Arc;
282 GetMutableImpl()->SetStart(s);
287 GetMutableImpl()->SetFinal(s, std::move(weight));
294 if (GetImpl()->
Properties(exprops) != (props & exprops)) MutateCheck();
295 GetMutableImpl()->SetProperties(props, mask);
300 return GetMutableImpl()->AddState();
305 GetMutableImpl()->AddArc(s, arc);
310 GetMutableImpl()->AddArc(s, std::move(arc));
315 GetMutableImpl()->DeleteStates(dstates);
320 const auto *isymbols = GetImpl()->InputSymbols();
321 const auto *osymbols = GetImpl()->OutputSymbols();
322 SetImpl(std::make_shared<Impl>());
323 GetMutableImpl()->SetInputSymbols(isymbols);
324 GetMutableImpl()->SetOutputSymbols(osymbols);
326 GetMutableImpl()->DeleteStates();
332 GetMutableImpl()->DeleteArcs(s, n);
337 GetMutableImpl()->DeleteArcs(s);
342 GetMutableImpl()->ReserveStates(s);
347 GetMutableImpl()->ReserveArcs(s, n);
351 return GetImpl()->InputSymbols();
355 return GetImpl()->OutputSymbols();
360 return GetMutableImpl()->InputSymbols();
365 return GetMutableImpl()->OutputSymbols();
370 GetMutableImpl()->SetInputSymbols(isyms);
375 GetMutableImpl()->SetOutputSymbols(osyms);
392 if (!Unique()) SetImpl(std::make_shared<Impl>(*
this));
398 #endif // FST_MUTABLE_FST_H_
void DeleteArcs(StateId s, size_t n) override
void ReserveArcs(StateId s, size_t n) override
void DeleteStates() override
void AddArc(StateId s, const Arc &arc) override
void SetStart(StateId s) override
void SetProperties(uint64 props, uint64 mask) override
virtual SymbolTable * MutableOutputSymbols()=0
void SetFinal(StateId s, Weight weight) override
virtual size_t NumArcs(StateId) const =0
const SymbolTable * OutputSymbols() const override
typename fst::MutableFst< Arc >::Arc Arc
MutableFst< Arc > & operator=(const MutableFst< Arc > &fst)
virtual void AddArc(StateId, const Arc &arc)=0
typename Arc::StateId StateId
typename Arc::Weight Weight
virtual void InitMutableArcIterator(StateId s, MutableArcIteratorData< Arc > *data)=0
const SymbolTable * InputSymbols() const override=0
virtual void SetInputSymbols(const SymbolTable *isyms)=0
virtual Weight Final(StateId) const =0
Fst< Arc > * Convert(const Fst< Arc > &fst, const string &fst_type)
SymbolTable * MutableOutputSymbols() override
virtual void SetStart(StateId)=0
void DeleteArcs(StateId s) override
void SetValue(const Arc &arc)
SymbolTable * MutableInputSymbols() override
const Arc & Value() const
virtual uint64 Properties(uint64 mask, bool test) const =0
static FstRegister< Arc > * GetRegister()
virtual size_t NumInputEpsilons(StateId) const =0
MutableArcIterator(FST *fst, StateId s)
StateId AddState() override
ImplToMutableFst(const ImplToMutableFst< Impl, FST > &fst, bool safe)
const SymbolTable * OutputSymbols() const override=0
void SetOutputSymbols(const SymbolTable *osyms) override
virtual void ReserveArcs(StateId s, size_t n)
virtual void SetFinal(StateId, Weight)=0
void SetInputSymbols(const SymbolTable *isyms) override
virtual void AddArc(StateId state, Arc &&arc)
void ReserveStates(StateId s) override
virtual void DeleteArcs(StateId, size_t n)=0
void DeleteStates(const std::vector< StateId > &dstates) override
typename Arc::StateId StateId
virtual void ReserveStates(StateId n)
virtual MutableFst< Arc > & operator=(const Fst< Arc > &fst)=0
virtual SymbolTable * MutableInputSymbols()=0
ImplToMutableFst(std::shared_ptr< Impl > impl)
MutableArcIteratorBase< Arc > * base
virtual StateId AddState()=0
const SymbolTable * InputSymbols() const override
typename Arc::StateId StateId
virtual void SetOutputSymbols(const SymbolTable *osyms)=0
static MutableFst< Arc > * Read(std::istream &strm, const FstReadOptions &opts)
constexpr uint64 kMutable
virtual size_t NumOutputEpsilons(StateId) const =0
void AddArc(StateId s, Arc &&arc) override
virtual void DeleteStates()=0
constexpr uint64 kExtrinsicProperties
void SetFlags(uint32 flags, uint32 mask)
static MutableFst< Arc > * Read(const string &filename, bool convert=false, const string &convert_type="vector")
MutableFst< A > * Copy(bool safe=false) const override=0
virtual void SetProperties(uint64 props, uint64 mask)=0