summaryrefslogtreecommitdiff
path: root/kaldi_io/src/tools/openfst/include/fst/matcher-fst.h
diff options
context:
space:
mode:
Diffstat (limited to 'kaldi_io/src/tools/openfst/include/fst/matcher-fst.h')
-rw-r--r--kaldi_io/src/tools/openfst/include/fst/matcher-fst.h359
1 files changed, 0 insertions, 359 deletions
diff --git a/kaldi_io/src/tools/openfst/include/fst/matcher-fst.h b/kaldi_io/src/tools/openfst/include/fst/matcher-fst.h
deleted file mode 100644
index 73e64ad..0000000
--- a/kaldi_io/src/tools/openfst/include/fst/matcher-fst.h
+++ /dev/null
@@ -1,359 +0,0 @@
-// matcher-fst.h
-
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-// Copyright 2005-2010 Google, Inc.
-// Author: riley@google.com (Michael Riley)
-//
-// \file
-// Class to add a matcher to an FST.
-
-#ifndef FST_LIB_MATCHER_FST_FST_H__
-#define FST_LIB_MATCHER_FST_FST_H__
-
-#include <fst/add-on.h>
-#include <fst/const-fst.h>
-#include <fst/lookahead-matcher.h>
-
-
-namespace fst {
-
-// WRITABLE MATCHERS - these have the interface of Matchers (see
-// matcher.h) and these additional methods:
-//
-// template <class F>
-// class Matcher {
-// public:
-// typedef ... MatcherData; // Initialization data
-// ...
-// // Constructor with additional argument for external initialization
-// // data; matcher increments its reference count on construction and
-// // decrements the reference count, and if 0 deletes, on destruction.
-// Matcher(const F &fst, MatchType type, MatcherData *data);
-//
-// // Returns pointer to initialization data that can be
-// // passed to a Matcher constructor.
-// MatcherData *GetData() const;
-// };
-
-// The matcher initialization data class must have the form:
-// class MatcherData {
-// public:
-// // Required copy constructor.
-// MatcherData(const MatcherData &);
-// //
-// // Required I/O methods.
-// static MatcherData *Read(istream &istrm);
-// bool Write(ostream &ostrm);
-//
-// // Required reference counting.
-// int RefCount() const;
-// int IncrRefCount();
-// int DecrRefCount();
-// };
-
-// Default MatcherFst initializer - does nothing.
-template <class M>
-class NullMatcherFstInit {
- public:
- typedef AddOnPair<typename M::MatcherData, typename M::MatcherData> D;
- typedef AddOnImpl<typename M::FST, D> Impl;
- NullMatcherFstInit(Impl **) {}
-};
-
-// Class to add a matcher M to an Fst F. Creates a new Fst of type name N.
-// Optional function object I can be used to initialize the Fst.
-template <class F, class M, const char* N,
- class I = NullMatcherFstInit<M> >
-class MatcherFst
- : public ImplToExpandedFst<
- AddOnImpl<F,
- AddOnPair<typename M::MatcherData,
- typename M::MatcherData> > > {
- public:
- friend class StateIterator< MatcherFst<F, M, N, I> >;
- friend class ArcIterator< MatcherFst<F, M, N, I> >;
-
- typedef F FST;
- typedef M FstMatcher;
- typedef typename F::Arc Arc;
- typedef typename Arc::StateId StateId;
- typedef AddOnPair<typename M::MatcherData, typename M::MatcherData> D;
- typedef AddOnImpl<F, D> Impl;
-
- MatcherFst() : ImplToExpandedFst<Impl>(new Impl(F(), N)) {}
-
- explicit MatcherFst(const F &fst)
- : ImplToExpandedFst<Impl>(CreateImpl(fst, N)) {}
-
- explicit MatcherFst(const Fst<Arc> &fst)
- : ImplToExpandedFst<Impl>(CreateImpl(fst, N)) {}
-
- // See Fst<>::Copy() for doc.
- MatcherFst(const MatcherFst<F, M, N, I> &fst, bool safe = false)
- : ImplToExpandedFst<Impl>(fst, safe) {}
-
- // Get a copy of this MatcherFst. See Fst<>::Copy() for further doc.
- virtual MatcherFst<F, M, N, I> *Copy(bool safe = false) const {
- return new MatcherFst<F, M, N, I>(*this, safe);
- }
-
- // Read a MatcherFst from an input stream; return NULL on error
- static MatcherFst<F, M, N, I> *Read(istream &strm,
- const FstReadOptions &opts) {
- Impl *impl = Impl::Read(strm, opts);
- return impl ? new MatcherFst<F, M, N, I>(impl) : 0;
- }
-
- // Read a MatcherFst from a file; return NULL on error
- // Empty filename reads from standard input
- static MatcherFst<F, M, N, I> *Read(const string &filename) {
- Impl *impl = ImplToExpandedFst<Impl>::Read(filename);
- return impl ? new MatcherFst<F, M, N, I>(impl) : 0;
- }
-
- virtual bool Write(ostream &strm, const FstWriteOptions &opts) const {
- return GetImpl()->Write(strm, opts);
- }
-
- virtual bool Write(const string &filename) const {
- return Fst<Arc>::WriteFile(filename);
- }
-
- virtual void InitStateIterator(StateIteratorData<Arc> *data) const {
- return GetImpl()->InitStateIterator(data);
- }
-
- virtual void InitArcIterator(StateId s, ArcIteratorData<Arc> *data) const {
- return GetImpl()->InitArcIterator(s, data);
- }
-
- virtual M *InitMatcher(MatchType match_type) const {
- return new M(GetFst(), match_type, GetData(match_type));
- }
-
- // Allows access to MatcherFst components.
- Impl *GetImpl() const {
- return ImplToFst<Impl, ExpandedFst<Arc> >::GetImpl();
- }
-
- F& GetFst() const { return GetImpl()->GetFst(); }
-
- typename M::MatcherData *GetData(MatchType match_type) const {
- D *data = GetImpl()->GetAddOn();
- return match_type == MATCH_INPUT ? data->First() : data->Second();
- }
-
- private:
- static Impl *CreateImpl(const F &fst, const string &name) {
- M imatcher(fst, MATCH_INPUT);
- M omatcher(fst, MATCH_OUTPUT);
- D *data = new D(imatcher.GetData(), omatcher.GetData());
- Impl *impl = new Impl(fst, name);
- impl->SetAddOn(data);
- I init(&impl);
- data->DecrRefCount();
- return impl;
- }
-
- static Impl *CreateImpl(const Fst<Arc> &fst, const string &name) {
- F ffst(fst);
- return CreateImpl(ffst, name);
- }
-
- explicit MatcherFst(Impl *impl) : ImplToExpandedFst<Impl>(impl) {}
-
- // Makes visible to friends.
- void SetImpl(Impl *impl, bool own_impl = true) {
- ImplToFst< Impl, ExpandedFst<Arc> >::SetImpl(impl, own_impl);
- }
-
- void operator=(const MatcherFst<F, M, N, I> &fst); // disallow
-};
-
-
-// Specialization fo MatcherFst.
-template <class F, class M, const char* N, class I>
-class StateIterator< MatcherFst<F, M, N, I> > : public StateIterator<F> {
- public:
- explicit StateIterator(const MatcherFst<F, M, N, I> &fst) :
- StateIterator<F>(fst.GetImpl()->GetFst()) {}
-};
-
-
-// Specialization for MatcherFst.
-template <class F, class M, const char* N, class I>
-class ArcIterator< MatcherFst<F, M, N, I> > : public ArcIterator<F> {
- public:
- ArcIterator(const MatcherFst<F, M, N, I> &fst, typename F::Arc::StateId s)
- : ArcIterator<F>(fst.GetImpl()->GetFst(), s) {}
-};
-
-
-// Specialization for MatcherFst
-template <class F, class M, const char* N, class I>
-class Matcher< MatcherFst<F, M, N, I> > {
- public:
- typedef MatcherFst<F, M, N, I> FST;
- typedef typename F::Arc Arc;
- typedef typename Arc::StateId StateId;
- typedef typename Arc::Label Label;
-
- Matcher(const FST &fst, MatchType match_type) {
- matcher_ = fst.InitMatcher(match_type);
- }
-
- Matcher(const Matcher<FST> &matcher) {
- matcher_ = matcher.matcher_->Copy();
- }
-
- ~Matcher() { delete matcher_; }
-
- Matcher<FST> *Copy() const {
- return new Matcher<FST>(*this);
- }
-
- MatchType Type(bool test) const { return matcher_->Type(test); }
- void SetState(StateId s) { matcher_->SetState(s); }
- bool Find(Label label) { return matcher_->Find(label); }
- bool Done() const { return matcher_->Done(); }
- const Arc& Value() const { return matcher_->Value(); }
- void Next() { matcher_->Next(); }
- uint64 Properties(uint64 props) const { return matcher_->Properties(props); }
- uint32 Flags() const { return matcher_->Flags(); }
-
- private:
- M *matcher_;
-
- void operator=(const Matcher<Arc> &); // disallow
-};
-
-
-// Specialization for MatcherFst
-template <class F, class M, const char* N, class I>
-class LookAheadMatcher< MatcherFst<F, M, N, I> > {
- public:
- typedef MatcherFst<F, M, N, I> FST;
- typedef typename F::Arc Arc;
- typedef typename Arc::StateId StateId;
- typedef typename Arc::Label Label;
- typedef typename Arc::Weight Weight;
-
- LookAheadMatcher(const FST &fst, MatchType match_type) {
- matcher_ = fst.InitMatcher(match_type);
- }
-
- LookAheadMatcher(const LookAheadMatcher<FST> &matcher, bool safe = false) {
- matcher_ = matcher.matcher_->Copy(safe);
- }
-
- ~LookAheadMatcher() { delete matcher_; }
-
- // General matcher methods
- LookAheadMatcher<FST> *Copy(bool safe = false) const {
- return new LookAheadMatcher<FST>(*this, safe);
- }
-
- MatchType Type(bool test) const { return matcher_->Type(test); }
- void SetState(StateId s) { matcher_->SetState(s); }
- bool Find(Label label) { return matcher_->Find(label); }
- bool Done() const { return matcher_->Done(); }
- const Arc& Value() const { return matcher_->Value(); }
- void Next() { matcher_->Next(); }
- const FST &GetFst() const { return matcher_->GetFst(); }
- uint64 Properties(uint64 props) const { return matcher_->Properties(props); }
- uint32 Flags() const { return matcher_->Flags(); }
-
- // Look-ahead methods
- bool LookAheadLabel(Label label) const {
- return matcher_->LookAheadLabel(label);
- }
-
- bool LookAheadFst(const Fst<Arc> &fst, StateId s) {
- return matcher_->LookAheadFst(fst, s);
- }
-
- Weight LookAheadWeight() const { return matcher_->LookAheadWeight(); }
-
- bool LookAheadPrefix(Arc *arc) const {
- return matcher_->LookAheadPrefix(arc);
- }
-
- void InitLookAheadFst(const Fst<Arc>& fst, bool copy = false) {
- matcher_->InitLookAheadFst(fst, copy);
- }
-
- private:
- M *matcher_;
-
- void operator=(const LookAheadMatcher<FST> &); // disallow
-};
-
-//
-// Useful aliases when using StdArc and LogArc.
-//
-
-// Arc look-ahead matchers
-extern const char arc_lookahead_fst_type[];
-
-typedef MatcherFst<ConstFst<StdArc>,
- ArcLookAheadMatcher<SortedMatcher<ConstFst<StdArc> > >,
- arc_lookahead_fst_type> StdArcLookAheadFst;
-
-typedef MatcherFst<ConstFst<LogArc>,
- ArcLookAheadMatcher<SortedMatcher<ConstFst<LogArc> > >,
- arc_lookahead_fst_type> LogArcLookAheadFst;
-
-
-// Label look-ahead matchers
-extern const char ilabel_lookahead_fst_type[];
-extern const char olabel_lookahead_fst_type[];
-
-static const uint32 ilabel_lookahead_flags = kInputLookAheadMatcher |
- kLookAheadWeight | kLookAheadPrefix |
- kLookAheadEpsilons | kLookAheadNonEpsilonPrefix;
-static const uint32 olabel_lookahead_flags = kOutputLookAheadMatcher |
- kLookAheadWeight | kLookAheadPrefix |
- kLookAheadEpsilons | kLookAheadNonEpsilonPrefix;
-
-typedef MatcherFst<ConstFst<StdArc>,
- LabelLookAheadMatcher<SortedMatcher<ConstFst<StdArc> >,
- ilabel_lookahead_flags,
- FastLogAccumulator<StdArc> >,
- ilabel_lookahead_fst_type,
- LabelLookAheadRelabeler<StdArc> > StdILabelLookAheadFst;
-
-typedef MatcherFst<ConstFst<LogArc>,
- LabelLookAheadMatcher<SortedMatcher<ConstFst<LogArc> >,
- ilabel_lookahead_flags,
- FastLogAccumulator<LogArc> >,
- ilabel_lookahead_fst_type,
- LabelLookAheadRelabeler<LogArc> > LogILabelLookAheadFst;
-
-typedef MatcherFst<ConstFst<StdArc>,
- LabelLookAheadMatcher<SortedMatcher<ConstFst<StdArc> >,
- olabel_lookahead_flags,
- FastLogAccumulator<StdArc> >,
- olabel_lookahead_fst_type,
- LabelLookAheadRelabeler<StdArc> > StdOLabelLookAheadFst;
-
-typedef MatcherFst<ConstFst<LogArc>,
- LabelLookAheadMatcher<SortedMatcher<ConstFst<LogArc> >,
- olabel_lookahead_flags,
- FastLogAccumulator<LogArc> >,
- olabel_lookahead_fst_type,
- LabelLookAheadRelabeler<LogArc> > LogOLabelLookAheadFst;
-
-} // namespace fst
-
-#endif // FST_LIB_MATCHER_FST_FST_H__