1 | /* |
2 | Open Asset Import Library (assimp) |
3 | ---------------------------------------------------------------------- |
4 | |
5 | Copyright (c) 2006-2008, assimp team |
6 | All rights reserved. |
7 | |
8 | Redistribution and use of this software in source and binary forms, |
9 | with or without modification, are permitted provided that the |
10 | following conditions are met: |
11 | |
12 | * Redistributions of source code must retain the above |
13 | copyright notice, this list of conditions and the |
14 | following disclaimer. |
15 | |
16 | * Redistributions in binary form must reproduce the above |
17 | copyright notice, this list of conditions and the |
18 | following disclaimer in the documentation and/or other |
19 | materials provided with the distribution. |
20 | |
21 | * Neither the name of the assimp team, nor the names of its |
22 | contributors may be used to endorse or promote products |
23 | derived from this software without specific prior |
24 | written permission of the assimp team. |
25 | |
26 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
27 | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
28 | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
29 | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
30 | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
31 | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
32 | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
33 | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
34 | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
35 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
36 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
37 | |
38 | ---------------------------------------------------------------------- |
39 | */ |
40 | |
41 | #ifndef INCLUDED_EXCEPTIONAL_H |
42 | #define INCLUDED_EXCEPTIONAL_H |
43 | |
44 | #include <stdexcept> |
45 | #include <assimp/DefaultIOStream.h> |
46 | using std::runtime_error; |
47 | |
48 | #ifdef _MSC_VER |
49 | # pragma warning(disable : 4275) |
50 | #endif |
51 | |
52 | // --------------------------------------------------------------------------- |
53 | /** FOR IMPORTER PLUGINS ONLY: Simple exception class to be thrown if an |
54 | * unrecoverable error occurs while importing. Loading APIs return |
55 | * NULL instead of a valid aiScene then. */ |
56 | class DeadlyImportError |
57 | : public runtime_error |
58 | { |
59 | public: |
60 | /** Constructor with arguments */ |
61 | explicit DeadlyImportError( const std::string& errorText) |
62 | : runtime_error(errorText) |
63 | { |
64 | } |
65 | |
66 | private: |
67 | }; |
68 | |
69 | typedef DeadlyImportError DeadlyExportError; |
70 | |
71 | #ifdef _MSC_VER |
72 | # pragma warning(default : 4275) |
73 | #endif |
74 | |
75 | // --------------------------------------------------------------------------- |
76 | template <typename T> |
77 | struct ExceptionSwallower { |
78 | T operator ()() const { |
79 | return T(); |
80 | } |
81 | }; |
82 | |
83 | // --------------------------------------------------------------------------- |
84 | template <typename T> |
85 | struct ExceptionSwallower<T*> { |
86 | T* operator ()() const { |
87 | return NULL; |
88 | } |
89 | }; |
90 | |
91 | // --------------------------------------------------------------------------- |
92 | template <> |
93 | struct ExceptionSwallower<aiReturn> { |
94 | aiReturn operator ()() const { |
95 | try { |
96 | throw; |
97 | } |
98 | catch (std::bad_alloc&) { |
99 | return aiReturn_OUTOFMEMORY; |
100 | } |
101 | catch (...) { |
102 | return aiReturn_FAILURE; |
103 | } |
104 | } |
105 | }; |
106 | |
107 | // --------------------------------------------------------------------------- |
108 | template <> |
109 | struct ExceptionSwallower<void> { |
110 | void operator ()() const { |
111 | return; |
112 | } |
113 | }; |
114 | |
115 | #define ASSIMP_BEGIN_EXCEPTION_REGION()\ |
116 | {\ |
117 | try { |
118 | |
119 | #define ASSIMP_END_EXCEPTION_REGION(type)\ |
120 | } catch(...) {\ |
121 | return ExceptionSwallower<type>()();\ |
122 | }\ |
123 | } |
124 | |
125 | #endif // INCLUDED_EXCEPTIONAL_H |
126 | |