18 #ifndef FST_SCRIPT_ENCODEMAPPER_CLASS_H_ 19 #define FST_SCRIPT_ENCODEMAPPER_CLASS_H_ 35 #include <string_view> 47 virtual const std::string &
ArcType()
const = 0;
48 virtual const std::string &
WeightType()
const = 0;
50 virtual uint8_t
Flags()
const = 0;
53 virtual bool Write(
const std::string &)
const = 0;
54 virtual bool Write(std::ostream &,
const std::string &)
const = 0;
71 const std::string &
ArcType() const final {
return Arc::Type(); }
73 const std::string &
WeightType() const final {
return Arc::Weight::Type(); }
79 uint8_t
Flags() const final {
return mapper_.Flags(); }
82 return mapper_.Properties(inprops);
87 bool Write(
const std::string &source)
const final {
88 return mapper_.Write(source);
91 bool Write(std::ostream &strm,
const std::string &source)
const final {
92 return mapper_.Write(strm, source);
96 return mapper_.InputSymbols();
100 return mapper_.OutputSymbols();
104 mapper_.SetInputSymbols(syms);
108 mapper_.SetOutputSymbols(syms);
140 : impl_(other.impl_ == nullptr ? nullptr : other.impl_->
Copy()) {}
143 impl_.reset(other.impl_ ==
nullptr ?
nullptr : other.impl_->Copy());
149 const std::string &
ArcType()
const {
return impl_->ArcType(); }
151 const std::string &
WeightType()
const {
return impl_->WeightType(); }
153 uint8_t
Flags()
const {
return impl_->Flags(); }
155 uint64_t
Properties(uint64_t inprops) {
return impl_->Properties(inprops); }
159 static std::unique_ptr<EncodeMapperClass> Read(
160 const std::string &source);
162 static std::unique_ptr<EncodeMapperClass> Read(
163 std::istream &strm,
const std::string &source);
165 bool Write(
const std::string &source)
const {
return impl_->Write(source); }
167 bool Write(std::ostream &strm,
const std::string &source)
const {
168 return impl_->Write(strm, source);
176 impl_->SetInputSymbols(syms);
180 impl_->SetOutputSymbols(syms);
187 if (Arc::Type() !=
ArcType()) {
197 if (Arc::Type() !=
ArcType()) {
208 static std::unique_ptr<EncodeMapperClass>
Read(std::istream &strm,
209 std::string_view source) {
210 std::unique_ptr<EncodeMapper<Arc>> mapper(
212 return mapper ? std::make_unique<EncodeMapperClass>(*mapper) :
nullptr;
216 static std::unique_ptr<EncodeMapperImplBase>
Create(
218 return std::make_unique<EncodeMapperClassImpl<Arc>>(
224 : impl_(std::move(impl)) {}
230 std::unique_ptr<EncodeMapperImplBase> impl_;
238 template <
class Reader,
class Creator>
244 : reader(reader), creator(creator) {}
249 template <
class Reader,
class Creator>
252 EncodeMapperClassRegEntry<Reader, Creator>,
253 EncodeMapperClassIORegister<Reader, Creator>> {
256 return this->GetEntry(arc_type).reader;
260 return this->GetEntry(arc_type).creator;
265 std::string legal_type(key);
267 legal_type.append(
"-arc.so");
274 using Reader = std::unique_ptr<EncodeMapperClass> (*)(
275 std::istream &stream, std::string_view source);
277 using Creator = std::unique_ptr<EncodeMapperImplBase> (*)(uint8_t flags,
290 #define REGISTER_ENCODEMAPPER_CLASS(Arc) \ 291 static EncodeMapperClassIORegistration::Registerer \ 292 EncodeMapperClass_##Arc##_registerer( \ 294 EncodeMapperClassIORegistration::Entry( \ 295 EncodeMapperClass::Read<Arc>, EncodeMapperClass::Create<Arc>)); 300 #endif // FST_SCRIPT_ENCODEMAPPER_CLASS_H_ ArcClass operator()(const ArcClass &a) final
std::unique_ptr< EncodeMapperImplBase >(*)(uint8_t flags, EncodeType type) Creator
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)
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)
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
std::unique_ptr< EncodeMapperClass >(*)(std::istream &stream, std::string_view source) Reader
virtual ~EncodeMapperImplBase()=default
virtual bool Write(const std::string &) const =0
static std::unique_ptr< EncodeMapperClass > Read(std::istream &strm, std::string_view source)
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