18 #ifndef FST_EXTENSIONS_SPECIAL_SIGMA_FST_H_ 19 #define FST_EXTENSIONS_SPECIAL_SIGMA_FST_H_ 41 template <
class Label>
45 Label sigma_label = FST_FLAGS_sigma_fst_sigma_label,
48 : sigma_label_(sigma_label), rewrite_mode_(rewrite_mode) {}
51 : sigma_label_(data.sigma_label_), rewrite_mode_(data.rewrite_mode_) {}
55 auto data = std::make_unique<SigmaFstMatcherData<Label>>();
56 ReadType(istrm, &data->sigma_label_);
60 return data.release();
65 WriteType(ostrm, static_cast<int32_t>(rewrite_mode_));
66 return !ostrm ?
false :
true;
78 LOG(WARNING) <<
"SigmaFst: Unknown rewrite mode: " << mode <<
". " 79 <<
"Defaulting to auto.";
94 template <
class M, u
int8_t flags = kSigmaFstMatchInput | kSigmaFstMatchOutput>
98 using Arc =
typename M::Arc;
104 static constexpr uint8_t kFlags = flags;
109 std::shared_ptr<MatcherData> data = std::make_shared<MatcherData>())
120 std::shared_ptr<MatcherData> data = std::make_shared<MatcherData>())
130 :
SigmaMatcher<M>(matcher, safe), data_(matcher.data_) {}
142 if (match_type ==
MATCH_INPUT && flags & kSigmaFstMatchInput)
return label;
143 if (match_type ==
MATCH_OUTPUT && flags & kSigmaFstMatchOutput)
148 std::shared_ptr<MatcherData> data_;
165 SigmaFstMatcher<SortedMatcher<ConstFst<Arc>>, kSigmaFstMatchInput>,
166 input_sigma_fst_type>;
173 SigmaFstMatcher<SortedMatcher<ConstFst<Arc>>, kSigmaFstMatchOutput>,
174 output_sigma_fst_type>;
180 #endif // FST_EXTENSIONS_SPECIAL_SIGMA_FST_H_ static SigmaFstMatcherData< Label > * Read(std::istream &istrm, const FstReadOptions &read)
std::shared_ptr< MatcherData > GetSharedData() const
SigmaFstMatcher(const FST &fst, MatchType match_type, std::shared_ptr< MatcherData > data=std::make_shared< MatcherData >())
constexpr char output_sigma_fst_type[]
typename Arc::StateId StateId
constexpr uint8_t kSigmaFstMatchOutput
typename Arc::Label Label
std::ostream & WriteType(std::ostream &strm, const T t)
SigmaFstMatcherData(const SigmaFstMatcherData &data)
DECLARE_int64(sigma_fst_sigma_label)
constexpr char input_sigma_fst_type[]
SigmaFstMatcherData(Label sigma_label=FST_FLAGS_sigma_fst_sigma_label, MatcherRewriteMode rewrite_mode=RewriteMode(FST_FLAGS_sigma_fst_rewrite_mode))
SigmaFstMatcher(const FST *fst, MatchType match_type, std::shared_ptr< MatcherData > data=std::make_shared< MatcherData >())
constexpr char sigma_fst_type[]
bool Write(std::ostream &ostrm, const FstWriteOptions &opts) const
constexpr uint8_t kSigmaFstMatchInput
std::istream & ReadType(std::istream &strm, T *t)
DECLARE_string(sigma_fst_rewrite_mode)
MatcherRewriteMode RewriteMode() const
SigmaFstMatcher< M, flags > * Copy(bool safe=false) const override
SigmaFstMatcher(const SigmaFstMatcher< M, flags > &matcher, bool safe=false)
const MatcherData * GetData() const
typename Arc::Weight Weight