20 #ifndef FST_EXTENSIONS_FAR_FAR_CLASS_H_ 21 #define FST_EXTENSIONS_FAR_FAR_CLASS_H_ 40 virtual const std::string &
ArcType()
const = 0;
41 virtual bool Done()
const = 0;
42 virtual bool Error()
const = 0;
43 virtual const std::string &
GetKey()
const = 0;
45 virtual bool Find(
const std::string &key) = 0;
46 virtual void Next() = 0;
47 virtual void Reset() = 0;
57 : reader_(
FarReader<Arc>::Open(source)) {}
60 : reader_(
FarReader<Arc>::Open(sources)) {}
62 const std::string &
ArcType() const final {
return Arc::Type(); }
64 bool Done() const final {
return reader_->Done(); }
66 bool Error() const final {
return reader_->Error(); }
68 bool Find(
const std::string &key)
final {
return reader_->Find(key); }
71 fstc_ = std::make_unique<FstClass>(*reader_->GetFst());
75 const std::string &
GetKey() const final {
return reader_->GetKey(); }
77 void Next() final {
return reader_->Next(); }
79 void Reset() final { reader_->Reset(); }
88 std::unique_ptr<FarReader<Arc>> reader_;
89 mutable std::unique_ptr<FstClass> fstc_;
96 const std::vector<std::string> &>;
101 const std::string &
ArcType()
const {
return impl_->ArcType(); }
103 bool Done()
const {
return impl_->Done(); }
107 bool Error()
const {
return (impl_) ? impl_->Error() :
true; }
109 bool Find(
const std::string &key) {
return impl_->Find(key); }
113 const std::string &
GetKey()
const {
return impl_->GetKey(); }
123 if (Arc::Type() !=
ArcType())
return nullptr;
131 if (Arc::Type() !=
ArcType())
return nullptr;
142 static std::unique_ptr<FarReaderClass> Open(
const std::string &source);
144 static std::unique_ptr<FarReaderClass> Open(
145 const std::vector<std::string> &sources);
150 : impl_(std::move(impl)) {}
152 std::unique_ptr<FarReaderImplBase> impl_;
160 auto impl = std::make_unique<FarReaderClassImpl<Arc>>(args->
args);
161 if (impl->GetFarReader() ==
nullptr) {
176 virtual bool Add(
const std::string &key,
const FstClass &
fst) = 0;
177 virtual const std::string &
ArcType()
const = 0;
178 virtual bool Error()
const = 0;
193 FSTERROR() <<
"Cannot write FST with " <<
fst.ArcType() <<
" arcs to " 194 <<
"FAR with " <<
ArcType() <<
" arcs";
197 writer_->Add(key, *(
fst.GetFst<Arc>()));
201 const std::string &
ArcType() const final {
return Arc::Type(); }
203 bool Error() const final {
return writer_->Error(); }
212 std::unique_ptr<FarWriter<Arc>> writer_;
226 static std::unique_ptr<FarWriterClass>
Create(
227 const std::string &source,
const std::string &arc_type,
231 return impl_->Add(key, fst);
236 bool Error()
const {
return (impl_) ? impl_->Error() :
true; }
238 const std::string &
ArcType()
const {
return impl_->ArcType(); }
244 if (Arc::Type() !=
ArcType())
return nullptr;
252 if (Arc::Type() !=
ArcType())
return nullptr;
264 : impl_(std::move(impl)) {}
266 std::unique_ptr<FarWriterImplBase> impl_;
275 std::get<0>(args->
args), std::get<1>(args->
args))));
281 #endif // FST_EXTENSIONS_FAR_FAR_CLASS_H_
FarType Type() const final
const FarReader< Arc > * GetFarReader() const
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 bool Error() const =0
virtual ~FarWriterImplBase()
const FstClass * GetFstClass() const
std::unique_ptr< T > WrapUnique(T *ptr)
FarReader< Arc > * GetFarReader()
FarReaderClassImpl(const std::vector< std::string > &sources)
const std::string & ArcType() const final
FarReaderClassImpl(const std::string &source)
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
FarWriterClassImpl(const std::string &source, FarType type=FarType::DEFAULT)
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
virtual ~FarReaderImplBase()