Merge branch '1.0' of ssh://main.carlh.net/home/carl/git/libdcp into 1.0
[libdcp.git] / src / exceptions.h
index 43ddab0206232b685fcabcd3f5f0703cad711841..be87c40bc3f8dd6e42688360d9333be6653f4649 100644 (file)
 namespace dcp
 {
 
+class StringError : public std::exception
+{
+public:
+       StringError () {}
+       StringError (std::string message)
+               : _message (message)
+       {}
+                           
+       ~StringError () throw () {}
+
+       /** @return error message */
+       char const * what () const throw () {
+               return _message.c_str ();
+       }
+
+protected:
+       std::string _message;
+};
+
 /** @class FileError
  *  @brief An exception related to a file
  */
-class FileError : public std::exception
+class FileError : public StringError
 {
 public:
        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;
@@ -54,8 +68,6 @@ public:
        }
 
 private:
-       /** message part */
-       std::string _message;
        /** filename of file that was involved */
        boost::filesystem::path _filename;
        int _number;
@@ -75,51 +87,39 @@ public:
 /** @class MiscError
  *  @brief A miscellaneous exception
  */
-class MiscError : public std::exception
+class MiscError : public StringError
 {
 public:
-       MiscError (std::string message) : _message (message) {}
-       ~MiscError () throw () {}
-
-       /** @return error message */
-       char const * what () const throw () {
-               return _message.c_str ();
-       }
-
-private:
-       /** error message */
-       std::string _message;
+       MiscError (std::string message)
+               : StringError (message)
+       {}
 };
 
 /** @class DCPReadError
  *  @brief A DCP read exception
  */
-class DCPReadError : public std::exception
+class DCPReadError : public StringError
 {
 public:
-       DCPReadError (std::string message) : _message (message) {}
-       ~DCPReadError () throw () {}
-
-       /** @return error message */
-       char const * what () const throw () {
-               return _message.c_str ();
-       }
+       DCPReadError (std::string message)
+               : StringError (message)
+       {}
 
 protected:
        DCPReadError () {}
-       
-       /** error message */
-       std::string _message;
 };
 
+/** @class MissingAssetError
+ *  @brief An error of a missing asset.
+ */
 class MissingAssetError : public DCPReadError
 {
 public:
        enum AssetType {
-               MAIN_PICTURE,
-               MAIN_SOUND,
-               MAIN_SUBTITLE,
-               UNKNOWN
+               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);
@@ -133,58 +133,39 @@ private:
 /** @class XMLError
  *  @brief An XML error
  */
-class XMLError : public std::exception
+class XMLError : public StringError
 {
 public:
-       XMLError (std::string message) : _message (message) {}
-       ~XMLError () throw () {}
-
-       /** @return error message */
-       char const * what () const throw () {
-               return _message.c_str ();
-       }
-
-private:
-       /** error message */
-       std::string _message;
+       XMLError (std::string message)
+               : StringError (message)
+       {}
 };
 
 /** @class UnresolvedRefError
  *  @brief An exception caused by a reference (by UUID) to something which is not known
  */
-class UnresolvedRefError : public std::exception
+class UnresolvedRefError : public StringError
 {
 public:
        UnresolvedRefError (std::string id);
-       ~UnresolvedRefError () throw () {}
-
-       /** @return error message */
-       char const * what () const throw () {
-               return _message.c_str ();
-       }
-
-private:
-       std::string _message;
 };
 
 /** @class TimeFormatError
  *  @brief A an error with a string passed to LocalTime.
  */
-class TimeFormatError : public std::exception
+class TimeFormatError : public StringError
 {
 public:
        TimeFormatError (std::string bad_time);
-       ~TimeFormatError () throw () {}
-
-       /** @return error message */
-       char const * what () const throw () {
-               return _message.c_str ();
-       }
-
-private:
-       std::string _message;
 };
 
+class NotEncryptedError : public StringError
+{
+public:
+       NotEncryptedError (std::string const & asset_filename);
+       ~NotEncryptedError () throw () {}
+};
+       
 }
 
 #endif