Fix install target.
[libdcp.git] / src / exceptions.h
index 0dbbec4b5cb62ef25f8d771a0b2499fd4998cf39..bc5e83d17e3855326799650ef31037aa3ea34715 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
 
 */
 
+#ifndef LIBDCP_EXCEPTIONS_H
+#define LIBDCP_EXCEPTIONS_H
+
+#include <boost/filesystem.hpp>
+
 /** @file  src/exceptions.h
  *  @brief Exceptions thrown by libdcp.
  */
 
-namespace libdcp
+namespace dcp
 {
 
+/** @class FileError
+ *  @brief An exception related to a file
+ */
 class FileError : public std::exception
 {
 public:
-       FileError (std::string const & message, std::string const & filename)
-               : _message (message)
-               , _filename (filename)
-       {}
-                           
+       FileError (std::string message, boost::filesystem::path filename, int number);
        ~FileError () throw () {}
 
+       /** @return error message */
        char const * what () const throw () {
                return _message.c_str ();
        }
        
-       std::string filename () const {
+       /** @return filename of file that was involved */
+       boost::filesystem::path filename () const {
                return _filename;
        }
 
+       /** @return error number of the error */
+       int number () const {
+               return _number;
+       }
+
 private:
+       /** message part */
        std::string _message;
-       std::string _filename;
+       /** filename of file that was involved */
+       boost::filesystem::path _filename;
+       int _number;
 };
 
+/** @class MXFFileError
+ *  @brief An exception related to an MXF file
+ */
+class MXFFileError : public FileError
+{
+public:
+       MXFFileError (std::string message, boost::filesystem::path filename, int number)
+               : FileError (message, filename, number)
+       {}
+};
+       
+/** @class MiscError
+ *  @brief A miscellaneous exception
+ */
 class MiscError : public std::exception
 {
 public:
-       MiscError (std::string const & message) : _message (message) {}
+       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;
+};
+
+/** @class DCPReadError
+ *  @brief A DCP read exception
+ */
+class DCPReadError : public std::exception
+{
+public:
+       DCPReadError (std::string message) : _message (message) {}
+       ~DCPReadError () throw () {}
+
+       /** @return error message */
        char const * what () const throw () {
                return _message.c_str ();
        }
 
 private:
+       /** error message */
        std::string _message;
 };
 
+/** @class XMLError
+ *  @brief An XML error
+ */
+class XMLError : public std::exception
+{
+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;
+};
+
+/** @class UnresolvedRefError
+ *  @brief An exception caused by a reference (by UUID) to something which is not known
+ */
+class UnresolvedRefError : public std::exception
+{
+public:
+       UnresolvedRefError (std::string id);
+       ~UnresolvedRefError () throw () {}
+
+       /** @return error message */
+       char const * what () const throw () {
+               return _message.c_str ();
+       }
+
+private:
+       std::string _message;
+};
+       
 }
+
+#endif