diff options
author | Przemyslaw Szczepaniak <pszczepaniak@google.com> | 2013-03-04 11:30:34 +0000 |
---|---|---|
committer | Przemyslaw Szczepaniak <pszczepaniak@google.com> | 2013-03-04 11:30:34 +0000 |
commit | 5bf56ba7027cd5f22ff52d0138893f7a585135fb (patch) | |
tree | 19e17fc79b8873e66f211276d4dd169c480cede1 /src/include/fst/string.h | |
parent | 3da1eb108d36da35333b2d655202791af854996b (diff) | |
parent | 5b6dc79427b8f7eeb6a7ff68034ab8548ce670ea (diff) | |
download | openfst-kitkat-mr1-release.tar.gz |
Merge remote-tracking branch 'goog/ics-ub-google-tts' into jb-mr2-devandroid-sdk-4.4.2_r1.0.1android-sdk-4.4.2_r1android-cts-4.4_r4android-cts-4.4_r1android-4.4w_r1android-4.4_r1.2.0.1android-4.4_r1.2android-4.4_r1.1.0.1android-4.4_r1.1android-4.4_r1.0.1android-4.4_r1android-4.4_r0.9android-4.4_r0.8android-4.4_r0.7android-4.4.4_r2.0.1android-4.4.4_r2android-4.4.4_r1.0.1android-4.4.4_r1android-4.4.3_r1.1.0.1android-4.4.3_r1.1android-4.4.3_r1.0.1android-4.4.3_r1android-4.4.2_r2.0.1android-4.4.2_r2android-4.4.2_r1.0.1android-4.4.2_r1android-4.4.1_r1.0.1android-4.4.1_r1android-4.3_r3.1android-4.3_r3android-4.3_r2.3android-4.3_r2.2android-4.3_r2.1android-4.3_r2android-4.3_r1.1android-4.3_r1android-4.3_r0.9.1android-4.3_r0.9android-4.3.1_r1tools_r22.2kitkat-wearkitkat-releasekitkat-mr2.2-releasekitkat-mr2.1-releasekitkat-mr2-releasekitkat-mr1.1-releasekitkat-mr1-releasekitkat-devkitkat-cts-releasekitkat-cts-devjb-mr2.0.0-releasejb-mr2.0-releasejb-mr2-releasejb-mr2-devidea133-weekly-releaseidea133
Diffstat (limited to 'src/include/fst/string.h')
-rw-r--r-- | src/include/fst/string.h | 31 |
1 files changed, 27 insertions, 4 deletions
diff --git a/src/include/fst/string.h b/src/include/fst/string.h index d51182e..9eaf7a3 100644 --- a/src/include/fst/string.h +++ b/src/include/fst/string.h @@ -57,6 +57,15 @@ class StringCompiler { return true; } + template <class F> + bool operator()(const string &s, F *fst, Weight w) const { + vector<Label> labels; + if (!ConvertStringToLabels(s, &labels)) + return false; + Compile(labels, fst, w); + return true; + } + private: bool ConvertStringToLabels(const string &str, vector<Label> *labels) const { labels->clear(); @@ -83,22 +92,35 @@ class StringCompiler { return true; } - void Compile(const vector<Label> &labels, MutableFst<A> *fst) const { + void Compile(const vector<Label> &labels, MutableFst<A> *fst, + const Weight &weight = Weight::One()) const { fst->DeleteStates(); while (fst->NumStates() <= labels.size()) fst->AddState(); for (size_t i = 0; i < labels.size(); ++i) fst->AddArc(i, Arc(labels[i], labels[i], Weight::One(), i + 1)); fst->SetStart(0); - fst->SetFinal(labels.size(), Weight::One()); + fst->SetFinal(labels.size(), weight); } template <class Unsigned> - void Compile(const vector<Label> &labels, CompactFst<A, StringCompactor<A>, - Unsigned> *fst) const { + void Compile(const vector<Label> &labels, + CompactFst<A, StringCompactor<A>, Unsigned> *fst) const { fst->SetCompactElements(labels.begin(), labels.end()); } + template <class Unsigned> + void Compile(const vector<Label> &labels, + CompactFst<A, WeightedStringCompactor<A>, Unsigned> *fst, + const Weight &weight = Weight::One()) const { + vector<pair<Label, Weight> > compacts; + compacts.reserve(labels.size()); + for (size_t i = 0; i < labels.size(); ++i) + compacts.push_back(make_pair(labels[i], Weight::One())); + compacts.back().second = weight; + fst->SetCompactElements(compacts.begin(), compacts.end()); + } + bool ConvertSymbolToLabel(const char *s, Label* output) const { int64 n; if (syms_) { @@ -167,6 +189,7 @@ class StringPrinter { } *output = sstrm.str(); } else if (token_type_ == BYTE) { + output->reserve(labels_.size()); for (size_t i = 0; i < labels_.size(); ++i) { output->push_back(labels_[i]); } |