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