18 #ifndef FST_SCRIPT_ENCODEMAPPER_CLASS_H_ 19 #define FST_SCRIPT_ENCODEMAPPER_CLASS_H_ 31 #include <string_view> 43 virtual const std::string &
ArcType()
const = 0;
44 virtual const std::string &
WeightType()
const = 0;
46 virtual uint8_t
Flags()
const = 0;
49 virtual bool Write(
const std::string &)
const = 0;
50 virtual bool Write(std::ostream &,
const std::string &)
const = 0;
67 const std::string &
ArcType() const final {
return Arc::Type(); }
69 const std::string &
WeightType() const final {
return Arc::Weight::Type(); }
75 uint8_t
Flags() const final {
return mapper_.Flags(); }
78 return mapper_.Properties(inprops);
83 bool Write(
const std::string &source)
const final {
84 return mapper_.Write(source);
87 bool Write(std::ostream &strm,
const std::string &source)
const final {
88 return mapper_.Write(strm, source);
92 return mapper_.InputSymbols();
96 return mapper_.OutputSymbols();
100 mapper_.SetInputSymbols(syms);
104 mapper_.SetOutputSymbols(syms);
136 : impl_(other.impl_ == nullptr ? nullptr : other.impl_->
Copy()) {}
139 impl_.reset(other.impl_ ==
nullptr ?
nullptr : other.impl_->Copy());
145 const std::string &
ArcType()
const {
return impl_->ArcType(); }
147 const std::string &
WeightType()
const {
return impl_->WeightType(); }
149 uint8_t
Flags()
const {
return impl_->Flags(); }
151 uint64_t
Properties(uint64_t inprops) {
return impl_->Properties(inprops); }
155 static std::unique_ptr<EncodeMapperClass> Read(
const std::string &source);
157 static std::unique_ptr<EncodeMapperClass> Read(std::istream &strm,
158 const std::string &source);
160 bool Write(
const std::string &source)
const {
return impl_->Write(source); }
162 bool Write(std::ostream &strm,
const std::string &source)
const {
163 return impl_->Write(strm, source);
171 impl_->SetInputSymbols(syms);
175 impl_->SetOutputSymbols(syms);
182 if (Arc::Type() !=
ArcType()) {
192 if (Arc::Type() !=
ArcType()) {
203 static std::unique_ptr<EncodeMapperClass>
Read(std::istream &strm,
204 const std::string &source) {
205 std::unique_ptr<EncodeMapper<Arc>> mapper(
207 return mapper ? std::make_unique<EncodeMapperClass>(*mapper) :
nullptr;
211 static std::unique_ptr<EncodeMapperImplBase>
Create(
213 return std::make_unique<EncodeMapperClassImpl<Arc>>(
219 : impl_(std::move(impl)) {}
225 std::unique_ptr<EncodeMapperImplBase> impl_;
233 template <
class Reader,
class Creator>
239 : reader(reader), creator(creator) {}
244 template <
class Reader,
class Creator>
247 EncodeMapperClassRegEntry<Reader, Creator>,
248 EncodeMapperClassIORegister<Reader, Creator>> {
251 return this->GetEntry(arc_type).reader;
255 return this->GetEntry(arc_type).creator;
260 std::string legal_type(key);
262 legal_type.append(
"-arc.so");
269 using Reader = std::unique_ptr<EncodeMapperClass> (*)(
270 std::istream &stream,
const std::string &source);
272 using Creator = std::unique_ptr<EncodeMapperImplBase> (*)(uint8_t flags,
285 #define REGISTER_ENCODEMAPPER_CLASS(Arc) \ 286 static EncodeMapperClassIORegistration::Registerer \ 287 EncodeMapperClass_##Arc##_registerer( \ 289 EncodeMapperClassIORegistration::Entry( \ 290 EncodeMapperClass::Read<Arc>, EncodeMapperClass::Create<Arc>)); 295 #endif // FST_SCRIPT_ENCODEMAPPER_CLASS_H_ virtual ~EncodeMapperImplBase()
ArcClass operator()(const ArcClass &a) final
std::unique_ptr< EncodeMapperImplBase >(*)(uint8_t flags, EncodeType type) Creator
std::unique_ptr< EncodeMapperClass >(*)(std::istream &stream, const std::string &source) Reader
void ConvertToLegalCSymbol(std::string *s)
bool Write(const std::string &source) const final
void SetOutputSymbols(const SymbolTable *syms)
virtual const SymbolTable * OutputSymbols() const =0
bool Write(std::ostream &strm, const std::string &source) const
virtual const std::string & ArcType() const =0
EncodeMapperClass(const EncodeMapperClass &other)
const std::string & WeightType() const final
uint64_t Properties(uint64_t inprops) final
virtual const SymbolTable * InputSymbols() const =0
bool Write(std::ostream &strm, const std::string &source) const final
ArcClass operator()(const ArcClass &arc)
const std::string & ArcType() const
void SetOutputSymbols(const SymbolTable *syms) final
const SymbolTable * OutputSymbols() const final
Reader GetReader(std::string_view arc_type) const
Creator GetCreator(std::string_view arc_type) const
const SymbolTable * InputSymbols() const
const EncodeMapper< Arc > * GetEncodeMapper() const
virtual const std::string & WeightType() const =0
EncodeMapperClass(const EncodeMapper< Arc > &mapper)
static std::unique_ptr< EncodeMapperClass > Read(std::istream &strm, const std::string &source)
EncodeType Type() const final
std::string ConvertKeyToSoFilename(std::string_view key) const final
virtual void SetInputSymbols(const SymbolTable *)=0
EncodeMapperClass & operator=(const EncodeMapperClass &other)
virtual uint8_t Flags() const =0
void SetInputSymbols(const SymbolTable *syms) final
virtual EncodeType Type() const =0
virtual EncodeMapperImplBase * Copy() const =0
const SymbolTable * InputSymbols() const final
virtual ArcClass operator()(const ArcClass &)=0
EncodeMapperClassRegEntry(Reader reader, Creator creator)
~EncodeMapperClassImpl() override
EncodeMapper< Arc > * GetImpl()
const W * GetWeight() const
EncodeMapperClassRegEntry()
static std::unique_ptr< EncodeMapperImplBase > Create(uint8_t flags, EncodeType type=ENCODE)
uint64_t Properties(uint64_t inprops)
EncodeMapperClassImpl< Arc > * Copy() const final
virtual bool Write(const std::string &) const =0
const SymbolTable * OutputSymbols() const
virtual uint64_t Properties(uint64_t)=0
void SetInputSymbols(const SymbolTable *syms)
const std::string & ArcType() const final
bool Write(const std::string &source) const
EncodeMapper< Arc > * GetEncodeMapper()
EncodeMapperClassImpl(const EncodeMapper< Arc > &mapper)
virtual void SetOutputSymbols(const SymbolTable *)=0
const std::string & WeightType() const
uint8_t Flags() const final
const EncodeMapper< Arc > * GetImpl() const