32#include "exiv2lib_export.h"
75 class EXIV2API LogMsg {
77 LogMsg(
const LogMsg&);
79 LogMsg& operator=(
const LogMsg&);
85 enum Level { debug = 0, info = 1, warn = 2, error = 3, mute = 4 };
92 typedef void (*
Handler)(int,
const char*);
97 explicit LogMsg(
Level msgType);
106 std::ostringstream&
os();
136 const Level msgType_;
138 std::ostringstream os_;
144#define EXV_DEBUG if (LogMsg::debug >= LogMsg::level() && LogMsg::handler()) LogMsg(LogMsg::debug).os()
146#define EXV_INFO if (LogMsg::info >= LogMsg::level() && LogMsg::handler()) LogMsg(LogMsg::info).os()
148#define EXV_WARNING if (LogMsg::warn >= LogMsg::level() && LogMsg::handler()) LogMsg(LogMsg::warn).os()
150#define EXV_ERROR if (LogMsg::error >= LogMsg::level() && LogMsg::handler()) LogMsg(LogMsg::error).os()
155# pragma warning( disable : 4275 )
159 template<
typename charT,
typename T>
162 std::basic_ostringstream<charT> os;
174 class EXIV2API AnyError :
public std::exception {
177 AnyError(
const AnyError& o);
179 virtual ~AnyError()
throw();
181 virtual int code()
const throw() =0;
185 inline std::ostream& operator<<(std::ostream& os, const
AnyError& error)
187 return os << error.what();
192 kerGeneralError = -1,
202 kerDataSourceOpenFailed,
204 kerFileContainsUnknownImageType,
205 kerMemoryContainsUnknownImageType,
206 kerUnsupportedImageType,
207 kerFailedToReadImageData,
209 kerFailedToMapFileForReadWrite,
212 kerMemoryTransferFailed,
213 kerInputDataReadFailed,
215 kerNoImageInInputData,
222 kerUnsupportedDataAreaOffsetType,
224 kerUnsupportedDateFormat,
225 kerUnsupportedTimeFormat,
226 kerWritingImageFormatUnsupported,
227 kerInvalidSettingForImage,
229 kerFunctionNotSupported,
230 kerNoNamespaceInfoForXmpPrefix,
231 kerNoPrefixForNamespace,
232 kerTooLargeJpegSegment,
233 kerUnhandledXmpdatum,
236 kerDecodeLangAltPropertyFailed,
237 kerDecodeLangAltQualifierFailed,
238 kerEncodeLangAltPropertyFailed,
239 kerPropertyNameIdentificationFailed,
240 kerSchemaNamespaceNotRegistered,
241 kerNoNamespaceForPrefix,
242 kerAliasesNotSupported,
244 kerTooManyTiffDirectoryEntries,
245 kerMultipleTiffArrayElementTagsInDirectory,
246 kerWrongTiffArrayElementTagType,
247 kerInvalidKeyXmpValue,
248 kerInvalidIccProfile,
250 kerTiffDirectoryTooLarge,
252 kerInvalidLangAltValue,
254 kerCorruptedMetadata,
255 kerArithmeticOverflow,
263 template<
typename charT>
276 template<
typename A,
typename B>
280 template<
typename A,
typename B,
typename C>
289 virtual inline
int code() const throw();
294 virtual inline const
char*
what() const throw();
295#ifdef EXV_UNICODE_PATH
300 virtual inline const wchar_t* wwhat()
const throw();
314 std::basic_string<charT> arg1_;
315 std::basic_string<charT> arg2_;
316 std::basic_string<charT> arg3_;
318#ifdef EXV_UNICODE_PATH
325#ifdef EXV_UNICODE_PATH
334 const char*
errMsg(
int code);
336 template<
typename charT>
338 : code_(
code), count_(0)
343 template<
typename charT>
template<
typename A>
350 template<
typename charT>
template<
typename A,
typename B>
352 : code_(
code), count_(2),
359 template<
typename charT>
template<
typename A,
typename B,
typename C>
361 : code_(
code), count_(3),
369 template<
typename charT>
374 template<
typename charT>
380 template<
typename charT>
386#ifdef EXV_UNICODE_PATH
387 template<
typename charT>
390 return wmsg_.c_str();
395# pragma warning( default : 4275 )
Error class interface. Allows the definition and use of a hierarchy of error classes which can all be...
Definition error.hpp:174
virtual int code() const =0
Return the error code.
Simple error class used for exceptions. An output operator is provided to print errors to a stream.
Definition error.hpp:264
BasicError(ErrorCode code)
Constructor taking only an error code.
Definition error.hpp:337
BasicError(ErrorCode code, const A &arg1, const B &arg2, const C &arg3)
Constructor taking an error code and three arguments.
Definition error.hpp:360
BasicError(ErrorCode code, const A &arg1)
Constructor taking an error code and one argument.
Definition error.hpp:344
virtual ~BasicError()
Virtual destructor. (Needed because of throw()).
Definition error.hpp:370
virtual const char * what() const
BasicError(ErrorCode code, const A &arg1, const B &arg2)
Constructor taking an error code and two arguments.
Definition error.hpp:351
static void setLevel(Level level)
Set the log level. Only log messages with a level greater or equal level are sent to the log message ...
Definition error.cpp:193
void(* Handler)(int, const char *)
Type for a log message handler function. The function receives the log level and message and can proc...
Definition error.hpp:92
std::ostringstream & os()
Return a reference to the ostringstream which holds the log message.
Definition error.cpp:191
static Handler handler()
Return the current log message handler.
Definition error.cpp:199
static Level level()
Return the current log level.
Definition error.cpp:197
static void setHandler(Handler handler)
Set the log message handler. The default handler writes log messages to standard error....
Definition error.cpp:195
Level
Defined log levels. To suppress all log messages, either set the log level to mute or set the log mes...
Definition error.hpp:85
static void defaultHandler(int level, const char *s)
The default log handler. Sends the log message to standard error.
Definition error.cpp:201
Provides classes and functions to encode and decode Exif and Iptc data. The libexiv2 API consists of ...
Definition asfvideo.hpp:36
ErrorCode
Complete list of all Exiv2 error codes.
Definition error.hpp:191
@ kerValueTooLarge
Entry::setValue: Value too large.
Definition error.hpp:218
@ kerDataAreaValueTooLarge
Entry::setDataArea: Value too large.
Definition error.hpp:220
std::basic_string< charT > toBasicString(const T &arg)
Generalised toString function.
Definition error.hpp:160
const char * errMsg(int code)
Return the error message for the error with code code.
Definition error.cpp:298
BasicError< char > Error
Error class used for exceptions (std::string based).
Definition error.hpp:324