1f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
2f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson// Licensed under the Apache License, Version 2.0 (the "License");
3f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson// you may not use this file except in compliance with the License.
4f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson// You may obtain a copy of the License at
5f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson//
6f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson//     http://www.apache.org/licenses/LICENSE-2.0
7f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson//
8f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson// Unless required by applicable law or agreed to in writing, software
9f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson// distributed under the License is distributed on an "AS IS" BASIS,
10f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson// See the License for the specific language governing permissions and
12f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson// limitations under the License.
13f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson//
14f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson// Copyright 2005-2010 Google, Inc.
15f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson// Author: jpr@google.com (Jake Ratkiewicz)
16f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
17f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson// Convenience file that includes all FstScript functionality
18f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
19f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#ifndef FST_SCRIPT_FSTSCRIPT_H_
20f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#define FST_SCRIPT_FSTSCRIPT_H_
21f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
22f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson// Major classes
23f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#include <fst/script/fst-class.h>
24f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#include <fst/script/weight-class.h>
25f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#include <fst/script/text-io.h>
26f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
27f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson// Templates like Operation< >, Apply< >
28f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#include <fst/script/script-impl.h>
29f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
30f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson// Operations
31f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#include <fst/script/arcsort.h>
32f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#include <fst/script/closure.h>
33f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#include <fst/script/compile.h>
34f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#include <fst/script/compose.h>
35f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#include <fst/script/concat.h>
36f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#include <fst/script/connect.h>
37f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#include <fst/script/convert.h>
38f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#include <fst/script/decode.h>
39f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#include <fst/script/determinize.h>
40f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#include <fst/script/difference.h>
41f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#include <fst/script/draw.h>
42f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#include <fst/script/encode.h>
43f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#include <fst/script/epsnormalize.h>
44f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#include <fst/script/equal.h>
45f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#include <fst/script/equivalent.h>
46f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#include <fst/script/info.h>
47f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#include <fst/script/intersect.h>
48f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#include <fst/script/invert.h>
49f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#include <fst/script/map.h>
50f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#include <fst/script/minimize.h>
51f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#include <fst/script/print.h>
52f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#include <fst/script/project.h>
53f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#include <fst/script/prune.h>
54f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#include <fst/script/push.h>
55f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#include <fst/script/randequivalent.h>
56f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#include <fst/script/randgen.h>
57f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#include <fst/script/relabel.h>
58f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#include <fst/script/replace.h>
59f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#include <fst/script/reverse.h>
60f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#include <fst/script/reweight.h>
61f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#include <fst/script/rmepsilon.h>
62f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#include <fst/script/shortest-distance.h>
63f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#include <fst/script/shortest-path.h>
64f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#include <fst/script/symbols.h>
65f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#include <fst/script/synchronize.h>
66f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#include <fst/script/topsort.h>
67f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#include <fst/script/union.h>
68f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#include <fst/script/verify.h>
69f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
70f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson//
71f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson// REGISTER OPERATIONS
72f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson//
73f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
74f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
75f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson// This class is necessary because registering each of the operations
76f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson// separately overfills the stack, as there's so many of them.
77f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodsonnamespace fst {
78f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodsonnamespace script {
79f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodsontemplate<class Arc>
80f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodsonclass AllFstOperationsRegisterer {
81f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson public:
82f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  AllFstOperationsRegisterer() {
83f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    RegisterBatch1();
84f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    RegisterBatch2();
85f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  }
86f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
87f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson private:
88f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  void RegisterBatch1() {
89f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    REGISTER_FST_OPERATION(ArcSort, Arc, ArcSortArgs);
90f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    REGISTER_FST_OPERATION(Closure, Arc, ClosureArgs);
91f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    REGISTER_FST_OPERATION(CompileFst, Arc, FstCompileArgs);
92f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    REGISTER_FST_OPERATION(Compose, Arc, ComposeArgs1);
93f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    REGISTER_FST_OPERATION(Compose, Arc, ComposeArgs2);
94f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    REGISTER_FST_OPERATION(Concat, Arc, ConcatArgs1);
95f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    REGISTER_FST_OPERATION(Concat, Arc, ConcatArgs2);
96f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    REGISTER_FST_OPERATION(Connect, Arc, MutableFstClass);
97f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    REGISTER_FST_OPERATION(Convert, Arc, ConvertArgs);
98f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    REGISTER_FST_OPERATION(Decode, Arc, DecodeArgs);
99f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    REGISTER_FST_OPERATION(Determinize, Arc, DeterminizeArgs);
100f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    REGISTER_FST_OPERATION(Difference, Arc, DifferenceArgs1);
101f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    REGISTER_FST_OPERATION(Difference, Arc, DifferenceArgs2);
102f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    REGISTER_FST_OPERATION(DrawFst, Arc, FstDrawerArgs);
103f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    REGISTER_FST_OPERATION(Encode, Arc, EncodeArgs);
104f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    REGISTER_FST_OPERATION(EpsNormalize, Arc, EpsNormalizeArgs);
105f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    REGISTER_FST_OPERATION(Equal, Arc, EqualArgs);
106f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    REGISTER_FST_OPERATION(Equivalent, Arc, EquivalentArgs);
107f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    REGISTER_FST_OPERATION(PrintFstInfo, Arc, InfoArgs);
108f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    REGISTER_FST_OPERATION(Intersect, Arc, IntersectArgs1);
109f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    REGISTER_FST_OPERATION(Intersect, Arc, IntersectArgs2);
110f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    REGISTER_FST_OPERATION(Invert, Arc, MutableFstClass);
111f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    REGISTER_FST_OPERATION(Map, Arc, MapArgs);
112f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    REGISTER_FST_OPERATION(Minimize, Arc, MinimizeArgs);
113f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  }
114f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
115f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  void RegisterBatch2() {
116f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    REGISTER_FST_OPERATION(PrintFst, Arc, FstPrinterArgs);
117f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    REGISTER_FST_OPERATION(Project, Arc, ProjectArgs);
118f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    REGISTER_FST_OPERATION(Prune, Arc, PruneArgs1);
119f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    REGISTER_FST_OPERATION(Prune, Arc, PruneArgs2);
120f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    REGISTER_FST_OPERATION(Prune, Arc, PruneArgs3);
121f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    REGISTER_FST_OPERATION(Prune, Arc, PruneArgs4);
122f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    REGISTER_FST_OPERATION(Push, Arc, PushArgs1);
123f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    REGISTER_FST_OPERATION(Push, Arc, PushArgs2);
124f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    REGISTER_FST_OPERATION(RandEquivalent, Arc, RandEquivalentArgs1);
125f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    REGISTER_FST_OPERATION(RandEquivalent, Arc, RandEquivalentArgs2);
126f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    REGISTER_FST_OPERATION(RandGen, Arc, RandGenArgs);
127f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    REGISTER_FST_OPERATION(Relabel, Arc, RelabelArgs1);
128f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    REGISTER_FST_OPERATION(Relabel, Arc, RelabelArgs2);
129f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    REGISTER_FST_OPERATION(Relabel, Arc, RelabelArgs3);
130f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    REGISTER_FST_OPERATION(Replace, Arc, ReplaceArgs);
131f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    REGISTER_FST_OPERATION(Reverse, Arc, ReverseArgs);
132f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    REGISTER_FST_OPERATION(Reweight, Arc, ReweightArgs);
133f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    REGISTER_FST_OPERATION(RmEpsilon, Arc, RmEpsilonArgs1);
134f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    REGISTER_FST_OPERATION(RmEpsilon, Arc, RmEpsilonArgs2);
135f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    REGISTER_FST_OPERATION(RmEpsilon, Arc, RmEpsilonArgs3);
136f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    REGISTER_FST_OPERATION(ShortestDistance, Arc, ShortestDistanceArgs1);
137f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    REGISTER_FST_OPERATION(ShortestDistance, Arc, ShortestDistanceArgs2);
138f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    REGISTER_FST_OPERATION(ShortestDistance, Arc, ShortestDistanceArgs3);
139f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    REGISTER_FST_OPERATION(ShortestPath, Arc, ShortestPathArgs1);
140f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    REGISTER_FST_OPERATION(ShortestPath, Arc, ShortestPathArgs2);
141f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    REGISTER_FST_OPERATION(Synchronize, Arc, SynchronizeArgs);
142f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    REGISTER_FST_OPERATION(TopSort, Arc, TopSortArgs);
143f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    REGISTER_FST_OPERATION(Union, Arc, UnionArgs);
144f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    REGISTER_FST_OPERATION(Verify, Arc, VerifyArgs);
145f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  }
146f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson};
147f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson}  // namespace script
148f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson}  // namespace fst
149f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
150f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
151f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#define REGISTER_FST_OPERATIONS(Arc) \
152f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  AllFstOperationsRegisterer<Arc> register_all_fst_operations ## Arc;
153f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
154f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#endif  // FST_SCRIPT_FSTSCRIPT_H_
155