6 #ifndef FST_MATCHER_FST_H_ 7 #define FST_MATCHER_FST_H_ 73 using Arc =
typename FST::Arc;
89 : CreateDataAndImpl(fst, Name)) {}
101 bool safe =
false)
const override {
110 std::shared_ptr<Impl>(impl))
117 const string &filename) {
120 std::shared_ptr<Impl>(impl))
125 return GetImpl()->Write(strm, opts);
128 bool Write(
const string &filename)
const override {
133 return GetImpl()->InitStateIterator(data);
137 return GetImpl()->InitArcIterator(s, data);
141 return new FstMatcher(&GetFst(), match_type, GetSharedData(match_type));
144 const FST &
GetFst()
const {
return GetImpl()->GetFst(); }
146 const Data *
GetAddOn()
const {
return GetImpl()->GetAddOn(); }
149 return GetImpl()->GetSharedAddOn();
153 const auto *data = GetAddOn();
154 return match_type ==
MATCH_INPUT ? data->First() : data->Second();
158 const auto *data = GetAddOn();
159 return match_type ==
MATCH_INPUT ? data->SharedFirst()
160 : data->SharedSecond();
167 const string &name) {
170 return CreateImpl(fst, name,
171 std::make_shared<Data>(imatcher.GetSharedData(),
172 omatcher.GetSharedData()));
176 const string &name) {
178 return CreateDataAndImpl(result, name);
182 std::shared_ptr<Data> data) {
183 auto impl = std::make_shared<Impl>(fst, name);
184 impl->SetAddOn(data);
197 template <
class FST,
class M, const
char *Name,
class Init>
206 template <
class FST,
class M, const
char *Name,
class Init>
212 typename FST::Arc::StateId s)
217 template <
class F,
class M, const
char *Name,
class Init>
221 using Arc =
typename F::Arc;
226 : matcher_(fst.InitMatcher(match_type)) {}
236 bool Find(
Label label) {
return matcher_->Find(label); }
238 bool Done()
const {
return matcher_->Done(); }
240 const Arc &
Value()
const {
return matcher_->Value(); }
242 void Next() { matcher_->Next(); }
249 std::unique_ptr<M> matcher_;
253 template <
class F,
class M, const
char *Name,
class Init>
257 using Arc =
typename F::Arc;
263 : matcher_(fst.InitMatcher(match_type)) {}
266 : matcher_(matcher.matcher_->Copy(safe)) {}
277 bool Find(
Label label) {
return matcher_->Find(label); }
279 bool Done()
const {
return matcher_->Done(); }
281 const Arc &
Value()
const {
return matcher_->Value(); }
283 void Next() { matcher_->Next(); }
292 return matcher_->LookAheadLabel(label);
296 return matcher_->LookAheadFst(fst, s);
302 return matcher_->LookAheadPrefix(arc);
306 matcher_->InitLookAheadFst(fst, copy);
310 std::unique_ptr<M> matcher_;
320 arc_lookahead_fst_type>;
341 LabelLookAheadMatcher<SortedMatcher<ConstFst<StdArc>>,
347 #endif // FST_MATCHER_FST_H_ static Impl * Read(std::istream &strm, const FstReadOptions &opts)
static MatcherFst< FST, M, Name, Init, Data > * Read(std::istream &strm, const FstReadOptions &opts)
typename Arc::Label Label
MatcherFst(const MatcherFst< FST, FstMatcher, Name, Init, Data > &fst, bool safe=false)
constexpr uint32 kLookAheadEpsilons
constexpr uint32 kLookAheadNonEpsilonPrefix
typename Arc::StateId StateId
uint64 Properties(uint64 props) const
static std::shared_ptr< Impl > CreateDataAndImpl(const Fst< Arc > &fst, const string &name)
typename FstMatcher::MatcherData MatcherData
const char ilabel_lookahead_fst_type[]
void InitLookAheadFst(const Fst< Arc > &fst, bool copy=false)
typename M::MatcherData MatcherData
const char olabel_lookahead_fst_type[]
const char arc_lookahead_fst_type[]
Matcher(const Matcher< FST > &matcher)
const FST & GetFst() const
MatcherFst< FST, FstMatcher, Name, Init, Data > * Copy(bool safe=false) const override
const MatcherData * GetData(MatchType match_type) const
typename Arc::StateId StateId
std::shared_ptr< Data > GetSharedAddOn() const
LookAheadMatcher(const FST &fst, MatchType match_type)
constexpr auto olabel_lookahead_flags
void InitArcIterator(StateId s, ArcIteratorData< Arc > *data) const override
constexpr uint32 kLookAheadWeight
bool WriteFile(const string &filename) const
MatchType Type(bool test) const
void InitStateIterator(StateIteratorData< Arc > *data) const override
constexpr auto ilabel_lookahead_flags
MatcherFst(const FST &fst, std::shared_ptr< Data > data=nullptr)
AddOnPair< MatcherData, MatcherData > Data
typename Arc::StateId StateId
const Arc & Value() const
constexpr uint32 kInputLookAheadMatcher
typename Arc::Weight Weight
constexpr uint32 kOutputLookAheadMatcher
MatcherFst(std::shared_ptr< Impl > impl)
MatcherFst(const Fst< Arc > &fst)
MatchType Type(bool test) const
bool Write(std::ostream &strm, const FstWriteOptions &opts) const override
Matcher(const FST &fst, MatchType match_type)
ArcIterator(const MatcherFst< FST, M, Name, Init > &fst, typename FST::Arc::StateId s)
Matcher< FST > * Copy() const
static AddOnImpl< FST, T > * Read(std::istream &strm, const FstReadOptions &opts)
bool LookAheadFst(const Fst< Arc > &fst, StateId s)
static std::shared_ptr< Impl > CreateDataAndImpl(const FST &fst, const string &name)
StateIterator(const MatcherFst< FST, M, Name, Init > &fst)
bool Write(const string &filename) const override
std::shared_ptr< MatcherData > GetSharedData(MatchType match_type) const
NullMatcherFstInit(std::shared_ptr< Impl > *)
const Data * GetAddOn() const
FstMatcher * InitMatcher(MatchType match_type) const override
const Arc & Value() const
bool LookAheadPrefix(Arc *arc) const
LookAheadMatcher(const LookAheadMatcher< FST > &matcher, bool safe=false)
constexpr uint32 kLookAheadPrefix
typename Arc::StateId StateId
static MatcherFst< FST, FstMatcher, Name, Init, Data > * Read(const string &filename)
const FST & GetFst() const
uint64 Properties(uint64 props) const
bool LookAheadLabel(Label label) const
static std::shared_ptr< Impl > CreateImpl(const FST &fst, const string &name, std::shared_ptr< Data > data)
LookAheadMatcher< FST > * Copy(bool safe=false) const
typename Arc::Label Label
Weight LookAheadWeight() const