Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/prusa3d/PrusaSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/libslic3r/FileParserError.hpp')
-rw-r--r--src/libslic3r/FileParserError.hpp52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/libslic3r/FileParserError.hpp b/src/libslic3r/FileParserError.hpp
new file mode 100644
index 000000000..3f560fa4f
--- /dev/null
+++ b/src/libslic3r/FileParserError.hpp
@@ -0,0 +1,52 @@
+#ifndef slic3r_FileParserError_hpp_
+#define slic3r_FileParserError_hpp_
+
+#include "libslic3r.h"
+
+#include <string>
+#include <boost/filesystem/path.hpp>
+#include <stdexcept>
+
+namespace Slic3r {
+
+// Generic file parser error, mostly copied from boost::property_tree::file_parser_error
+class file_parser_error: public std::runtime_error
+{
+public:
+ file_parser_error(const std::string &msg, const std::string &file, unsigned long line = 0) :
+ std::runtime_error(format_what(msg, file, line)),
+ m_message(msg), m_filename(file), m_line(line) {}
+ file_parser_error(const std::string &msg, const boost::filesystem::path &file, unsigned long line = 0) :
+ std::runtime_error(format_what(msg, file.string(), line)),
+ m_message(msg), m_filename(file.string()), m_line(line) {}
+ // gcc 3.4.2 complains about lack of throw specifier on compiler
+ // generated dtor
+ ~file_parser_error() throw() {}
+
+ // Get error message (without line and file - use what() to get full message)
+ std::string message() const { return m_message; }
+ // Get error filename
+ std::string filename() const { return m_filename; }
+ // Get error line number
+ unsigned long line() const { return m_line; }
+
+private:
+ std::string m_message;
+ std::string m_filename;
+ unsigned long m_line;
+
+ // Format error message to be returned by std::runtime_error::what()
+ static std::string format_what(const std::string &msg, const std::string &file, unsigned long l)
+ {
+ std::stringstream stream;
+ stream << (file.empty() ? "<unspecified file>" : file.c_str());
+ if (l > 0)
+ stream << '(' << l << ')';
+ stream << ": " << msg;
+ return stream.str();
+ }
+};
+
+}; // Slic3r
+
+#endif // slic3r_FileParserError_hpp_