1 /*****************************************************************************/ 2 // Copyright 2006-2007 Adobe Systems Incorporated 3 // All Rights Reserved. 4 // 5 // NOTICE: Adobe permits you to use, modify, and distribute this file in 6 // accordance with the terms of the Adobe license agreement accompanying it. 7 /*****************************************************************************/ 8 9 /* $Id: //mondo/dng_sdk_1_4/dng_sdk/source/dng_exceptions.h#1 $ */ 10 /* $DateTime: 2012/05/30 13:28:51 $ */ 11 /* $Change: 832332 $ */ 12 /* $Author: tknoll $ */ 13 14 /** \file 15 * C++ exception support for DNG SDK. 16 */ 17 18 /*****************************************************************************/ 19 20 #ifndef __dng_exceptions__ 21 #define __dng_exceptions__ 22 23 /*****************************************************************************/ 24 25 #include "dng_errors.h" 26 #include "dng_flags.h" 27 28 /*****************************************************************************/ 29 30 /// Display a warning message. Note that this may just eat the message. 31 32 void ReportWarning (const char *message, 33 const char *sub_message = NULL); 34 35 /*****************************************************************************/ 36 37 /// Display an error message. Note that this may just eat the message. 38 39 void ReportError (const char *message, 40 const char *sub_message = NULL); 41 42 /*****************************************************************************/ 43 44 /// \brief All exceptions thrown by the DNG SDK use this exception class. 45 46 class dng_exception 47 { 48 49 private: 50 51 dng_error_code fErrorCode; 52 53 public: 54 55 /// Construct an exception representing the given error code. 56 /// \param code Error code this exception is for. 57 58 dng_exception (dng_error_code code) 59 60 : fErrorCode (code) 61 62 { 63 } 64 65 virtual ~dng_exception () 66 { 67 } 68 69 /// Getter for error code of this exception 70 /// \retval The error code of this exception. 71 72 dng_error_code ErrorCode () const 73 { 74 return fErrorCode; 75 } 76 77 }; 78 79 /******************************************************************************/ 80 81 /// \brief Throw an exception based on an arbitrary error code. 82 83 void Throw_dng_error (dng_error_code err, 84 const char * message = NULL, 85 const char * sub_message = NULL, 86 bool silent = false); 87 88 /******************************************************************************/ 89 90 /// \brief Convenience function to throw dng_exception with error code if 91 /// error_code is not dng_error_none . 92 93 inline void Fail_dng_error (dng_error_code err) 94 { 95 96 if (err != dng_error_none) 97 { 98 99 Throw_dng_error (err); 100 101 } 102 103 } 104 105 /*****************************************************************************/ 106 107 /// \brief Convenience function to throw dng_exception with error code 108 /// dng_error_unknown . 109 110 inline void ThrowProgramError (const char * sub_message = NULL) 111 { 112 113 Throw_dng_error (dng_error_unknown, NULL, sub_message); 114 115 } 116 117 /*****************************************************************************/ 118 119 /// \brief Convenience function to throw dng_exception with error code 120 /// dng_error_not_yet_implemented . 121 122 inline void ThrowNotYetImplemented (const char * sub_message = NULL) 123 { 124 125 Throw_dng_error (dng_error_not_yet_implemented, NULL, sub_message); 126 127 } 128 129 /*****************************************************************************/ 130 131 /// \brief Convenience function to throw dng_exception with error code 132 /// dng_error_silent . 133 134 inline void ThrowSilentError () 135 { 136 137 Throw_dng_error (dng_error_silent); 138 139 } 140 141 /*****************************************************************************/ 142 143 /// \brief Convenience function to throw dng_exception with error code 144 /// dng_error_user_canceled . 145 146 inline void ThrowUserCanceled () 147 { 148 149 Throw_dng_error (dng_error_user_canceled); 150 151 } 152 153 /*****************************************************************************/ 154 155 /// \brief Convenience function to throw dng_exception with error code 156 /// dng_error_host_insufficient . 157 158 inline void ThrowHostInsufficient (const char * sub_message = NULL) 159 { 160 161 Throw_dng_error (dng_error_host_insufficient, NULL, sub_message); 162 163 } 164 165 /*****************************************************************************/ 166 167 /// \brief Convenience function to throw dng_exception with error code 168 /// dng_error_memory . 169 170 inline void ThrowMemoryFull (const char * sub_message = NULL) 171 { 172 173 Throw_dng_error (dng_error_memory, NULL, sub_message); 174 175 } 176 177 /*****************************************************************************/ 178 179 /// \brief Convenience function to throw dng_exception with error code 180 /// dng_error_bad_format . 181 182 inline void ThrowBadFormat (const char * sub_message = NULL) 183 { 184 185 Throw_dng_error (dng_error_bad_format, NULL, sub_message); 186 187 } 188 189 /*****************************************************************************/ 190 191 /// \brief Convenience function to throw dng_exception with error code 192 /// dng_error_matrix_math . 193 194 inline void ThrowMatrixMath (const char * sub_message = NULL) 195 { 196 197 Throw_dng_error (dng_error_matrix_math, NULL, sub_message); 198 199 } 200 201 /*****************************************************************************/ 202 203 /// \brief Convenience function to throw dng_exception with error code 204 /// dng_error_open_file . 205 206 inline void ThrowOpenFile (const char * sub_message = NULL, bool silent = false) 207 { 208 209 Throw_dng_error (dng_error_open_file, NULL, sub_message, silent); 210 211 } 212 213 /*****************************************************************************/ 214 215 /// \brief Convenience function to throw dng_exception with error code 216 /// dng_error_read_file . 217 218 inline void ThrowReadFile (const char *sub_message = NULL) 219 { 220 221 Throw_dng_error (dng_error_read_file, NULL, sub_message); 222 223 } 224 225 /*****************************************************************************/ 226 227 /// \brief Convenience function to throw dng_exception with error code 228 /// dng_error_write_file . 229 230 inline void ThrowWriteFile (const char *sub_message = NULL) 231 { 232 233 Throw_dng_error (dng_error_write_file, NULL, sub_message); 234 235 } 236 237 /*****************************************************************************/ 238 239 /// \brief Convenience function to throw dng_exception with error code 240 /// dng_error_end_of_file . 241 242 inline void ThrowEndOfFile (const char *sub_message = NULL) 243 { 244 245 Throw_dng_error (dng_error_end_of_file, NULL, sub_message); 246 247 } 248 249 /*****************************************************************************/ 250 251 /// \brief Convenience function to throw dng_exception with error code 252 /// dng_error_file_is_damaged . 253 254 inline void ThrowFileIsDamaged () 255 { 256 257 Throw_dng_error (dng_error_file_is_damaged); 258 259 } 260 261 /*****************************************************************************/ 262 263 /// \brief Convenience function to throw dng_exception with error code 264 /// dng_error_image_too_big_dng . 265 266 inline void ThrowImageTooBigDNG () 267 { 268 269 Throw_dng_error (dng_error_image_too_big_dng); 270 271 } 272 273 /*****************************************************************************/ 274 275 /// \brief Convenience function to throw dng_exception with error code 276 /// dng_error_image_too_big_tiff . 277 278 inline void ThrowImageTooBigTIFF () 279 { 280 281 Throw_dng_error (dng_error_image_too_big_tiff); 282 283 } 284 285 /*****************************************************************************/ 286 287 /// \brief Convenience function to throw dng_exception with error code 288 /// dng_error_unsupported_dng . 289 290 inline void ThrowUnsupportedDNG () 291 { 292 293 Throw_dng_error (dng_error_unsupported_dng); 294 295 } 296 297 /*****************************************************************************/ 298 299 #endif 300 301 /*****************************************************************************/ 302