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