33 F *ReadFstClass(std::istream &istrm,
const string &fname) {
35 LOG(ERROR) <<
"ReadFstClass: Can't open file: " << fname;
39 if (!hdr.Read(istrm, fname))
return nullptr;
40 const FstReadOptions read_options(fname, &hdr);
41 const auto &arc_type = hdr.ArcType();
43 const auto reader = io_register->GetReader(arc_type);
45 LOG(ERROR) <<
"ReadFstClass: Unknown arc type: " << arc_type;
48 return reader(istrm, read_options);
52 FstClassImplBase *CreateFstClass(
const string &arc_type) {
53 static const auto *io_register =
55 auto creator = io_register->GetCreator(arc_type);
57 FSTERROR() <<
"CreateFstClass: Unknown arc type: " << arc_type;
64 FstClassImplBase *ConvertFstClass(
const FstClass &other) {
65 static const auto *io_register =
67 auto converter = io_register->GetConverter(other.ArcType());
69 FSTERROR() <<
"ConvertFstClass: Unknown arc type: " << other.ArcType();
72 return converter(other);
82 std::ifstream istrm(fname, std::ios_base::in | std::ios_base::binary);
83 return ReadFstClass<FstClass>(istrm, fname);
85 return ReadFstClass<FstClass>(std::cin,
"standard input");
90 return ReadFstClass<FstClass>(istrm, source);
94 const string &op_name)
const {
96 FSTERROR() <<
"FST and weight with non-matching weight types passed to " 106 if (convert ==
false) {
107 if (!fname.empty()) {
108 std::ifstream in(fname, std::ios_base::in | std::ios_base::binary);
109 return ReadFstClass<MutableFstClass>(in, fname);
111 return ReadFstClass<MutableFstClass>(std::cin,
"standard input");
115 if (!ifst)
return nullptr;
127 if (!fname.empty()) {
128 std::ifstream in(fname, std::ios_base::in | std::ios_base::binary);
129 return ReadFstClass<VectorFstClass>(in, fname);
131 return ReadFstClass<VectorFstClass>(std::cin,
"standard input");
bool WeightTypesMatch(const WeightClass &weight, const string &op_name) const
ArcTpl< TropicalWeight > StdArc
static FstClassIORegister< Reader, Creator, Converter > * GetRegister()
static VectorFstClass * Read(const string &fname)
VectorFstClass(FstClassImplBase *impl)
REGISTER_FST_CLASSES(StdArc)
ArcTpl< Log64Weight > Log64Arc
const string & WeightType() const final
static MutableFstClass * Read(const string &fname, bool convert=false)
const string & Type() const
constexpr uint64 kMutable
static FstClass * Read(const string &fname)
ArcTpl< LogWeight > LogArc