From 9d152e6f0ef6ce9450d38c6b68a2c63f0df9d9e7 Mon Sep 17 00:00:00 2001 From: "Joachim Wuttke (h)" <j.wuttke@fz-juelich.de> Date: Tue, 23 Nov 2021 21:24:46 +0100 Subject: [PATCH] do without class member variable --- .../InputOutput/OutputDataReadWriteNicos.cpp | 51 ++++++++++--------- Device/InputOutput/OutputDataReadWriteNicos.h | 7 --- 2 files changed, 26 insertions(+), 32 deletions(-) diff --git a/Device/InputOutput/OutputDataReadWriteNicos.cpp b/Device/InputOutput/OutputDataReadWriteNicos.cpp index 14ffd179994..a80e9237dfd 100644 --- a/Device/InputOutput/OutputDataReadWriteNicos.cpp +++ b/Device/InputOutput/OutputDataReadWriteNicos.cpp @@ -22,6 +22,25 @@ std::string lineRelatedError(const std::string& errorText, int lineNumber) return "Line " + std::to_string(lineNumber) + ": " + errorText; } + +unsigned int readAssignedPositiveIntValue(const std::string& line, int lineNumber) +{ + const auto parts = BaseUtils::String::split(line, "="); + if (parts.size() != 2) + throw std::runtime_error(lineRelatedError("Missing assigned value.", lineNumber)); + + int value = 0; + if (!BaseUtils::String::to_int(parts[1], &value)) + throw std::runtime_error( + lineRelatedError("Can't parse assigned value '" + parts[1] + "'.", lineNumber)); + + if (value <= 0) + throw std::runtime_error(lineRelatedError("Value of '" + parts[1] + "' is nonpositive.", + lineNumber)); + + return value; +} + } // namespace @@ -29,7 +48,7 @@ OutputData<double>* OutputDataReadWriteNicos::readOutputData(std::istream& input { auto result = std::make_unique<OutputData<double>>(); // as unique ptr to ensure delete on throw std::string line; - m_currentLineNr = 0; + int lineNumber = 0; unsigned int width = 0; unsigned int height = 0; @@ -38,7 +57,7 @@ OutputData<double>* OutputDataReadWriteNicos::readOutputData(std::istream& input bool inFileSection = false; bool fileSectionFound = false; while (std::getline(input_stream, line)) { - m_currentLineNr++; + lineNumber++; line = BaseUtils::String::trimFront(line, " "); if (!inFileSection && BaseUtils::String::startsWith(line, "%File")) { inFileSection = true; @@ -55,9 +74,9 @@ OutputData<double>* OutputDataReadWriteNicos::readOutputData(std::istream& input } if (BaseUtils::String::startsWith(line, "DataSizeX")) - width = readAssignedPositiveIntValue(line); + width = readAssignedPositiveIntValue(line, lineNumber); else if (BaseUtils::String::startsWith(line, "DataSizeY")) - height = readAssignedPositiveIntValue(line); + height = readAssignedPositiveIntValue(line, lineNumber); if (width != 0 && height != 0) break; @@ -79,7 +98,7 @@ OutputData<double>* OutputDataReadWriteNicos::readOutputData(std::istream& input unsigned int dataRow = 0; while (std::getline(input_stream, line)) { - m_currentLineNr++; + lineNumber++; line = BaseUtils::String::trimFront(line, " "); if (!inCountSection && BaseUtils::String::startsWith(line, "%Counts")) { inCountSection = true; @@ -105,7 +124,7 @@ OutputData<double>* OutputDataReadWriteNicos::readOutputData(std::istream& input throw std::runtime_error( lineRelatedError("Number of found values (" + std::to_string(valuesAsString.size()) + ") does not match DataSizeX (" + std::to_string(width) + ").", - m_currentLineNr)); + lineNumber)); for (unsigned col = 0; col < width; ++col) { const size_t global_index = result->toGlobalIndex( @@ -117,7 +136,7 @@ OutputData<double>* OutputDataReadWriteNicos::readOutputData(std::istream& input throw std::runtime_error( lineRelatedError("Value '" + valuesAsString[col] + "' could not be converted to integer.", - m_currentLineNr)); + lineNumber)); (*result)[global_index] = value; } @@ -135,21 +154,3 @@ OutputData<double>* OutputDataReadWriteNicos::readOutputData(std::istream& input return result.release(); } - -unsigned int OutputDataReadWriteNicos::readAssignedPositiveIntValue(const std::string& line) const -{ - const auto parts = BaseUtils::String::split(line, "="); - if (parts.size() != 2) - throw std::runtime_error(lineRelatedError("Missing assigned value.", m_currentLineNr)); - - int value = 0; - if (!BaseUtils::String::to_int(parts[1], &value)) - throw std::runtime_error( - lineRelatedError("Can't parse assigned value '" + parts[1] + "'.", m_currentLineNr)); - - if (value <= 0) - throw std::runtime_error(lineRelatedError("Value of '" + parts[1] + "' is nonpositive.", - m_currentLineNr)); - - return value; -} diff --git a/Device/InputOutput/OutputDataReadWriteNicos.h b/Device/InputOutput/OutputDataReadWriteNicos.h index 94540f0d19e..cdf86f7b876 100644 --- a/Device/InputOutput/OutputDataReadWriteNicos.h +++ b/Device/InputOutput/OutputDataReadWriteNicos.h @@ -22,13 +22,6 @@ class OutputDataReadWriteNicos { public: OutputData<double>* readOutputData(std::istream& input_stream); - -private: - //! Reads the assigned integer value from a line content like "DataSizeX = 100" - //! Throws if not successful or if value is nonpositive - unsigned int readAssignedPositiveIntValue(const std::string& line) const; - - int m_currentLineNr = 0; //!< "1" means "first line" (human readable counting) }; #endif // BORNAGAIN_DEVICE_INPUTOUTPUT_OUTPUTDATAREADWRITENICOS_H -- GitLab