diff --git a/Device/InputOutput/OutputDataReadWriteNicos.cpp b/Device/InputOutput/OutputDataReadWriteNicos.cpp index 6371b007503e2fd22ec3e7754fbaf1bf50a51236..68a336aeb73b9d2d245e5a9abb71e9da29f4bc5b 100644 --- a/Device/InputOutput/OutputDataReadWriteNicos.cpp +++ b/Device/InputOutput/OutputDataReadWriteNicos.cpp @@ -21,9 +21,9 @@ OutputData<double>* OutputDataReadWriteNicos::readOutputData(std::istream& input std::string line; m_currentLineNr = 0; - int width = 0; - int height = 0; - + unsigned int width = 0; + unsigned int height = 0; + // -- read dimensions bool inFileSection = false; bool fileSectionFound = false; @@ -45,9 +45,9 @@ OutputData<double>* OutputDataReadWriteNicos::readOutputData(std::istream& input } if (StringUtils::startsWith(line, "DataSizeX")) - width = readAssignedIntValue(line); + width = readAssignedPositiveIntValue(line); else if (StringUtils::startsWith(line, "DataSizeY")) - height = readAssignedIntValue(line); + height = readAssignedPositiveIntValue(line); if (width != 0 && height != 0) break; @@ -66,7 +66,7 @@ OutputData<double>* OutputDataReadWriteNicos::readOutputData(std::istream& input // -- read data bool inCountSection = false; bool countSectionFound = false; - int dataRow = 0; + unsigned int dataRow = 0; while (std::getline(input_stream, line)) { m_currentLineNr++; @@ -98,7 +98,7 @@ OutputData<double>* OutputDataReadWriteNicos::readOutputData(std::istream& input for (unsigned col = 0; col < width; ++col) { const size_t global_index = - result->toGlobalIndex({col, static_cast<unsigned>(height) - 1 + result->toGlobalIndex({col, height - 1 - dataRow}); // y-axis "0" is at bottom => invert y // to show first line at top of image @@ -124,7 +124,7 @@ OutputData<double>* OutputDataReadWriteNicos::readOutputData(std::istream& input return result.release(); } -int OutputDataReadWriteNicos::readAssignedIntValue(const std::string& line) const +unsigned int OutputDataReadWriteNicos::readAssignedPositiveIntValue(const std::string& line) const { const auto parts = StringUtils::split(line, "="); if (parts.size() != 2) @@ -135,6 +135,10 @@ int OutputDataReadWriteNicos::readAssignedIntValue(const std::string& line) cons throw std::runtime_error( lineRelatedError("Can't parse assigned value '" + parts[1] + "'.")); + if (value <= 0) + throw std::runtime_error + (lineRelatedError("Value of '" + parts[1] + "' is nonpositive.")); + return value; } diff --git a/Device/InputOutput/OutputDataReadWriteNicos.h b/Device/InputOutput/OutputDataReadWriteNicos.h index dfa1c8dd6e149f7aa912969a93804b91fcc8c993..75a2bb508cf7c5828868768891405ce24d3a69c0 100644 --- a/Device/InputOutput/OutputDataReadWriteNicos.h +++ b/Device/InputOutput/OutputDataReadWriteNicos.h @@ -26,8 +26,8 @@ public: private: //! Reads the assigned integer value from a line content like "DataSizeX = 100" - //! Throws if not successful - int readAssignedIntValue(const std::string& line) const; + //! Throws if not successful or if value is nonpositive + unsigned int readAssignedPositiveIntValue(const std::string& line) const; //! Returns errorText with prepended line number (suitable for throwing errors) std::string lineRelatedError(const std::string& errorText) const;