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
32void 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
39void 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
46class 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
83void 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
93inline 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
110inline 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
122inline 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
134inline 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
146inline 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
158inline 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
170inline 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
182inline 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
194inline 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
206inline 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
218inline 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
230inline 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
242inline 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
254inline 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
266inline 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
278inline 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
290inline void ThrowUnsupportedDNG ()
291 {
292
293 Throw_dng_error (dng_error_unsupported_dng);
294
295 }
296
297/*****************************************************************************/
298
299#endif
300
301/*****************************************************************************/
302