15 #ifndef FST_TEST_COMPACTORS_H_ 16 #define FST_TEST_COMPACTORS_H_ 25 #include <type_traits> 39 using Label =
typename A::Label;
43 static_assert(std::is_trivially_copyable_v<Weight>,
44 "Weight must be trivially copyable.");
46 static_assert(std::is_trivially_copyable_v<Element>,
47 "ArcTpl should be trivially copyable; someone broke it.");
50 return Element(arc.ilabel, arc.olabel, arc.weight, arc.nextstate);
57 ssize_t
Size()
const {
return -1; }
63 static const std::string &
Type() {
64 static const std::string *
const type =
65 new std::string(
"trival_arc_compactor_" + Arc::Type());
69 bool Write(std::ostream &strm)
const {
return true; }
91 std::shared_ptr<TrivialCompactor> =
nullptr)
97 : fst_(compactor.fst_->Copy(true)) {}
113 size_t NumArcs()
const {
return c_->fst_->NumArcs(s_); }
122 std::unique_ptr<ArcIterator<Fst<Arc>>> i_;
127 template <
typename Arc>
129 return std::is_same_v<Arc, A>;
134 static const std::string &
Type() {
135 static const std::string *
const type =
136 new std::string(
"trivial_compactor_" + Arc::Type());
152 if (type !=
Type())
return nullptr;
155 if (
fst ==
nullptr)
return nullptr;
160 std::unique_ptr<Fst<Arc>> fst_;
165 #endif // FST_TEST_COMPACTORS_H_
constexpr uint8_t kArcValueFlags
uint64_t Properties() const
typename A::Weight Weight
bool Compatible(const Fst< A > &fst) const
StateId GetStateId() const
constexpr uint64_t kError
static TrivialCompactor * Read(std::istream &strm, FstReadOptions opts, const FstHeader &hdr)
static TrivialArcCompactor * Read(std::istream &strm)
void SetState(StateId s, State *state)
std::unique_ptr< T > WrapUnique(T *ptr)
bool IsCompatible(const Fst< Arc > &fst) const
size_t CountArcs(const F &fst)
Arc Expand(StateId s, const Element &e, uint32_t f=kArcValueFlags) const
typename Arc::StateId StateId
Arc GetArc(size_t i, uint32_t f) const
State(const TrivialCompactor *c, StateId s)
StateId NumStates() const
typename A::StateId StateId
std::ostream & WriteType(std::ostream &strm, const T t)
Element Compact(StateId s, const A &arc) const
TrivialCompactor(const TrivialCompactor &compactor)
typename Arc::Weight Weight
bool Write(std::ostream &strm) const
bool Write(std::ostream &strm, const FstWriteOptions &opts) const
Arc::StateId CountStates(const Fst< Arc > &fst)
static const std::string & Type()
uint64_t Properties(uint64_t props) const
std::istream & ReadType(std::istream &strm, T *t)
TrivialCompactor(const Fst< Arc > &fst, std::shared_ptr< TrivialCompactor >=nullptr)
static bool WriteFst(const FST &fst, std::ostream &strm, const FstWriteOptions &opts)
static const std::string & Type()