10b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/
20b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener// Copyright 2006-2007 Adobe Systems Incorporated
30b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener// All Rights Reserved.
40b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener//
50b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener// NOTICE:  Adobe permits you to use, modify, and distribute this file in
60b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener// accordance with the terms of the Adobe license agreement accompanying it.
70b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/
80b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener
90b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/* $Id: //mondo/dng_sdk_1_4/dng_sdk/source/dng_assertions.h#3 $ */
100b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/* $DateTime: 2012/09/05 12:31:51 $ */
110b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/* $Change: 847652 $ */
120b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/* $Author: tknoll $ */
130b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener
140b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/** \file
150b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener * Conditionally compiled assertion check support.
160b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener */
170b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener
180b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/
190b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener
200b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#ifndef __dng_assertions__
210b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define __dng_assertions__
220b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener
230b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/
240b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener
250b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#include "dng_exceptions.h"
260b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#include "dng_flags.h"
270b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener
280b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/
290b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener
300b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#if qDNGDebug
310b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener
320b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/// Platform-specific function to display an assert.
330b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener
340b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienervoid dng_show_message (const char *s);
350b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener
360b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/// Show a formatted error message.
370b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener
380b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienervoid dng_show_message_f (const char *fmt, ...);
390b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener
400b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#endif
410b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener
420b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/
430b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener
440b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#ifndef DNG_ASSERT
450b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener
460b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#if qDNGDebug
470b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener
480b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/// Conditionally compiled macro to check an assertion and display a message if
490b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/// it fails and assertions are compiled in via qDNGDebug
500b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/// \param x Predicate which must be true.
510b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/// \param y String to display if x is not true.
520b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener
530b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define DNG_ASSERT(x,y) { if (!(x)) dng_show_message (y); }
540b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener
550b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#else
560b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener
570b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/// Conditionally compiled macro to check an assertion and display a message if
580b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/// it fails and assertions are compiled in via qDNGDebug
590b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/// \param x Predicate which must be true.
600b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/// \param y String to display if x is not true.
610b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener
620b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define DNG_ASSERT(x,y)
630b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener
640b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#endif
650b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#endif
660b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener
670b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/
680b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener
690b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#ifndef DNG_REQUIRE
700b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener
710b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#if qDNGDebug
720b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener
730b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/// Conditionally compiled macro to check an assertion, display a message, and throw
740b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/// an exception if it fails and assertions are compiled in via qDNGDebug
750b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/// \param condition Predicate which must be true.
760b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/// \param msg String to display if condition is not true.
770b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener
780b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define DNG_REQUIRE(condition,msg)				\
790b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener	do											\
800b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener		{										\
810b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener												\
820b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener		if (!(condition))						\
830b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener			{									\
840b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener												\
850b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener			DNG_ASSERT(condition, msg);			\
860b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener												\
870b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener			ThrowProgramError (msg);			\
880b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener												\
890b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener			}									\
900b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener												\
910b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener		}										\
920b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener	while (0)
930b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener
940b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#else
950b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener
960b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/// Conditionally compiled macro to check an assertion, display a message, and throw
970b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/// an exception if it fails and assertions are compiled in via qDNGDebug
980b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/// \param condition Predicate which must be true.
990b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/// \param msg String to display if condition is not true.
1000b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener
1010b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define DNG_REQUIRE(condition,msg)				\
1020b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener	do											\
1030b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener		{										\
1040b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener												\
1050b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener		if (!(condition))						\
1060b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener			{									\
1070b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener												\
1080b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener			ThrowProgramError (msg);			\
1090b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener												\
1100b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener			}									\
1110b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener												\
1120b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener		}										\
1130b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener	while (0)
1140b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener
1150b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#endif
1160b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#endif
1170b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener
1180b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/
1190b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener
1200b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#ifndef DNG_REPORT
1210b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener
1220b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/// Macro to display an informational message
1230b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/// \param x String to display.
1240b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener
1250b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define DNG_REPORT(x) DNG_ASSERT (false, x)
1260b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener
1270b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#endif
1280b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener
1290b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/
1300b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener
1310b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#endif
1320b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener
1330b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/
134