X-Git-Url: https://main.carlh.net/gitweb/?p=dcpomatic.git;a=blobdiff_plain;f=src%2Flib%2Fexceptions.h;h=31c3f5389fe1685198eceff39ef41f4974c9e504;hp=f4631c09b67310bcf75492daca3b2b58dfd5e835;hb=422be0eece2bf6ee80db1d3c21553cd82efff789;hpb=f0be0f0e060e40d9a0da1b44429ef41901b8a536 diff --git a/src/lib/exceptions.h b/src/lib/exceptions.h index f4631c09b..31c3f5389 100644 --- a/src/lib/exceptions.h +++ b/src/lib/exceptions.h @@ -1,95 +1,71 @@ /* - Copyright (C) 2012 Carl Hetherington + Copyright (C) 2012-2014 Carl Hetherington - This program is free software; you can redistribute it and/or modify + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - This program is distributed in the hope that it will be useful, + DCP-o-matic is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + along with DCP-o-matic. If not, see . */ -#ifndef DCPOMATIC_EXCEPTIONS_H -#define DCPOMATIC_EXCEPTIONS_H - -/** @file src/exceptions.h +/** @file src/lib/exceptions.h * @brief Our exceptions. */ -#include -#include -#include -#include -#include +#ifndef DCPOMATIC_EXCEPTIONS_H +#define DCPOMATIC_EXCEPTIONS_H + extern "C" { #include } - -/** @class StringError - * @brief A parent class for exceptions using messages held in a std::string - */ -class StringError : public std::exception -{ -public: - /** @param w Error message */ - StringError (std::string w) { - _what = w; - } - - virtual ~StringError () throw () {} - - /** @return error message */ - char const * what () const throw () { - return _what.c_str (); - } - -protected: - /** error message */ - std::string _what; -}; +#include +#include +#include /** @class DecodeError * @brief A low-level problem with the decoder (possibly due to the nature * of a source file). */ -class DecodeError : public StringError +class DecodeError : public std::runtime_error { public: DecodeError (std::string s) - : StringError (s) + : std::runtime_error (s) {} }; /** @class EncodeError * @brief A low-level problem with an encoder. */ -class EncodeError : public StringError +class EncodeError : public std::runtime_error { public: EncodeError (std::string s) - : StringError (s) + : std::runtime_error (s) {} }; /** @class FileError. * @brief Parent class for file-related errors. */ -class FileError : public StringError +class FileError : public std::runtime_error { public: /** @param m Error message. * @param f Name of the file that this exception concerns. */ FileError (std::string m, boost::filesystem::path f) - : StringError (m) + : std::runtime_error (m) , _file (f) {} @@ -105,11 +81,11 @@ private: boost::filesystem::path _file; }; -class JoinError : public StringError +class JoinError : public std::runtime_error { public: JoinError (std::string s) - : StringError (s) + : std::runtime_error (s) {} }; @@ -161,14 +137,14 @@ public: /** @class SettingError. * @brief Indicates that something is wrong with a setting. */ -class SettingError : public StringError +class SettingError : public std::runtime_error { public: /** @param s Name of setting that was required. * @param m Message. */ SettingError (std::string s, std::string m) - : StringError (m) + : std::runtime_error (m) , _setting (s) {} @@ -205,56 +181,72 @@ public: {} }; -/** @class NetworkError. +/** @class NetworkError * @brief Indicates some problem with communication on the network. */ -class NetworkError : public StringError +class NetworkError : public std::runtime_error { public: NetworkError (std::string s) - : StringError (s) + : std::runtime_error (s) {} }; -class KDMError : public StringError +/** @class KDMError + * @brief A problem with a KDM. + */ +class KDMError : public std::runtime_error { public: KDMError (std::string s) - : StringError (s) + : std::runtime_error (s) {} }; -class PixelFormatError : public StringError +/** @class PixelFormatError + * @brief A problem with an unsupported pixel format. + */ +class PixelFormatError : public std::runtime_error { public: PixelFormatError (std::string o, AVPixelFormat f); }; -class ExceptionStore +/** @class TextSubtitleError + * @brief An error that occurs while parsing a TextSubtitleError file. + */ +class TextSubtitleError : public FileError { public: - bool thrown () const { - boost::mutex::scoped_lock lm (_mutex); - return _exception; - } - - void rethrow () { - boost::mutex::scoped_lock lm (_mutex); - boost::rethrow_exception (_exception); - } + TextSubtitleError (std::string, std::string, boost::filesystem::path); +}; -protected: - - void store_current () { - boost::mutex::scoped_lock lm (_mutex); - _exception = boost::current_exception (); - } +class DCPError : public std::runtime_error +{ +public: + DCPError (std::string s) + : std::runtime_error (s) + {} +}; -private: - boost::exception_ptr _exception; - mutable boost::mutex _mutex; +class InvalidSignerError : public std::runtime_error +{ +public: + InvalidSignerError (); }; - +class ProgrammingError : public std::runtime_error +{ +public: + ProgrammingError (std::string file, int line); +}; + +class TextEncodingError : public std::runtime_error +{ +public: + TextEncodingError (std::string s) + : std::runtime_error (s) + {} +}; #endif