/* * This file is part of the Owl Positioning System (OwlPS) project. * It is subject to the copyright notice and license terms in the * COPYRIGHT.t2t file found in the top-level directory of this * distribution and at * https://code.lm7.fr/mcy/owlps/src/master/COPYRIGHT.t2t * No part of the OwlPS Project, including this file, may be copied, * modified, propagated, or distributed except according to the terms * contained in the COPYRIGHT.t2t file; the COPYRIGHT.t2t file must be * distributed along with this file, either separately or by replacing * this notice by the COPYRIGHT.t2t file's contents. */ #ifndef _OWLPS_POSITIONING_TEXTFILEREADER_HH_ #define _OWLPS_POSITIONING_TEXTFILEREADER_HH_ #include #include /// Reads text from a file, line by line /** * If the file name is a dash ('-'), the standard input is used. */ class TextFileReader { protected: /// Name of the input file std::string file_name ; /// Stream associated with the file std::ifstream file ; /// Original rdbuf of the stream std::streambuf *file_buf ; /// Number of the last line read unsigned int current_line_nb ; /// Checks if the file is readable and closes it if not bool eof_close(void) ; public: explicit TextFileReader(const std::string &_file_name); virtual ~TextFileReader(void) ; /** @name Operations */ //@{ /// Reads the next non-blank line bool read_nonblank_line(std::string &text) ; /// Reads the next line bool read_line(std::string &text) ; bool eof(void) const ; //@} } ; /* *** Operations *** */ /** * @returns `true` if the end of file is reached. * @returns `false` if there is something more to read. */ inline bool TextFileReader::eof() const { return ! file && file.eof() ; } #endif // _OWLPS_POSITIONING_TEXTFILEREADER_HH_