FST  openfst-1.6.1
OpenFst Library
register.h
Go to the documentation of this file.
1 // See www.openfst.org for extensive documentation on this weighted
2 // finite-state transducer library.
3 
4 #ifndef FST_SCRIPT_REGISTER_H_
5 #define FST_SCRIPT_REGISTER_H_
6 
7 #include <istream>
8 #include <string>
9 
10 #include <fst/generic-register.h>
11 #include <fst/script/fst-class.h>
13 
14 // Holds methods and classes responsible for maintaining
15 // the register for FstClass arc types.
16 
17 namespace fst {
18 namespace script {
19 
20 // Registers for reading and converting various kinds of FST classes.
21 
22 // This class definition is to avoid a nested class definition inside
23 // the IORegistration struct.
24 
25 template <class Reader, class Creator, class Converter>
27  Reader reader;
28  Creator creator;
29  Converter converter;
30 
31  FstClassRegEntry(Reader r, Creator cr, Converter co)
32  : reader(r), creator(cr), converter(co) {}
33 
35  : reader(NullReader), creator(NullCreator), converter(NullConverter) {}
36 
37  // Null-returning reader, creator, and converter, used when registry lookup
38  // fails.
39 
40  template <class FstClassType>
41  static FstClassType *NullReader(std::istream &strm,
42  const FstReadOptions &opts) {
43  return nullptr;
44  }
45 
46  static FstClassImplBase *NullCreator() { return nullptr; }
47 
48  static FstClassImplBase *NullConverter(const FstClass &other) {
49  return nullptr;
50  }
51 };
52 
53 template <class Reader, class Creator, class Converter>
55  : public GenericRegister<string,
56  FstClassRegEntry<Reader, Creator, Converter>,
57  FstClassIORegister<Reader, Creator, Converter>> {
58  public:
59  Reader GetReader(const string &arc_type) const {
60  return this->GetEntry(arc_type).reader;
61  }
62 
63  Creator GetCreator(const string &arc_type) const {
64  return this->GetEntry(arc_type).creator;
65  }
66 
67  Converter GetConverter(const string &arc_type) const {
68  return this->GetEntry(arc_type).converter;
69  }
70 
71  protected:
72  string ConvertKeyToSoFilename(const string &key) const override {
73  string legal_type(key);
74  ConvertToLegalCSymbol(&legal_type);
75  return legal_type + "-arc.so";
76  }
77 };
78 
79 // Struct containing everything needed to register a particular type
80 // of FST class (e.g., a plain FstClass, or a MutableFstClass, etc.).
81 template <class FstClassType>
83  using Reader = FstClassType *(*)(std::istream &stream,
84  const FstReadOptions &opts);
85 
86  using Creator = FstClassImplBase *(*)();
87 
88  using Converter = FstClassImplBase *(*)(const FstClass &other);
89 
91 
92  // FST class Register.
94 
95  // FST class Register-er.
96  using Registerer =
98 };
99 
100 #define REGISTER_FST_CLASS(Class, Arc) \
101  static IORegistration<Class>::Registerer Class##_##Arc##_registerer( \
102  Arc::Type(), \
103  IORegistration<Class>::Entry(Class::Read<Arc>, Class::Create<Arc>, \
104  Class::Convert<Arc>))
105 
106 #define REGISTER_FST_CLASSES(Arc) \
107  REGISTER_FST_CLASS(FstClass, Arc); \
108  REGISTER_FST_CLASS(MutableFstClass, Arc); \
109  REGISTER_FST_CLASS(VectorFstClass, Arc);
110 
111 } // namespace script
112 } // namespace fst
113 
114 #endif // FST_SCRIPT_REGISTER_H_
void ConvertToLegalCSymbol(string *s)
Definition: util.cc:55
FstClassImplBase *(*)(const FstClass &other) Converter
Definition: register.h:88
static FstClassImplBase * NullCreator()
Definition: register.h:46
string ConvertKeyToSoFilename(const string &key) const override
Definition: register.h:72
static FstClassImplBase * NullConverter(const FstClass &other)
Definition: register.h:48
Converter GetConverter(const string &arc_type) const
Definition: register.h:67
Creator GetCreator(const string &arc_type) const
Definition: register.h:63
static FstClassType * NullReader(std::istream &strm, const FstReadOptions &opts)
Definition: register.h:41
FstClassRegEntry(Reader r, Creator cr, Converter co)
Definition: register.h:31
Reader GetReader(const string &arc_type) const
Definition: register.h:59
FstClassType *(*)(std::istream &stream, const FstReadOptions &opts) Reader
Definition: register.h:84