/*****************************************************************************/
// Copyright 2006-2007 Adobe Systems Incorporated
// All Rights Reserved.
//
// NOTICE:  Adobe permits you to use, modify, and distribute this file in
// accordance with the terms of the Adobe license agreement accompanying it.
/*****************************************************************************/

/* $Id: //mondo/dng_sdk_1_4/dng_sdk/source/dng_exceptions.h#1 $ */ 
/* $DateTime: 2012/05/30 13:28:51 $ */
/* $Change: 832332 $ */
/* $Author: tknoll $ */

/** \file
 * C++ exception support for DNG SDK.
*/

/*****************************************************************************/

#ifndef __dng_exceptions__
#define __dng_exceptions__

/*****************************************************************************/

#include "dng_errors.h"
#include "dng_flags.h"

/*****************************************************************************/

/// Display a warning message. Note that this may just eat the message.

void ReportWarning (const char *message,
				    const char *sub_message = NULL);
	
/*****************************************************************************/

/// Display an error message. Note that this may just eat the message.

void ReportError (const char *message,
				  const char *sub_message = NULL);
	
/*****************************************************************************/

/// \brief All exceptions thrown by the DNG SDK use this exception class.

class dng_exception
	{
	
	private:
	
		dng_error_code fErrorCode;
	
	public:
	
		/// Construct an exception representing the given error code.
		/// \param code Error code this exception is for.
		
		dng_exception (dng_error_code code)
		
			: fErrorCode (code)
			
			{
			}
		
		virtual ~dng_exception ()
			{ 
			}

		/// Getter for error code of this exception
		/// \retval The error code of this exception.
		
		dng_error_code ErrorCode () const
			{
			return fErrorCode;
			}

	};
	
/******************************************************************************/

/// \brief Throw an exception based on an arbitrary error code.

void Throw_dng_error (dng_error_code err,
					  const char * message = NULL,
					  const char * sub_message = NULL,
					  bool silent = false);

/******************************************************************************/

/// \brief Convenience function to throw dng_exception with error code if
/// error_code is not dng_error_none .

inline void Fail_dng_error (dng_error_code err)
	{
	
	if (err != dng_error_none)
		{
		
		Throw_dng_error (err);
		
		}
		
	}

/*****************************************************************************/

/// \brief Convenience function to throw dng_exception with error code
/// dng_error_unknown .

inline void ThrowProgramError (const char * sub_message = NULL)
	{
	
	Throw_dng_error (dng_error_unknown, NULL, sub_message);
	
	}

/*****************************************************************************/

/// \brief Convenience function to throw dng_exception with error code 
/// dng_error_not_yet_implemented .

inline void ThrowNotYetImplemented (const char * sub_message = NULL)
	{
	
	Throw_dng_error (dng_error_not_yet_implemented, NULL, sub_message);
	
	}

/*****************************************************************************/

/// \brief Convenience function to throw dng_exception with error code
/// dng_error_silent .

inline void ThrowSilentError ()
	{
	
	Throw_dng_error (dng_error_silent);
	
	}

/*****************************************************************************/

/// \brief Convenience function to throw dng_exception with error code
/// dng_error_user_canceled .

inline void ThrowUserCanceled ()
	{
	
	Throw_dng_error (dng_error_user_canceled);
	
	}

/*****************************************************************************/

/// \brief Convenience function to throw dng_exception with error code
/// dng_error_host_insufficient .

inline void ThrowHostInsufficient (const char * sub_message = NULL)
	{
	
	Throw_dng_error (dng_error_host_insufficient, NULL, sub_message);
	
	}

/*****************************************************************************/

/// \brief Convenience function to throw dng_exception with error code
/// dng_error_memory .

inline void ThrowMemoryFull (const char * sub_message = NULL)
	{
	
	Throw_dng_error (dng_error_memory, NULL, sub_message);
	
	}

/*****************************************************************************/

/// \brief Convenience function to throw dng_exception with error code
/// dng_error_bad_format .

inline void ThrowBadFormat (const char * sub_message = NULL)
	{
	
	Throw_dng_error (dng_error_bad_format, NULL, sub_message);
	
	}

/*****************************************************************************/

/// \brief Convenience function to throw dng_exception with error code
/// dng_error_matrix_math .

inline void ThrowMatrixMath (const char * sub_message = NULL)
	{
	
	Throw_dng_error (dng_error_matrix_math, NULL, sub_message);
	
	}

/*****************************************************************************/

/// \brief Convenience function to throw dng_exception with error code
/// dng_error_open_file .

inline void ThrowOpenFile (const char * sub_message = NULL, bool silent = false)
	{
	
	Throw_dng_error (dng_error_open_file, NULL, sub_message, silent);
	
	}

/*****************************************************************************/

/// \brief Convenience function to throw dng_exception with error code
/// dng_error_read_file .

inline void ThrowReadFile (const char *sub_message = NULL)
	{
	
	Throw_dng_error (dng_error_read_file, NULL, sub_message);
	
	}

/*****************************************************************************/

/// \brief Convenience function to throw dng_exception with error code
/// dng_error_write_file .

inline void ThrowWriteFile (const char *sub_message = NULL)
	{
	
	Throw_dng_error (dng_error_write_file, NULL, sub_message);
	
	}

/*****************************************************************************/

/// \brief Convenience function to throw dng_exception with error code
/// dng_error_end_of_file .

inline void ThrowEndOfFile (const char *sub_message = NULL)
	{
	
	Throw_dng_error (dng_error_end_of_file, NULL, sub_message);
	
	}

/*****************************************************************************/

/// \brief Convenience function to throw dng_exception with error code
/// dng_error_file_is_damaged .

inline void ThrowFileIsDamaged ()
	{
	
	Throw_dng_error (dng_error_file_is_damaged);
	
	}

/*****************************************************************************/

/// \brief Convenience function to throw dng_exception with error code
/// dng_error_image_too_big_dng .

inline void ThrowImageTooBigDNG ()
	{
	
	Throw_dng_error (dng_error_image_too_big_dng);
	
	}

/*****************************************************************************/

/// \brief Convenience function to throw dng_exception with error code
/// dng_error_image_too_big_tiff .

inline void ThrowImageTooBigTIFF ()
	{
	
	Throw_dng_error (dng_error_image_too_big_tiff);
	
	}

/*****************************************************************************/

/// \brief Convenience function to throw dng_exception with error code
/// dng_error_unsupported_dng .

inline void ThrowUnsupportedDNG ()
	{
	
	Throw_dng_error (dng_error_unsupported_dng);
	
	}

/*****************************************************************************/

#endif
	
/*****************************************************************************/
