/*===========================================================================*\ * * * OpenVolumeMesh * * Copyright (C) 2011 by Computer Graphics Group, RWTH Aachen * * www.openvolumemesh.org * * * *---------------------------------------------------------------------------* * This file is part of OpenVolumeMesh. * * * * OpenVolumeMesh is free software: you can redistribute it and/or modify * * it under the terms of the GNU Lesser General Public License as * * published by the Free Software Foundation, either version 3 of * * the License, or (at your option) any later version with the * * following exceptions: * * * * If other files instantiate templates or use macros * * or inline functions from this file, or you compile this file and * * link it with other files to produce an executable, this file does * * not by itself cause the resulting executable to be covered by the * * GNU Lesser General Public License. This exception does not however * * invalidate any other reasons why the executable file might be * * covered by the GNU Lesser General Public License. * * * * OpenVolumeMesh is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU Lesser General Public License for more details. * * * * You should have received a copy of the GNU LesserGeneral Public * * License along with OpenVolumeMesh. If not, * * see . * * * \*===========================================================================*/ /*===========================================================================*\ * * * $Revision$ * * $Date$ * * $LastChangedBy$ * * * \*===========================================================================*/ #define FILEMANAGERT_CC #include #include #include #include #include #include #include #include "FileManager.hh" namespace OpenVolumeMesh { namespace IO { //================================================== FileManager::FileManager() { } //================================================== FileManager::~FileManager() { } //================================================== void FileManager::trimString(std::string& _string) const { // Trim Both leading and trailing spaces size_t start = _string.find_first_not_of(" \t\r\n"); size_t end = _string.find_last_not_of(" \t\r\n"); if((std::string::npos == start) || (std::string::npos == end)) { _string = ""; } else { _string = _string.substr(start, end - start + 1); } } //================================================== void FileManager::extractQuotedText(std::string& _string) const { // Trim Both leading and trailing quote marks size_t start = _string.find_first_of("\""); ++start; size_t end = _string.find_last_not_of("\""); if((std::string::npos == start) || (std::string::npos == end)) { _string = ""; } else { _string = _string.substr(start, end - start + 1); } } //================================================== bool FileManager::getCleanLine(std::istream& _ifs, std::string& _string, bool _skipEmptyLines) const { // While we are not at the end of the file while(true) { // Get the current line: std::getline(_ifs, _string); // Remove whitespace at beginning and end trimString(_string); // Check if string is not empty ( otherwise we continue if(_string.size() != 0) { // Check if string is a comment ( starting with # ) if(_string[0] != '#') { return true; } } else { if(!_skipEmptyLines) return true; } if(_ifs.eof()) { if (verbosity_level_ >= 2) { std::cerr << "End of file reached while searching for input!" << std::endl; } return false; } } return false; } //================================================== bool FileManager::isHexahedralMesh(const std::string& _filename) const { std::ifstream iff(_filename.c_str(), std::ios::in); if(!iff.good()) { if (verbosity_level_ >= 1) { std::cerr << "Could not open file " << _filename << " for reading!" << std::endl; } iff.close(); return false; } std::string s; unsigned int n = 0u; // Skip until we find polyhedra section while (iff.good()) { iff >> s; if (s == "Polyhedra") { break; } } if (iff.eof()) { // Polyhedra section not found in file. Defaulting to polyhedral type. iff.close(); return false; } // Read in number of cells iff >> n; if(n == 0) return false; unsigned int v = 0; char tmp[256]; for (unsigned int i = 0; i < n; ++i) { iff >> v; iff.getline(tmp, 256); if (v != 6u) { iff.close(); return false; } } iff.close(); return true; } // cppcheck-suppress unusedFunction ; public interface bool FileManager::isTetrahedralMesh(const std::string& _filename) const { std::ifstream iff(_filename.c_str(), std::ios::in); if(!iff.good()) { if (verbosity_level_ >= 1) { std::cerr << "Could not open file " << _filename << " for reading!" << std::endl; } iff.close(); return false; } std::string s; unsigned int n = 0u; // Skip until we find polyhedra section while (iff.good()) { iff >> s; if (s == "Polyhedra") { break; } } if (iff.eof()) { // Polyhedra section not found in file. Defaulting to polyhedral type. iff.close(); return false; } // Read in number of cells iff >> n; if(n == 0) return false; unsigned int v = 0; char tmp[256]; for (unsigned int i = 0; i < n; ++i) { iff >> v; iff.getline(tmp, 256); if (v != 4u) { iff.close(); return false; } } iff.close(); return true; } //================================================== } // Namespace IO } // Namespace OpenVolumeMesh