Allow fractional frames per second when computing Time from frames.
[libdcp.git] / src / exceptions.h
index 2070dd0fa44d38cb3f2b682790a827d9ad5c3d2f..801bfb019a92d80f309407fe9fd7d754ed536398 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2012 Carl Hetherington <cth@carlh.net>
+    Copyright (C) 2012-2014 Carl Hetherington <cth@carlh.net>
 
     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
  *  @brief Exceptions thrown by libdcp.
  */
 
-namespace libdcp
+namespace dcp
 {
 
-/** @brief An exception related to a file */
-class FileError : public std::exception
+/** @class FileError
+ *  @brief An exception related to a file
+ */
+class FileError : public std::runtime_error
 {
 public:
-       FileError (std::string const & message, boost::filesystem::path filename, int number);
+       FileError (std::string message, boost::filesystem::path filename, int number);
        ~FileError () throw () {}
 
-       /** @return error message */
-       char const * what () const throw () {
-               return _message.c_str ();
-       }
-       
        /** @return filename of file that was involved */
        boost::filesystem::path filename () const {
                return _filename;
@@ -52,73 +49,110 @@ public:
        }
 
 private:
-       /** message part */
-       std::string _message;
        /** filename of file that was involved */
        boost::filesystem::path _filename;
        int _number;
 };
 
-/** @brief An exception related to an MXF file */
+/** @class MXFFileError
+ *  @brief An exception related to an MXF file
+ */
 class MXFFileError : public FileError
 {
 public:
-       MXFFileError (std::string const & message, boost::filesystem::path filename, int number)
+       MXFFileError (std::string message, boost::filesystem::path filename, int number)
                : FileError (message, filename, number)
        {}
 };
-       
-/** @brief A miscellaneous exception */
-class MiscError : public std::exception
+
+/** @class MiscError
+ *  @brief A miscellaneous exception
+ */
+class MiscError : public std::runtime_error
 {
 public:
-       MiscError (std::string const & message) : _message (message) {}
-       ~MiscError () throw () {}
-
-       /** @return error message */
-       char const * what () const throw () {
-               return _message.c_str ();
-       }
+       MiscError (std::string message)
+               : std::runtime_error (message)
+       {}
+};
 
-private:
-       /** error message */
-       std::string _message;
+/** @class DCPReadError
+ *  @brief A DCP read exception
+ */
+class DCPReadError : public std::runtime_error
+{
+public:
+       DCPReadError (std::string message)
+               : std::runtime_error (message)
+       {}
 };
 
-/** @brief A DCP read exception */
-class DCPReadError : public std::exception
+/** @class MissingAssetError
+ *  @brief An error of a missing asset.
+ */
+class MissingAssetError : public DCPReadError
 {
 public:
-       DCPReadError (std::string const & message) : _message (message) {}
-       ~DCPReadError () throw () {}
+       enum AssetType {
+               MAIN_PICTURE,  //< main picture is missing
+               MAIN_SOUND,    //< main sound is missing
+               MAIN_SUBTITLE, //< main subtitle is missing
+               UNKNOWN        //< something is missing but we don't know what
+       };
+
+       MissingAssetError (boost::filesystem::path, AssetType = UNKNOWN);
+       ~MissingAssetError () throw () {}
+};
 
-       /** @return error message */
-       char const * what () const throw () {
-               return _message.c_str ();
-       }
+/** @class XMLError
+ *  @brief An XML error
+ */
+class XMLError : public std::runtime_error
+{
+public:
+       XMLError (std::string message)
+               : std::runtime_error (message)
+       {}
+};
 
-private:
-       /** error message */
-       std::string _message;
+/** @class UnresolvedRefError
+ *  @brief An exception caused by a reference (by UUID) to something which is not known
+ */
+class UnresolvedRefError : public std::runtime_error
+{
+public:
+       UnresolvedRefError (std::string id);
 };
 
-/** @brief An XML error */
-class XMLError : public std::exception
+/** @class TimeFormatError
+ *  @brief A an error with a string passed to LocalTime.
+ */
+class TimeFormatError : public std::runtime_error
 {
 public:
-       XMLError (std::string const & message) : _message (message) {}
-       ~XMLError () throw () {}
+       TimeFormatError (std::string bad_time);
+};
 
-       /** @return error message */
-       char const * what () const throw () {
-               return _message.c_str ();
-       }
+/** @class NotEncryptedError
+ *  @brief An error raised when creating a DecryptedKDM object for assets that are not
+ *  encrypted.
+ */
+class NotEncryptedError : public std::runtime_error
+{
+public:
+       NotEncryptedError (std::string const & what);
+       ~NotEncryptedError () throw () {}
+};
 
-private:
-       /** error message */
-       std::string _message;
+/** @class ProgrammingError
+ *  @brief An exception thrown when a DCP_ASSERT fails; something that should not happen.
+ */
+class ProgrammingError : public std::runtime_error
+{
+public:
+       ProgrammingError (std::string file, int line);
 };
-       
+
 }
 
 #endif