20 #ifndef FST_STATE_TABLE_H_ 21 #define FST_STATE_TABLE_H_ 23 #include <sys/types.h> 80 template <
class T,
class H>
84 using StateId =
typename StateTuple::StateId;
102 template <
class T,
class H>
128 template <
class T,
class FP>
152 template <
class T,
class Select,
class FP,
class H>
167 const H &hash,
size_t vector_size = 0,
168 size_t tuple_size = 0)
170 select, fingerprint, hash, vector_size, tuple_size) {}
181 template <
class T,
class H>
248 template <
typename S,
typename FS>
258 : state_pair_(s1, s2), fs_(fs) {}
266 const std::pair<StateId, StateId> &
StatePair()
const {
return state_pair_; }
270 return (&x == &y) || (x.state_pair_ == y.state_pair_ && x.fs_ == y.fs_);
274 return static_cast<size_t>(StateId1()) +
275 static_cast<size_t>(StateId2()) * 7853u +
276 GetFilterState().Hash() * 7867u;
280 std::pair<StateId, StateId> state_pair_;
286 template <
typename S>
295 : state_pair_(s1, s2) {}
303 const std::pair<StateId, StateId> &
StatePair()
const {
return state_pair_; }
307 return (&x == &y) || (x.state_pair_ == y.state_pair_);
310 size_t Hash()
const {
return StateId1() + StateId2() *
size_t{7853}; }
313 std::pair<StateId, StateId> state_pair_;
317 template <
typename T>
324 template <
typename Arc,
typename FilterState,
327 typename StateTable =
337 : StateTable(table_size) {}
339 constexpr
bool Error()
const {
return false; }
347 template <
typename StateTuple>
354 LOG(WARNING) <<
"TupleFingerprint: # of FST states should be provided.";
359 : mult1_(nstates1), mult2_(nstates1 * nstates2) {}
362 return tuple.StateId1() + tuple.StateId2() * mult1_ +
363 tuple.GetFilterState().Hash() * mult2_;
367 const ssize_t mult1_;
368 const ssize_t mult2_;
372 template <
typename StateTuple>
375 size_t operator()(
const StateTuple &tuple) {
return tuple.StateId1(); }
379 template <
typename StateTuple>
382 size_t operator()(
const StateTuple &tuple) {
return tuple.StateId2(); }
389 template <
typename Arc,
typename StateTuple>
398 size_t table_size = 0)
407 constexpr
bool Error()
const {
return false; }
419 template <
typename Arc,
typename StateTuple>
422 ComposeState1Fingerprint<StateTuple>> {
432 FSTERROR() <<
"StringDetComposeStateTable: 1st FST is not a string";
434 }
else if (fst2.
Properties(props2,
true) != props2) {
435 FSTERROR() <<
"StringDetComposeStateTable: 2nd FST is not deterministic " 443 : StateTable(table), error_(table.error_) {}
445 bool Error()
const {
return error_; }
459 template <
typename Arc,
typename StateTuple>
462 ComposeState2Fingerprint<StateTuple>> {
472 FSTERROR() <<
"StringDetComposeStateTable: 1st FST is not " 473 <<
"input-deterministic and epsilon-free";
476 FSTERROR() <<
"DetStringComposeStateTable: 2nd FST is not a string";
483 : StateTable(table), error_(table.error_) {}
485 bool Error()
const {
return error_; }
497 template <
typename Arc,
typename StateTuple>
503 constexpr
bool Error()
const {
return false; }
512 #endif // FST_STATE_TABLE_H_
const StateTuple & Tuple(StateId s) const
ProductComposeStateTable(const Fst< Arc > &fst1, const Fst< Arc > &fst2, size_t table_size=0)
typename Arc::StateId StateId
virtual uint64_t Properties(uint64_t mask, bool test) const =0
FilterState GetFilterState() const
typename StateTuple::StateId StateId
FilterState GetFilterState() const
VectorStateTable(const FP &fingerprint=FP(), size_t table_size=0)
constexpr bool Error() const
StateId FindState(const StateTuple &tuple)
typename Arc::StateId StateId
const StateTuple & Tuple(StateId s) const
typename StateTuple::StateId StateId
DetStringComposeStateTable(const DetStringComposeStateTable< Arc, StateTuple > &table)
typename StateTuple::StateId StateId
StringDetComposeStateTable(const StringDetComposeStateTable< Arc, StateTuple > &table)
size_t operator()(const StateTuple &tuple) const
size_t operator()(const StateTuple &tuple)
typename StateTuple::StateId StateId
const T & FindEntry(T::StateIds) const
size_t operator()(const StateTuple &tuple)
StateId FindState(const StateTuple &tuple)
const StateTuple & Tuple(StateId s) const
HashStateTable(size_t table_size)
ComposeFingerprint(StateId nstates1, StateId nstates2)
constexpr uint64_t kODeterministic
GenericComposeStateTable(const Fst< Arc > &fst1, const Fst< Arc > &fst2, size_t table_size)
DetStringComposeStateTable(const Fst< Arc > &fst1, const Fst< Arc > &fst2)
StringDetComposeStateTable(const Fst< Arc > &fst1, const Fst< Arc > &fst2)
const StateTuple & Tuple(StateId s) const
constexpr uint64_t kNoOEpsilons
StateId FindState(const StateTuple &tuple)
DefaultComposeStateTuple()
typename StateTuple::StateId StateId
const StateTuple & Tuple(StateId s) const
T::StateId FindId(const T &entry, bool insert=true)
constexpr uint64_t kIDeterministic
DefaultComposeStateTuple()
typename StateTuple::StateId StateId
size_t operator()(const T &t) const
friend bool operator==(const DefaultComposeStateTuple &x, const DefaultComposeStateTuple &y)
GenericComposeStateTable(const Fst< Arc > &fst1, const Fst< Arc > &fst2)
constexpr bool Error() const
Arc::StateId CountStates(const Fst< Arc > &fst)
friend bool operator==(const DefaultComposeStateTuple &x, const DefaultComposeStateTuple &y)
CompactHashStateTable(size_t table_size)
DefaultComposeStateTuple(StateId s1, StateId s2, const FilterState &)
constexpr uint64_t kString
DefaultComposeStateTuple(StateId s1, StateId s2, const FilterState &fs)
typename Arc::StateId StateId
StateId FindState(const StateTuple &tuple)
ErasableComposeStateTable(const Fst< Arc > &fst1, const Fst< Arc > &fst2)
constexpr uint64_t kNoIEpsilons
const std::pair< StateId, StateId > & StatePair() const
const std::pair< StateId, StateId > & StatePair() const
typename Arc::StateId StateId
ProductComposeStateTable(const ProductComposeStateTable< Arc, StateTuple > &table)
constexpr bool Error() const
StateId FindState(const StateTuple &tuple)
VectorHashStateTable(const Select &select, const FP &fingerprint, const H &hash, size_t vector_size=0, size_t tuple_size=0)