Hand-apply d849d411cff28ef5453085791d0b4d7cd73bd070 from master; replace all assert...
[dcpomatic.git] / src / lib / exceptions.h
index 38452ffc02b7c0867596cb55787a77c29eeafc01..950c2f381aae0da529fc0403c75fbfa3412637a6 100644 (file)
 #ifndef DCPOMATIC_EXCEPTIONS_H
 #define DCPOMATIC_EXCEPTIONS_H
 
-#include <stdexcept>
-#include <cstring>
-#include <boost/exception/all.hpp>
-#include <boost/filesystem.hpp>
 #include <boost/thread.hpp>
 extern "C" {
 #include <libavutil/pixfmt.h>
 }
+#include <boost/exception/all.hpp>
+#include <boost/filesystem.hpp>
+#include <stdexcept>
+#include <cstring>
 
 /** @class StringError
  *  @brief A parent class for exceptions using messages held in a std::string
@@ -245,10 +245,30 @@ public:
        SubRipError (std::string, std::string, boost::filesystem::path);
 };
 
+class DCPError : public StringError
+{
+public:
+       DCPError (std::string s)
+               : StringError (s)
+       {}
+};
+
+class InvalidSignerError : public StringError
+{
+public:
+       InvalidSignerError ();
+};
+
+class ProgrammingError : public StringError
+{
+public:
+       ProgrammingError (std::string file, int line);
+};
+
 /** @class ExceptionStore
  *  @brief A parent class for classes which have a need to catch and
  *  re-throw exceptions.
-
+ *
  *  This is intended for classes which run their own thread; they should do
  *  something like
  *
@@ -270,8 +290,9 @@ public:
        void rethrow () {
                boost::mutex::scoped_lock lm (_mutex);
                if (_exception) {
-                       boost::rethrow_exception (_exception);
+                       boost::exception_ptr tmp = _exception;
                        _exception = boost::exception_ptr ();
+                       boost::rethrow_exception (tmp);
                }
        }
 
@@ -287,6 +308,4 @@ private:
        mutable boost::mutex _mutex;
 };
 
-       
-
 #endif