rev |
line source |
nuclear@0
|
1 /*
|
nuclear@0
|
2 Open Asset Import Library (assimp)
|
nuclear@0
|
3 ----------------------------------------------------------------------
|
nuclear@0
|
4
|
nuclear@0
|
5 Copyright (c) 2006-2018, assimp team
|
nuclear@0
|
6
|
nuclear@0
|
7
|
nuclear@0
|
8 All rights reserved.
|
nuclear@0
|
9
|
nuclear@0
|
10 Redistribution and use of this software in source and binary forms,
|
nuclear@0
|
11 with or without modification, are permitted provided that the
|
nuclear@0
|
12 following conditions are met:
|
nuclear@0
|
13
|
nuclear@0
|
14 * Redistributions of source code must retain the above
|
nuclear@0
|
15 copyright notice, this list of conditions and the
|
nuclear@0
|
16 following disclaimer.
|
nuclear@0
|
17
|
nuclear@0
|
18 * Redistributions in binary form must reproduce the above
|
nuclear@0
|
19 copyright notice, this list of conditions and the
|
nuclear@0
|
20 following disclaimer in the documentation and/or other
|
nuclear@0
|
21 materials provided with the distribution.
|
nuclear@0
|
22
|
nuclear@0
|
23 * Neither the name of the assimp team, nor the names of its
|
nuclear@0
|
24 contributors may be used to endorse or promote products
|
nuclear@0
|
25 derived from this software without specific prior
|
nuclear@0
|
26 written permission of the assimp team.
|
nuclear@0
|
27
|
nuclear@0
|
28 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
nuclear@0
|
29 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
nuclear@0
|
30 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
nuclear@0
|
31 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
nuclear@0
|
32 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
nuclear@0
|
33 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
nuclear@0
|
34 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
nuclear@0
|
35 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
nuclear@0
|
36 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
nuclear@0
|
37 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
nuclear@0
|
38 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
nuclear@0
|
39
|
nuclear@0
|
40 ----------------------------------------------------------------------
|
nuclear@0
|
41 */
|
nuclear@0
|
42
|
nuclear@0
|
43 /** @file Logger.hpp
|
nuclear@0
|
44 * @brief Abstract base class 'Logger', base of the logging system.
|
nuclear@0
|
45 */
|
nuclear@0
|
46 #ifndef INCLUDED_AI_LOGGER_H
|
nuclear@0
|
47 #define INCLUDED_AI_LOGGER_H
|
nuclear@0
|
48
|
nuclear@0
|
49 #include <miniassimp/types.h>
|
nuclear@0
|
50 #include <miniassimp/TinyFormatter.h>
|
nuclear@0
|
51
|
nuclear@0
|
52 namespace Assimp {
|
nuclear@0
|
53
|
nuclear@0
|
54 class LogStream;
|
nuclear@0
|
55
|
nuclear@0
|
56 // Maximum length of a log message. Longer messages are rejected.
|
nuclear@0
|
57 #define MAX_LOG_MESSAGE_LENGTH 1024u
|
nuclear@0
|
58
|
nuclear@0
|
59 // ----------------------------------------------------------------------------------
|
nuclear@0
|
60 /** @brief CPP-API: Abstract interface for logger implementations.
|
nuclear@0
|
61 * Assimp provides a default implementation and uses it for almost all
|
nuclear@0
|
62 * logging stuff ('DefaultLogger'). This class defines just basic logging
|
nuclear@0
|
63 * behavior and is not of interest for you. Instead, take a look at #DefaultLogger. */
|
nuclear@0
|
64 class ASSIMP_API Logger
|
nuclear@0
|
65 #ifndef SWIG
|
nuclear@0
|
66 : public Intern::AllocateFromAssimpHeap
|
nuclear@0
|
67 #endif
|
nuclear@0
|
68 {
|
nuclear@0
|
69 public:
|
nuclear@0
|
70
|
nuclear@0
|
71 // ----------------------------------------------------------------------
|
nuclear@0
|
72 /** @enum LogSeverity
|
nuclear@0
|
73 * @brief Log severity to describe the granularity of logging.
|
nuclear@0
|
74 */
|
nuclear@0
|
75 enum LogSeverity {
|
nuclear@0
|
76 NORMAL, //!< Normal granularity of logging
|
nuclear@0
|
77 VERBOSE //!< Debug infos will be logged, too
|
nuclear@0
|
78 };
|
nuclear@0
|
79
|
nuclear@0
|
80 // ----------------------------------------------------------------------
|
nuclear@0
|
81 /** @enum ErrorSeverity
|
nuclear@0
|
82 * @brief Description for severity of a log message.
|
nuclear@0
|
83 *
|
nuclear@0
|
84 * Every LogStream has a bitwise combination of these flags.
|
nuclear@0
|
85 * A LogStream doesn't receive any messages of a specific type
|
nuclear@0
|
86 * if it doesn't specify the corresponding ErrorSeverity flag.
|
nuclear@0
|
87 */
|
nuclear@0
|
88 enum ErrorSeverity {
|
nuclear@0
|
89 Debugging = 1, //!< Debug log message
|
nuclear@0
|
90 Info = 2, //!< Info log message
|
nuclear@0
|
91 Warn = 4, //!< Warn log message
|
nuclear@0
|
92 Err = 8 //!< Error log message
|
nuclear@0
|
93 };
|
nuclear@0
|
94
|
nuclear@0
|
95 public:
|
nuclear@0
|
96
|
nuclear@0
|
97 /** @brief Virtual destructor */
|
nuclear@0
|
98 virtual ~Logger();
|
nuclear@0
|
99
|
nuclear@0
|
100 // ----------------------------------------------------------------------
|
nuclear@0
|
101 /** @brief Writes a debug message
|
nuclear@0
|
102 * @param message Debug message*/
|
nuclear@0
|
103 void debug(const char* message);
|
nuclear@0
|
104 void debug(const std::string &message);
|
nuclear@0
|
105
|
nuclear@0
|
106 // ----------------------------------------------------------------------
|
nuclear@0
|
107 /** @brief Writes a info message
|
nuclear@0
|
108 * @param message Info message*/
|
nuclear@0
|
109 void info(const char* message);
|
nuclear@0
|
110 void info(const std::string &message);
|
nuclear@0
|
111
|
nuclear@0
|
112 // ----------------------------------------------------------------------
|
nuclear@0
|
113 /** @brief Writes a warning message
|
nuclear@0
|
114 * @param message Warn message*/
|
nuclear@0
|
115 void warn(const char* message);
|
nuclear@0
|
116 void warn(const std::string &message);
|
nuclear@0
|
117
|
nuclear@0
|
118 // ----------------------------------------------------------------------
|
nuclear@0
|
119 /** @brief Writes an error message
|
nuclear@0
|
120 * @param message Error message*/
|
nuclear@0
|
121 void error(const char* message);
|
nuclear@0
|
122 void error(const std::string &message);
|
nuclear@0
|
123
|
nuclear@0
|
124 // ----------------------------------------------------------------------
|
nuclear@0
|
125 /** @brief Set a new log severity.
|
nuclear@0
|
126 * @param log_severity New severity for logging*/
|
nuclear@0
|
127 void setLogSeverity(LogSeverity log_severity);
|
nuclear@0
|
128
|
nuclear@0
|
129 // ----------------------------------------------------------------------
|
nuclear@0
|
130 /** @brief Get the current log severity*/
|
nuclear@0
|
131 LogSeverity getLogSeverity() const;
|
nuclear@0
|
132
|
nuclear@0
|
133 // ----------------------------------------------------------------------
|
nuclear@0
|
134 /** @brief Attach a new log-stream
|
nuclear@0
|
135 *
|
nuclear@0
|
136 * The logger takes ownership of the stream and is responsible
|
nuclear@0
|
137 * for its destruction (which is done using ::delete when the logger
|
nuclear@0
|
138 * itself is destroyed). Call detachStream to detach a stream and to
|
nuclear@0
|
139 * gain ownership of it again.
|
nuclear@0
|
140 * @param pStream Log-stream to attach
|
nuclear@0
|
141 * @param severity Message filter, specified which types of log
|
nuclear@0
|
142 * messages are dispatched to the stream. Provide a bitwise
|
nuclear@0
|
143 * combination of the ErrorSeverity flags.
|
nuclear@0
|
144 * @return true if the stream has been attached, false otherwise.*/
|
nuclear@0
|
145 virtual bool attachStream(LogStream *pStream,
|
nuclear@0
|
146 unsigned int severity = Debugging | Err | Warn | Info) = 0;
|
nuclear@0
|
147
|
nuclear@0
|
148 // ----------------------------------------------------------------------
|
nuclear@0
|
149 /** @brief Detach a still attached stream from the logger (or
|
nuclear@0
|
150 * modify the filter flags bits)
|
nuclear@0
|
151 * @param pStream Log-stream instance for detaching
|
nuclear@0
|
152 * @param severity Provide a bitwise combination of the ErrorSeverity
|
nuclear@0
|
153 * flags. This value is &~ed with the current flags of the stream,
|
nuclear@0
|
154 * if the result is 0 the stream is detached from the Logger and
|
nuclear@0
|
155 * the caller retakes the possession of the stream.
|
nuclear@0
|
156 * @return true if the stream has been detached, false otherwise.*/
|
nuclear@0
|
157 virtual bool detatchStream(LogStream *pStream,
|
nuclear@0
|
158 unsigned int severity = Debugging | Err | Warn | Info) = 0;
|
nuclear@0
|
159
|
nuclear@0
|
160 protected:
|
nuclear@0
|
161 /**
|
nuclear@0
|
162 * Default constructor
|
nuclear@0
|
163 */
|
nuclear@0
|
164 Logger() AI_NO_EXCEPT;
|
nuclear@0
|
165
|
nuclear@0
|
166 /**
|
nuclear@0
|
167 * Construction with a given log severity
|
nuclear@0
|
168 */
|
nuclear@0
|
169 explicit Logger(LogSeverity severity);
|
nuclear@0
|
170
|
nuclear@0
|
171 // ----------------------------------------------------------------------
|
nuclear@0
|
172 /**
|
nuclear@0
|
173 * @brief Called as a request to write a specific debug message
|
nuclear@0
|
174 * @param message Debug message. Never longer than
|
nuclear@0
|
175 * MAX_LOG_MESSAGE_LENGTH characters (excluding the '0').
|
nuclear@0
|
176 * @note The message string is only valid until the scope of
|
nuclear@0
|
177 * the function is left.
|
nuclear@0
|
178 */
|
nuclear@0
|
179 virtual void OnDebug(const char* message)= 0;
|
nuclear@0
|
180
|
nuclear@0
|
181 // ----------------------------------------------------------------------
|
nuclear@0
|
182 /**
|
nuclear@0
|
183 * @brief Called as a request to write a specific info message
|
nuclear@0
|
184 * @param message Info message. Never longer than
|
nuclear@0
|
185 * MAX_LOG_MESSAGE_LENGTH characters (ecxluding the '0').
|
nuclear@0
|
186 * @note The message string is only valid until the scope of
|
nuclear@0
|
187 * the function is left.
|
nuclear@0
|
188 */
|
nuclear@0
|
189 virtual void OnInfo(const char* message) = 0;
|
nuclear@0
|
190
|
nuclear@0
|
191 // ----------------------------------------------------------------------
|
nuclear@0
|
192 /**
|
nuclear@0
|
193 * @brief Called as a request to write a specific warn message
|
nuclear@0
|
194 * @param message Warn message. Never longer than
|
nuclear@0
|
195 * MAX_LOG_MESSAGE_LENGTH characters (exluding the '0').
|
nuclear@0
|
196 * @note The message string is only valid until the scope of
|
nuclear@0
|
197 * the function is left.
|
nuclear@0
|
198 */
|
nuclear@0
|
199 virtual void OnWarn(const char* essage) = 0;
|
nuclear@0
|
200
|
nuclear@0
|
201 // ----------------------------------------------------------------------
|
nuclear@0
|
202 /**
|
nuclear@0
|
203 * @brief Called as a request to write a specific error message
|
nuclear@0
|
204 * @param message Error message. Never longer than
|
nuclear@0
|
205 * MAX_LOG_MESSAGE_LENGTH characters (exluding the '0').
|
nuclear@0
|
206 * @note The message string is only valid until the scope of
|
nuclear@0
|
207 * the function is left.
|
nuclear@0
|
208 */
|
nuclear@0
|
209 virtual void OnError(const char* message) = 0;
|
nuclear@0
|
210
|
nuclear@0
|
211 protected:
|
nuclear@0
|
212 LogSeverity m_Severity;
|
nuclear@0
|
213 };
|
nuclear@0
|
214
|
nuclear@0
|
215 // ----------------------------------------------------------------------------------
|
nuclear@0
|
216 // Default constructor
|
nuclear@0
|
217 inline
|
nuclear@0
|
218 Logger::Logger() AI_NO_EXCEPT
|
nuclear@0
|
219 : m_Severity(NORMAL) {
|
nuclear@0
|
220 // empty
|
nuclear@0
|
221 }
|
nuclear@0
|
222
|
nuclear@0
|
223 // ----------------------------------------------------------------------------------
|
nuclear@0
|
224 // Virtual destructor
|
nuclear@0
|
225 inline
|
nuclear@0
|
226 Logger::~Logger() {
|
nuclear@0
|
227 // empty
|
nuclear@0
|
228 }
|
nuclear@0
|
229
|
nuclear@0
|
230 // ----------------------------------------------------------------------------------
|
nuclear@0
|
231 // Construction with given logging severity
|
nuclear@0
|
232 inline
|
nuclear@0
|
233 Logger::Logger(LogSeverity severity)
|
nuclear@0
|
234 : m_Severity(severity) {
|
nuclear@0
|
235 // empty
|
nuclear@0
|
236 }
|
nuclear@0
|
237
|
nuclear@0
|
238 // ----------------------------------------------------------------------------------
|
nuclear@0
|
239 // Log severity setter
|
nuclear@0
|
240 inline
|
nuclear@0
|
241 void Logger::setLogSeverity(LogSeverity log_severity){
|
nuclear@0
|
242 m_Severity = log_severity;
|
nuclear@0
|
243 }
|
nuclear@0
|
244
|
nuclear@0
|
245 // ----------------------------------------------------------------------------------
|
nuclear@0
|
246 // Log severity getter
|
nuclear@0
|
247 inline
|
nuclear@0
|
248 Logger::LogSeverity Logger::getLogSeverity() const {
|
nuclear@0
|
249 return m_Severity;
|
nuclear@0
|
250 }
|
nuclear@0
|
251
|
nuclear@0
|
252 // ----------------------------------------------------------------------------------
|
nuclear@0
|
253 inline
|
nuclear@0
|
254 void Logger::debug(const std::string &message) {
|
nuclear@0
|
255 return debug(message.c_str());
|
nuclear@0
|
256 }
|
nuclear@0
|
257
|
nuclear@0
|
258 // ----------------------------------------------------------------------------------
|
nuclear@0
|
259 inline
|
nuclear@0
|
260 void Logger::error(const std::string &message) {
|
nuclear@0
|
261 return error(message.c_str());
|
nuclear@0
|
262 }
|
nuclear@0
|
263
|
nuclear@0
|
264 // ----------------------------------------------------------------------------------
|
nuclear@0
|
265 inline
|
nuclear@0
|
266 void Logger::warn(const std::string &message) {
|
nuclear@0
|
267 return warn(message.c_str());
|
nuclear@0
|
268 }
|
nuclear@0
|
269
|
nuclear@0
|
270 // ----------------------------------------------------------------------------------
|
nuclear@0
|
271 inline
|
nuclear@0
|
272 void Logger::info(const std::string &message) {
|
nuclear@0
|
273 return info(message.c_str());
|
nuclear@0
|
274 }
|
nuclear@0
|
275
|
nuclear@0
|
276 // ------------------------------------------------------------------------------------------------
|
nuclear@0
|
277 #define ASSIMP_LOG_WARN_F(string,...)\
|
nuclear@0
|
278 DefaultLogger::get()->warn((Formatter::format(string),__VA_ARGS__))
|
nuclear@0
|
279
|
nuclear@0
|
280 #define ASSIMP_LOG_ERROR_F(string,...)\
|
nuclear@0
|
281 DefaultLogger::get()->error((Formatter::format(string),__VA_ARGS__))
|
nuclear@0
|
282
|
nuclear@0
|
283 #define ASSIMP_LOG_DEBUG_F(string,...)\
|
nuclear@0
|
284 DefaultLogger::get()->debug((Formatter::format(string),__VA_ARGS__))
|
nuclear@0
|
285
|
nuclear@0
|
286 #define ASSIMP_LOG_INFO_F(string,...)\
|
nuclear@0
|
287 DefaultLogger::get()->info((Formatter::format(string),__VA_ARGS__))
|
nuclear@0
|
288
|
nuclear@0
|
289
|
nuclear@0
|
290 #define ASSIMP_LOG_WARN(string)\
|
nuclear@0
|
291 DefaultLogger::get()->warn(string)
|
nuclear@0
|
292
|
nuclear@0
|
293 #define ASSIMP_LOG_ERROR(string)\
|
nuclear@0
|
294 DefaultLogger::get()->error(string)
|
nuclear@0
|
295
|
nuclear@0
|
296 #define ASSIMP_LOG_DEBUG(string)\
|
nuclear@0
|
297 DefaultLogger::get()->debug(string)
|
nuclear@0
|
298
|
nuclear@0
|
299 #define ASSIMP_LOG_INFO(string)\
|
nuclear@0
|
300 DefaultLogger::get()->info(string)
|
nuclear@0
|
301
|
nuclear@0
|
302
|
nuclear@0
|
303 } // Namespace Assimp
|
nuclear@0
|
304
|
nuclear@0
|
305 #endif // !! INCLUDED_AI_LOGGER_H
|