47 std::string usage =
"Encodes FST labels and/or weights in an FST archive.";
48 usage +=
"\n\n Usage: ";
50 usage +=
" [in.far mapper [out.far]]\n";
52 SET_FLAGS(usage.c_str(), &argc, &argv,
true);
53 if (argc < 3 || argc > 4) {
58 const std::string in_name = (strcmp(argv[1],
"-") != 0) ? argv[1] :
"";
59 const std::string mapper_name = argv[2];
60 const std::string out_name =
61 argc > 3 && strcmp(argv[3],
"-") != 0 ? argv[3] :
"";
63 std::unique_ptr<FarReaderClass> reader(FarReaderClass::Open(in_name));
64 if (!reader)
return 1;
68 LOG(ERROR) <<
"Unknown --far_type " << FST_FLAGS_far_type;
76 const auto arc_type = reader->ArcType();
77 if (arc_type.empty())
return 1;
79 std::unique_ptr<FarWriterClass> writer(
81 if (!writer)
return 1;
83 if (FST_FLAGS_decode) {
84 std::unique_ptr<EncodeMapperClass> mapper(
85 EncodeMapperClass::Read(mapper_name));
86 if (!mapper)
return 1;
88 }
else if (FST_FLAGS_encode_reuse) {
89 std::unique_ptr<EncodeMapperClass> mapper(
90 EncodeMapperClass::Read(mapper_name));
91 if (!mapper)
return 1;
92 s::Encode(*reader, *writer, mapper.get());
95 FST_FLAGS_encode_weights);
96 EncodeMapperClass mapper(reader->ArcType(), flags);
98 if (!mapper.Write(mapper_name))
return 1;
101 if (reader->Error()) {
102 FSTERROR() <<
"Error reading FAR: " << in_name;
105 if (writer->Error()) {
106 FSTERROR() <<
"Error writing FAR: " << out_name;
void ShowUsage(bool long_usage=true)
void Decode(FarReaderClass &reader, FarWriterClass &writer, const EncodeMapperClass &encoder)
#define SET_FLAGS(usage, argc, argv, rmflags)
void Encode(FarReaderClass &reader, FarWriterClass &writer, EncodeMapperClass *encoder)
bool GetFarType(std::string_view str, FarType *far_type)
uint8_t GetEncodeFlags(bool encode_labels, bool encode_weights)
void Create(const std::vector< std::string > &sources, FarWriterClass &writer, const int32_t generate_keys, const std::string &key_prefix, const std::string &key_suffix)
int farencode_main(int argc, char **argv)