20 #ifndef FST_ARCSORT_H_ 21 #define FST_ARCSORT_H_ 23 #include <sys/types.h> 42 template <
class Arc,
class Compare>
52 : fst_(fst), comp_(comp), i_(0) {}
57 : fst_(
fst ? *
fst : mapper.fst_), comp_(mapper.comp_), i_(0) {}
68 arcs_.push_back(aiter.Value());
70 std::stable_sort(arcs_.begin(), arcs_.end(), comp_);
73 bool Done()
const {
return i_ >= arcs_.size(); }
75 const Arc &
Value()
const {
return arcs_[i_]; }
83 uint64_t
Properties(uint64_t props)
const {
return comp_.Properties(props); }
88 std::vector<Arc> arcs_;
108 template <
class Arc,
class Compare>
132 template <
class Arc,
class Compare>
158 return GetImpl()->GetFst()->NumArcs(s);
162 return GetImpl()->GetFst()->NumInputEpsilons(s);
166 return GetImpl()->GetFst()->NumOutputEpsilons(s);
171 template <
class Arc,
class Compare>
173 :
public StateIterator<StateMapFst<Arc, Arc, ArcSortMapper<Arc, Compare>>> {
181 template <
class Arc,
class Compare>
183 :
public ArcIterator<StateMapFst<Arc, Arc, ArcSortMapper<Arc, Compare>>> {
196 constexpr
bool operator()(
const Arc &lhs,
const Arc &rhs)
const {
197 return std::forward_as_tuple(lhs.ilabel, lhs.olabel) <
198 std::forward_as_tuple(rhs.ilabel, rhs.olabel);
213 constexpr
bool operator()(
const Arc &lhs,
const Arc &rhs)
const {
214 return std::forward_as_tuple(lhs.olabel, lhs.ilabel) <
215 std::forward_as_tuple(rhs.olabel, rhs.ilabel);
226 template <
class Compare>
235 #endif // FST_ARCSORT_H_
ArcIterator(const ArcSortFst< Arc, Compare > &fst, typename Arc::StateId s)
constexpr uint64_t kArcSortProperties
typename StateMapFst< Arc, Arc, ArcSortMapper< Arc, Compare > >::Arc Arc
typename Arc::StateId StateId
virtual size_t NumArcs(StateId) const =0
constexpr uint64_t Properties(uint64_t props) const
const Arc & Value() const
constexpr ArcSortMapper(const Fst< Arc > &fst, const Compare &comp)
ArcSortFst(const ArcSortFst &fst, bool safe=false)
size_t NumInputEpsilons(StateId s) const override
virtual Weight Final(StateId) const =0
MapSymbolsAction InputSymbolsAction() const
constexpr uint64_t Properties(uint64_t props) const
typename StateMapFst< Arc, Arc, ArcSortMapper< Arc, Compare > >::Arc Arc
StateIterator(const ArcSortFst< Arc, Compare > &fst)
ArcSortMapper(const ArcSortMapper< Arc, Compare > &mapper, const Fst< Arc > *fst=nullptr)
MapSymbolsAction OutputSymbolsAction() const
void ArcSort(MutableFst< Arc > *fst, Compare comp)
constexpr uint64_t kOLabelSorted
ArcSortFst * Copy(bool safe=false) const override
constexpr bool operator()(const Arc &lhs, const Arc &rhs) const
virtual StateId Start() const =0
typename Arc::Weight Weight
void StateMap(MutableFst< A > *fst, C *mapper)
size_t NumArcs(StateId s) const override
ArcSortFst(const Fst< Arc > &fst, const Compare &comp)
ArcSortFst(const Fst< Arc > &fst, const Compare &comp, const ArcSortFstOptions &opts)
constexpr uint64_t kILabelSorted
Weight Final(StateId s) const
typename internal::StateMapFstImpl< Arc, Arc, ArcSortMapper< Arc, Compare > >::Arc Arc
uint64_t Properties(uint64_t props) const
typename Arc::StateId StateId
constexpr bool operator()(const Arc &lhs, const Arc &rhs) const
size_t NumOutputEpsilons(StateId s) const override
constexpr uint64_t kAcceptor