1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- /*
- * Copyright 2016 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- #include "flatbuffers/util.h"
- namespace flatbuffers {
- bool FileExistsRaw(const char *name) {
- std::ifstream ifs(name);
- return ifs.good();
- }
- bool LoadFileRaw(const char *name, bool binary, std::string *buf) {
- if (DirExists(name)) return false;
- std::ifstream ifs(name, binary ? std::ifstream::binary : std::ifstream::in);
- if (!ifs.is_open()) return false;
- if (binary) {
- // The fastest way to read a file into a string.
- ifs.seekg(0, std::ios::end);
- auto size = ifs.tellg();
- (*buf).resize(static_cast<size_t>(size));
- ifs.seekg(0, std::ios::beg);
- ifs.read(&(*buf)[0], (*buf).size());
- } else {
- // This is slower, but works correctly on all platforms for text files.
- std::ostringstream oss;
- oss << ifs.rdbuf();
- *buf = oss.str();
- }
- return !ifs.bad();
- }
- static LoadFileFunction g_load_file_function = LoadFileRaw;
- static FileExistsFunction g_file_exists_function = FileExistsRaw;
- bool LoadFile(const char *name, bool binary, std::string *buf) {
- assert(g_load_file_function);
- return g_load_file_function(name, binary, buf);
- }
- bool FileExists(const char *name) {
- assert(g_file_exists_function);
- return g_file_exists_function(name);
- }
- bool DirExists(const char *name) {
- #ifdef _WIN32
- #define flatbuffers_stat _stat
- #define FLATBUFFERS_S_IFDIR _S_IFDIR
- #else
- #define flatbuffers_stat stat
- #define FLATBUFFERS_S_IFDIR S_IFDIR
- #endif
- struct flatbuffers_stat file_info;
- if (flatbuffers_stat(name, &file_info) != 0) return false;
- return (file_info.st_mode & FLATBUFFERS_S_IFDIR) != 0;
- }
- LoadFileFunction SetLoadFileFunction(LoadFileFunction load_file_function) {
- LoadFileFunction previous_function = g_load_file_function;
- g_load_file_function = load_file_function ? load_file_function : LoadFileRaw;
- return previous_function;
- }
- FileExistsFunction SetFileExistsFunction(
- FileExistsFunction file_exists_function) {
- FileExistsFunction previous_function = g_file_exists_function;
- g_file_exists_function = file_exists_function ?
- file_exists_function : FileExistsRaw;
- return previous_function;
- }
- } // namespace flatbuffers
|