1 // fst.cc 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 // 15 // 16 // \file 17 // FST definitions. 18 19 #include "fst/lib/fst.h" 20 21 // Include these so they are registered 22 #include "fst/lib/const-fst.h" 23 #include "fst/lib/vector-fst.h" 24 25 // FST flag definitions 26 27 DEFINE_bool(fst_verify_properties, false, 28 "Verify fst properties queried by TestProperties"); 29 30 DEFINE_string(fst_product_separator, ",", 31 "Character separator between printed weights" 32 " in a product semiring"); 33 34 DEFINE_bool(fst_default_cache_gc, true, "Enable garbage collection of cache"); 35 36 DEFINE_int64(fst_default_cache_gc_limit, 1<<20LL, 37 "Cache byte size that triggers garbage collection"); 38 39 namespace fst { 40 41 // Register VectorFst and ConstFst for common arcs types 42 43 REGISTER_FST(VectorFst, StdArc); 44 REGISTER_FST(VectorFst, LogArc); 45 REGISTER_FST(ConstFst, StdArc); 46 REGISTER_FST(ConstFst, LogArc); 47 48 // Identifies stream data as an FST (and its endianity) 49 static const int32 kFstMagicNumber = 2125659606; 50 51 // Check Fst magic number and read in Fst header. 52 bool FstHeader::Read(istream &strm, const string &source) { 53 int32 magic_number = 0; 54 ReadType(strm, &magic_number); 55 if (magic_number != kFstMagicNumber) { 56 LOG(ERROR) << "FstHeader::Read: Bad FST header: " << source; 57 return false; 58 } 59 60 ReadType(strm, &fsttype_); 61 ReadType(strm, &arctype_); 62 ReadType(strm, &version_); 63 ReadType(strm, &flags_); 64 ReadType(strm, &properties_); 65 ReadType(strm, &start_); 66 ReadType(strm, &numstates_); 67 ReadType(strm, &numarcs_); 68 if (!strm) 69 LOG(ERROR) << "FstHeader::Read: read failed: " << source; 70 return strm; 71 } 72 73 // Write Fst magic number and Fst header. 74 bool FstHeader::Write(ostream &strm, const string &source) const { 75 WriteType(strm, kFstMagicNumber); 76 WriteType(strm, fsttype_); 77 WriteType(strm, arctype_); 78 WriteType(strm, version_); 79 WriteType(strm, flags_); 80 WriteType(strm, properties_); 81 WriteType(strm, start_); 82 WriteType(strm, numstates_); 83 WriteType(strm, numarcs_); 84 if (!strm) 85 LOG(ERROR) << "FstHeader::Write: write failed: " << source; 86 return strm; 87 } 88 89 } 90