diff --git a/src/text_file_reader.cpp b/src/text_file_reader.cpp index b0d5bef53e..e16edab4eb 100644 --- a/src/text_file_reader.cpp +++ b/src/text_file_reader.cpp @@ -41,7 +41,7 @@ using namespace LAMMPS_NS; * \param filetype Description of file type for error messages */ TextFileReader::TextFileReader(const std::string &filename, const std::string &filetype) - : filename(filename), filetype(filetype), ignore_comments(true) + : filetype(filetype), ignore_comments(true) { fp = fopen(filename.c_str(), "r"); @@ -51,6 +51,18 @@ TextFileReader::TextFileReader(const std::string &filename, const std::string &f } } +/** + * \overload + * + * \param fp File descriptor of the already opened file + * \param filetype Description of file type for error messages */ + +TextFileReader::TextFileReader(FILE *fp, const std::string &filetype) + : filetype(filetype), fp(fp), ignore_comments(true) +{ + if (fp == nullptr) throw FileReaderException("Invalid file descriptor"); +} + /** Closes the file */ TextFileReader::~TextFileReader() { diff --git a/src/text_file_reader.h b/src/text_file_reader.h index 1b7ca73fed..bfd6e558ff 100644 --- a/src/text_file_reader.h +++ b/src/text_file_reader.h @@ -25,7 +25,6 @@ namespace LAMMPS_NS { class TextFileReader { - std::string filename; std::string filetype; static constexpr int MAXLINE = 1024; char line[MAXLINE]; @@ -35,6 +34,8 @@ namespace LAMMPS_NS bool ignore_comments; //!< Controls whether comments are ignored TextFileReader(const std::string &filename, const std::string &filetype); + TextFileReader(FILE *fp, const std::string &filetype); + ~TextFileReader(); void skip_line();