14a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project// util.h
24a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project//
34a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project// Licensed under the Apache License, Version 2.0 (the "License");
44a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project// you may not use this file except in compliance with the License.
54a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project// You may obtain a copy of the License at
64a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project//
74a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project//      http://www.apache.org/licenses/LICENSE-2.0
84a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project//
94a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project// Unless required by applicable law or agreed to in writing, software
104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project// distributed under the License is distributed on an "AS IS" BASIS,
114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project// See the License for the specific language governing permissions and
134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project// limitations under the License.
144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project//
154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project//
164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project// \file
174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project// FST utility inline definitions.
184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#ifndef FST_LIB_UTIL_H__
204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define FST_LIB_UTIL_H__
214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include <iostream>
234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectnamespace fst {
254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project//
274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project// UTILITIES FOR TYPE I/O
284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project//
294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project// Read some types from an input stream.
314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project// Generic case.
334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projecttemplate <typename T>
344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectinline istream &ReadType(istream &strm, T *t) {
354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return strm.read(reinterpret_cast<char *>(t), sizeof(T));
364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project// String case.
394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectinline istream &ReadType(istream &strm, string *s) {
404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  s->clear();
414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  int32 ns = 0;
424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  strm.read(reinterpret_cast<char *>(&ns), sizeof(ns));
434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  for (int i = 0; i < ns; ++i) {
444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    char c;
454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    strm.read(&c, 1);
464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    *s += c;
474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return strm;
494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project// Write some types to an output stream.
524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project// Generic case.
544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projecttemplate <typename T>
554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectinline ostream &WriteType(ostream &strm, const T t) {
564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return strm.write(reinterpret_cast<const char *>(&t), sizeof(T));
574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project// String case.
604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectinline ostream &WriteType(ostream &strm, const string s) {
614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  int32 ns = s.size();
624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  strm.write(reinterpret_cast<const char *>(&ns), sizeof(ns));
634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return strm.write(s.data(), ns);
644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}  // namespace fst;
684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#endif  // FST_LIB_UTIL_H__
70