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