Home | History | Annotate | Download | only in lib
      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