15 #ifndef FST_TEST_COMPACTORS_H_ 16 #define FST_TEST_COMPACTORS_H_ 23 #include <sys/types.h> 31 #include <type_traits> 48 using Label =
typename A::Label;
52 static_assert(std::is_trivially_copyable_v<Weight>,
53 "Weight must be trivially copyable.");
55 static_assert(std::is_trivially_copyable_v<Element>,
56 "ArcTpl should be trivially copyable; someone broke it.");
59 return Element(arc.ilabel, arc.olabel, arc.weight, arc.nextstate);
66 ssize_t
Size()
const {
return -1; }
72 static const std::string &
Type() {
73 static const std::string *
const type =
74 new std::string(
"trival_arc_compactor_" + Arc::Type());
78 bool Write(std::ostream &strm)
const {
return true; }
100 std::shared_ptr<TrivialCompactor> =
nullptr)
101 : fst_(fst.Copy()) {}
106 : fst_(compactor.fst_->Copy(true)) {}
122 size_t NumArcs()
const {
return c_->fst_->NumArcs(s_); }
131 std::unique_ptr<ArcIterator<Fst<Arc>>> i_;
136 template <
typename Arc>
138 return std::is_same_v<Arc, A>;
143 static const std::string &
Type() {
144 static const std::string *
const type =
145 new std::string(
"trivial_compactor_" + Arc::Type());
161 if (type !=
Type())
return nullptr;
164 if (
fst ==
nullptr)
return nullptr;
169 std::unique_ptr<Fst<Arc>> fst_;
174 #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()