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