X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fexceptions.h;h=268e8c36d200771d84e291ccd90e8f215da54c29;hb=e60bb3e51bd1508b149e6b8f6608f09b5196ae26;hp=3423a5754e340e3909b6b59ef617b5785d1a2809;hpb=a76938561c26dd59d29e45150d1954d14171f6e7;p=dcpomatic.git diff --git a/src/lib/exceptions.h b/src/lib/exceptions.h index 3423a5754..268e8c36d 100644 --- a/src/lib/exceptions.h +++ b/src/lib/exceptions.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2012 Carl Hetherington + Copyright (C) 2012-2014 Carl Hetherington This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -17,21 +17,21 @@ */ -#ifndef DCPOMATIC_EXCEPTIONS_H -#define DCPOMATIC_EXCEPTIONS_H - -/** @file src/exceptions.h +/** @file src/lib/exceptions.h * @brief Our exceptions. */ -#include -#include -#include -#include +#ifndef DCPOMATIC_EXCEPTIONS_H +#define DCPOMATIC_EXCEPTIONS_H + #include extern "C" { #include } +#include +#include +#include +#include /** @class StringError * @brief A parent class for exceptions using messages held in a std::string @@ -40,9 +40,9 @@ class StringError : public std::exception { public: /** @param w Error message */ - StringError (std::string w) { - _what = w; - } + StringError (std::string w) + : _what (w) + {} virtual ~StringError () throw () {} @@ -205,7 +205,7 @@ public: {} }; -/** @class NetworkError. +/** @class NetworkError * @brief Indicates some problem with communication on the network. */ class NetworkError : public StringError @@ -216,6 +216,9 @@ public: {} }; +/** @class KDMError + * @brief A problem with a KDM. + */ class KDMError : public StringError { public: @@ -224,15 +227,50 @@ public: {} }; +/** @class PixelFormatError + * @brief A problem with an unsupported pixel format. + */ class PixelFormatError : public StringError { public: PixelFormatError (std::string o, AVPixelFormat f); }; -/** 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 +/** @class SubRipError + * @brief An error that occurs while parsing a SubRip file. + */ +class SubRipError : public FileError +{ +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 * * void my_thread () * try { @@ -252,13 +290,14 @@ 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); } } -protected: - +protected: + void store_current () { boost::mutex::scoped_lock lm (_mutex); _exception = boost::current_exception (); @@ -269,6 +308,4 @@ private: mutable boost::mutex _mutex; }; - - #endif