Home | History | Annotate | Download | only in lib
      1 // util.h
      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 utility inline definitions.
     18 
     19 #ifndef FST_LIB_UTIL_H__
     20 #define FST_LIB_UTIL_H__
     21 
     22 #include <iostream>
     23 
     24 namespace fst {
     25 
     26 //
     27 // UTILITIES FOR TYPE I/O
     28 //
     29 
     30 // Read some types from an input stream.
     31 
     32 // Generic case.
     33 template <typename T>
     34 inline istream &ReadType(istream &strm, T *t) {
     35   return strm.read(reinterpret_cast<char *>(t), sizeof(T));
     36 }
     37 
     38 // String case.
     39 inline istream &ReadType(istream &strm, string *s) {
     40   s->clear();
     41   int32 ns = 0;
     42   strm.read(reinterpret_cast<char *>(&ns), sizeof(ns));
     43   for (int i = 0; i < ns; ++i) {
     44     char c;
     45     strm.read(&c, 1);
     46     *s += c;
     47   }
     48   return strm;
     49 }
     50 
     51 // Write some types to an output stream.
     52 
     53 // Generic case.
     54 template <typename T>
     55 inline ostream &WriteType(ostream &strm, const T t) {
     56   return strm.write(reinterpret_cast<const char *>(&t), sizeof(T));
     57 }
     58 
     59 // String case.
     60 inline ostream &WriteType(ostream &strm, const string s) {
     61   int32 ns = s.size();
     62   strm.write(reinterpret_cast<const char *>(&ns), sizeof(ns));
     63   return strm.write(s.data(), ns);
     64 }
     65 
     66 
     67 }  // namespace fst;
     68 
     69 #endif  // FST_LIB_UTIL_H__
     70