00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #ifndef OPENIMAGEIO_ERRORMANAGER_H
00033 #define OPENIMAGEIO_ERRORMANAGER_H
00034
00035 #include <cstdarg>
00036
00037 #include "export.h"
00038
00039 #ifndef OPENIMAGEIO_PRINTF_ARGS
00040 # ifndef __GNUC__
00041 # define __attribute__(x)
00042 # endif
00043 # define OPENIMAGEIO_PRINTF_ARGS(fmtarg_pos, vararg_pos) \
00044 __attribute__ ((format (printf, fmtarg_pos, vararg_pos) ))
00045 #endif
00046
00047 #ifdef OPENIMAGEIO_NAMESPACE
00048 namespace OPENIMAGEIO_NAMESPACE {
00049 #endif
00050
00051 namespace OpenImageIO {
00052
00053
00069 class DLLPUBLIC ErrorHandler {
00070 public:
00075 enum ErrCode {
00076 NO_ERROR = 0,
00077 MESSAGE = 0 << 16,
00078 INFO = 1 << 16,
00079 WARNING = 2 << 16,
00080 ERROR = 3 << 16,
00081 SEVERE = 4 << 16,
00082 DEBUGOUTPUT = 5 << 16
00083 };
00084
00087 enum VerbosityLevel {
00088 QUIET = 0,
00089 NORMAL = 1,
00090 VERBOSE = 2
00091 };
00092
00093 ErrorHandler () : m_verbosity(NORMAL) { }
00094 virtual ~ErrorHandler () { }
00095
00100 virtual void operator () (int errcode, const std::string &msg);
00101
00104 void info (const char *format, ...) OPENIMAGEIO_PRINTF_ARGS(2,3);
00105
00109 void warning (const char *format, ...) OPENIMAGEIO_PRINTF_ARGS(2,3);
00110
00113 void error (const char *format, ...) OPENIMAGEIO_PRINTF_ARGS(2,3);
00114
00117 void severe (const char *format, ...) OPENIMAGEIO_PRINTF_ARGS(2,3);
00118
00122 void message (const char *format, ...) OPENIMAGEIO_PRINTF_ARGS(2,3);
00123
00127 #ifdef DEBUG
00128 void debug (const char *format, ...) OPENIMAGEIO_PRINTF_ARGS(2,3);
00129 #else
00130 void debug (const char *format, ...) OPENIMAGEIO_PRINTF_ARGS(2,3) { }
00131 #endif
00132
00133 void vInfo (const char *format, va_list argptr);
00134 void vWarning (const char *format, va_list argptr);
00135 void vError (const char *format, va_list argptr);
00136 void vSevere (const char *format, va_list argptr);
00137 void vMessage (const char *format, va_list argptr);
00138 #ifdef DEBUG
00139 void vDebug (const char *format, va_list argptr);
00140 #else
00141 void vDebug (const char *, va_list) { }
00142 #endif
00143
00144 void info (const std::string &msg) { (*this)(INFO, msg); }
00145 void warning (const std::string &msg) { (*this)(WARNING, msg); }
00146 void error (const std::string &msg) { (*this)(ERROR, msg); }
00147 void severe (const std::string &msg) { (*this)(SEVERE, msg); }
00148 void message (const std::string &msg) { (*this)(MESSAGE, msg); }
00149 #ifdef DEBUG
00150 void debug (const std::string &msg) { (*this)(DEBUGOUTPUT, msg); }
00151 #else
00152 void debug (const std::string &) { }
00153 #endif
00154
00157 void verbosity (int v) { m_verbosity = v; }
00158
00161 int verbosity () const { return m_verbosity; }
00162
00166 static ErrorHandler & default_handler ();
00167
00168 private:
00169 int m_verbosity;
00170 };
00171
00172
00173
00174 };
00175
00176
00177 #ifdef OPENIMAGEIO_NAMESPACE
00178 };
00179 using namespace OPENIMAGEIO_NAMESPACE;
00180 #endif
00181
00182 #endif