20 #ifndef FST_EXTENSIONS_FAR_FAR_CLASS_H_ 21 #define FST_EXTENSIONS_FAR_FAR_CLASS_H_ 34 #include <string_view> 45 virtual const std::string &
ArcType()
const = 0;
46 virtual bool Done()
const = 0;
47 virtual bool Error()
const = 0;
48 virtual const std::string &
GetKey()
const = 0;
50 virtual bool Find(
const std::string &key) = 0;
51 virtual void Next() = 0;
52 virtual void Reset() = 0;
62 : reader_(
FarReader<Arc>::Open(source)) {}
65 : reader_(
FarReader<Arc>::Open(sources)) {}
67 const std::string &
ArcType() const final {
return Arc::Type(); }
69 bool Done() const final {
return reader_->Done(); }
71 bool Error() const final {
return reader_->Error(); }
73 bool Find(
const std::string &key)
final {
return reader_->Find(key); }
76 fstc_ = std::make_unique<FstClass>(*reader_->GetFst());
80 const std::string &
GetKey() const final {
return reader_->GetKey(); }
82 void Next() final {
return reader_->Next(); }
84 void Reset() final { reader_->Reset(); }
93 std::unique_ptr<FarReader<Arc>> reader_;
94 mutable std::unique_ptr<FstClass> fstc_;
101 const std::vector<std::string> &>;
106 const std::string &
ArcType()
const {
return impl_->ArcType(); }
108 bool Done()
const {
return impl_->Done(); }
112 bool Error()
const {
return (impl_) ? impl_->Error() :
true; }
114 bool Find(
const std::string &key) {
return impl_->Find(key); }
118 const std::string &
GetKey()
const {
return impl_->GetKey(); }
128 if (Arc::Type() !=
ArcType())
return nullptr;
136 if (Arc::Type() !=
ArcType())
return nullptr;
147 static std::unique_ptr<FarReaderClass> Open(
148 std::string_view source);
150 static std::unique_ptr<FarReaderClass> Open(
151 const std::vector<std::string> &sources);
156 : impl_(std::move(impl)) {}
158 std::unique_ptr<FarReaderImplBase> impl_;
166 auto impl = std::make_unique<FarReaderClassImpl<Arc>>(args->
args);
167 if (impl->GetFarReader() ==
nullptr) {
182 virtual bool Add(
const std::string &key,
const FstClass &
fst) = 0;
183 virtual const std::string &
ArcType()
const = 0;
184 virtual bool Error()
const = 0;
199 FSTERROR() <<
"Cannot write FST with " <<
fst.ArcType() <<
" arcs to " 200 <<
"FAR with " <<
ArcType() <<
" arcs";
203 writer_->Add(key, *(
fst.GetFst<Arc>()));
207 const std::string &
ArcType() const final {
return Arc::Type(); }
209 bool Error() const final {
return writer_->Error(); }
218 std::unique_ptr<FarWriter<Arc>> writer_;
232 static std::unique_ptr<FarWriterClass>
Create(
233 const std::string &source,
const std::string &arc_type,
237 return impl_->Add(key, fst);
242 bool Error()
const {
return (impl_) ? impl_->Error() :
true; }
244 const std::string &
ArcType()
const {
return impl_->ArcType(); }
250 if (Arc::Type() !=
ArcType())
return nullptr;
258 if (Arc::Type() !=
ArcType())
return nullptr;
270 : impl_(std::move(impl)) {}
272 std::unique_ptr<FarWriterImplBase> impl_;
281 std::get<0>(args->
args), std::get<1>(args->
args))));
287 #endif // FST_EXTENSIONS_FAR_FAR_CLASS_H_
FarType Type() const final
const FarReader< Arc > * GetFarReader() const
FarWriterClassImpl(std::string_view source, FarType type=FarType::DEFAULT)
bool Add(const std::string &key, const FstClass &fst)
FarReader< Arc > * GetFarReader()
bool Add(const std::string &key, const FstClass &fst) final
const std::string & ArcType() const final
virtual ~FarReaderImplBase()=default
virtual bool Error() const =0
const FstClass * GetFstClass() const
std::unique_ptr< T > WrapUnique(T *ptr)
FarReader< Arc > * GetFarReader()
FarReaderClassImpl(const std::vector< std::string > &sources)
FarReaderClassImpl(std::string_view source)
const std::string & ArcType() const final
std::pair< const std::string &, FarType > CreateFarWriterClassInnerArgs
void OpenFarReaderClass(OpenFarReaderClassArgs *args)
bool Find(const std::string &key) final
const std::string & ArcType() const
FarWriter< Arc > * GetFarWriter()
const std::string & GetKey() const
virtual const FstClass * GetFstClass() const =0
virtual bool Find(const std::string &key)=0
virtual FarType Type() const =0
FarType Type() const final
const FarReader< Arc > * GetFarReader() const
void CreateFarWriterClass(CreateFarWriterClassArgs *args)
const FarWriter< Arc > * GetFarWriter() const
bool Find(const std::string &key)
FarWriter< Arc > * GetFarWriter()
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)
virtual const std::string & ArcType() const =0
virtual const std::string & GetKey() const =0
const FarWriter< Arc > * GetFarWriter() const
const std::string & ArcType() const
virtual bool Done() const =0
const std::string & GetKey() const final
const FstClass * GetFstClass() const final