Main Page | Modules | Class Hierarchy | Class List | File List | Class Members | Related Pages

Error.h

00001 /***************************************************************************** 00002 * Author: Valient Gough <vgough@pobox.com> 00003 * 00004 ***************************************************************************** 00005 * Copyright (c) 2004, Valient Gough 00006 * 00007 * This library is free software; you can distribute it and/or modify it under 00008 * the terms of the GNU Lesser General Public License (LGPL), as published by 00009 * the Free Software Foundation; either version 2.1 of the License, or (at your 00010 * option) any later version. 00011 * 00012 * This library is distributed in the hope that it will be useful, but WITHOUT 00013 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 00014 * FITNESS FOR A PARTICULAR PURPOSE. See the LGPL in the file COPYING for more 00015 * details. 00016 * 00017 */ 00018 00019 00020 #ifndef _Error_incl_ 00021 #define _Error_incl_ 00022 00023 #include <stdexcept> 00024 #include <rlog/common.h> 00025 00026 #include <string> 00027 00028 namespace rlog 00029 { 00030 class RLOG_DECL RLogChannel; 00031 00032 // Documentation in implementation file 00033 class RLOG_DECL Error : public std::runtime_error 00034 { 00035 public: 00036 Error( const char *component, const char *file, const char *function, 00037 int line, const char *msg ); 00038 Error( const char *component, const char *file, const char *function, 00039 int line, const std::string &msg ); 00040 Error(const Error &src ); 00041 virtual ~Error() throw(); 00042 00043 Error &operator = (const Error &src); 00044 00045 void log( RLogChannel * channel ) const; 00046 00047 const char *component() const; 00048 const char *file() const; 00049 const char *function() const; 00050 int line() const; 00051 const char *message() const; 00052 00053 private: 00054 struct ErrorData *data; 00055 }; 00056 00057 std::string _format_msg( const char *fmt, ... ) PRINTF(1,2); 00058 } 00059 00060 #define _ERROR_IMPL( COMPONENT, MSG ) \ 00061 rlog::Error( STR(COMPONENT), __FILE__, __FUNCTION__, __LINE__, MSG ) 00062 00063 #define ERROR( MSG ) _ERROR_IMPL( RLOG_COMPONENT, MSG ) 00064 00065 #if C99_VARIADAC_MACROS 00066 #define _ERROR_IMPL_VA( COMPONENT, FMT, ... ) \ 00067 rlog::Error( STR(COMPONENT), __FILE__, __FUNCTION__, __LINE__, \ 00068 rlog::_format_msg( FMT, __VA_ARGS__ ) ) 00069 #define ERROR_FMT( FMT, ... ) _ERROR_IMPL_VA( RLOG_COMPONENT, FMT, __VA_ARGS__ ) 00070 #elif PREC99_VARIADIC_MACROS 00071 #define _ERROR_IMPL_VA( COMPONENT, FMT, ARGS... ) \ 00072 rlog::Error( STR(COMPONENT), __FILE__, __FUNCTION__, __LINE__, \ 00073 rlog::_format_msg( FMT, ##ARGS ) ) 00074 #define ERROR_FMT( FMT, ARGS... ) _ERROR_IMPL_VA( RLOG_COMPONENT, FMT, ##ARGS ) 00075 #else 00076 // TODO: implement for no variadics case.. 00077 #endif 00078 00079 #endif 00080

Generated on Wed Dec 8 22:52:02 2004 for rlog by doxygen 1.3.8