doxygen: bge scenegraph and videotexture
[blender-staging.git] / source / gameengine / VideoTexture / Exception.h
1 /* $Id$
2 -----------------------------------------------------------------------------
3 This source file is part of VideoTexture library
4
5 Copyright (c) 2006 The Zdeno Ash Miklas
6
7 This program is free software; you can redistribute it and/or modify it under
8 the terms of the GNU Lesser General Public License as published by the Free Software
9 Foundation; either version 2 of the License, or (at your option) any later
10 version.
11
12 This program is distributed in the hope that it will be useful, but WITHOUT
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
14 FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
15
16 You should have received a copy of the GNU Lesser General Public License along with
17 this program; if not, write to the Free Software Foundation, Inc., 59 Temple
18 Place - Suite 330, Boston, MA 02111-1307, USA, or go to
19 http://www.gnu.org/copyleft/lesser.txt.
20 -----------------------------------------------------------------------------
21 */
22
23
24 /** \file Exception.h
25  *  \ingroup bgevideotex
26  */
27  
28 #if !defined EXCEPTION_H
29 #define EXCEPTION_H
30
31 #include <exception>
32 #include <vector>
33 #include <string>
34 #include <algorithm>
35
36 #include "Common.h"
37
38
39 #define CHCKHRSLTV(fnc,val,err) \
40 { \
41         HRESULT macroHRslt = (fnc); \
42         if (macroHRslt != val) \
43         throw Exception (err, macroHRslt, __FILE__, __LINE__); \
44 }
45
46 #define THRWEXCP(err,hRslt) throw Exception (err, hRslt, __FILE__, __LINE__);
47
48
49 #if defined WIN32
50
51 #define CHCKHRSLT(fnc,err) \
52 { \
53         HRESULT macroHRslt = (fnc); \
54         if (FAILED(macroHRslt)) \
55         throw Exception (err, macroHRslt, __FILE__, __LINE__); \
56 }
57
58 #else
59
60 #define CHCKHRSLT(fnc,err) CHCKHRSLTV(fnc,S_OK,err)
61
62 #endif
63
64
65 // forward declarations
66 class ExceptionID;
67 class Exception;
68
69
70 // exception identificators
71 extern ExceptionID ErrGeneral, ErrNotFound;
72
73
74 // result type
75 typedef long RESULT;
76
77
78 // class ExceptionID for exception identification
79 class ExceptionID
80 {
81 public:
82         // constructor a destructor
83         ExceptionID (void) {}
84         ~ExceptionID (void) {}
85
86 private:
87         // not allowed 
88         ExceptionID (const ExceptionID & obj) throw() {}
89         ExceptionID & operator= (const ExceptionID & obj) throw() { return *this; }
90 };
91
92
93 // class ExpDesc for exception description
94 class ExpDesc
95 {
96 public:
97         // constructor a destructor
98         ExpDesc (ExceptionID & exp, const char * desc, RESULT hres = S_OK);
99         ~ExpDesc (void);
100
101         // comparision function
102         // returns 0, if exception identification don't match at all
103         // returns 1, if only exception identification is matching
104         // returns 2, if both exception identification and result are matching
105         int isExp (ExceptionID * exp, RESULT hres = S_OK) throw()
106         {
107                 // check exception identification
108                 if (&m_expID == exp)
109                 {
110                         // check result value
111                         if (m_hRslt == hres) return 2;
112                         // only identification match
113                         if (m_hRslt == S_OK) return 1;
114                 }
115                 // no match
116                 return 0;
117         }
118
119         // get exception description
120         void loadDesc (std::string & desc) throw()
121         {
122                 desc = m_description;
123         }
124
125     void registerDesc(void)
126     {
127         if (std::find(m_expDescs.begin(), m_expDescs.end(), this) == m_expDescs.end())
128             m_expDescs.push_back(this);
129     }
130         // list of exception descriptions
131         static std::vector<ExpDesc*> m_expDescs;
132
133 private:
134         // exception ID
135         ExceptionID & m_expID;
136         // result
137         RESULT m_hRslt;
138         // description
139         const char * m_description;
140
141         // not allowed
142         ExpDesc (const ExpDesc & obj) : m_expID (ErrNotFound) {}
143         ExpDesc & operator= (const ExpDesc & obj) { return *this; }
144 };
145
146
147
148 // class Exception
149 class Exception : public std::exception  
150 {
151 public:
152         // constructor
153         Exception ();
154         // destructor
155         virtual ~Exception () throw();
156         // copy constructor
157         Exception (const Exception & xpt);
158         // assignment operator
159         Exception & operator= (const Exception & xpt);
160         // get exception description
161         virtual const char * what(void);
162
163         // debug version of constructor
164         Exception (ExceptionID & expID, RESULT rslt, const char * fil, int lin);
165         // set source file and line of exception
166         void setFileLine (const char * fil, int lin);
167
168         // get description in string
169         std::string & getDesc (void) throw() { return m_desc; }
170
171         // report exception
172         virtual void report (void);
173
174         // get exception id
175         ExceptionID * getID (void) throw() { return m_expID; }
176
177         /// last exception description
178         static std::string m_lastError;
179
180         /// log file name
181         static const char * m_logFile;
182
183 protected:
184         // exception identification
185         ExceptionID * m_expID;
186         // RESULT code
187         RESULT m_hRslt;
188
189         // exception description
190         std::string m_desc;
191
192         // set exception description
193         virtual void setXptDesc (void);
194
195         // copy exception
196         void copy (const Exception & xpt);
197
198         // file name where exception was thrown
199         std::string m_fileName;
200         // line number in file
201         int m_line;
202
203 };
204
205 extern ExpDesc MaterialNotAvailDesc;
206 extern ExpDesc ImageSizesNotMatchDesc;
207 extern ExpDesc ImageHasExportsDesc;
208 extern ExpDesc InvalidColorChannelDesc;
209 extern ExpDesc SceneInvalidDesc;
210 extern ExpDesc CameraInvalidDesc;
211 extern ExpDesc ObserverInvalidDesc;
212 extern ExpDesc MirrorInvalidDesc;
213 extern ExpDesc MirrorSizeInvalidDesc;
214 extern ExpDesc MirrorNormalInvalidDesc;
215 extern ExpDesc MirrorHorizontalDesc;
216 extern ExpDesc MirrorTooSmallDesc;
217 extern ExpDesc SourceVideoEmptyDesc;
218 extern ExpDesc SourceVideoCreationDesc;
219
220
221 void registerAllExceptions(void);
222 #endif