1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248
|
/*******************************************************************************
* pov_err.h
*
* This module contains all error numbers.
*
* ---------------------------------------------------------------------------
* Persistence of Vision Ray Tracer ('POV-Ray') version 3.7.
* Copyright 1991-2013 Persistence of Vision Raytracer Pty. Ltd.
*
* POV-Ray is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* POV-Ray is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* ---------------------------------------------------------------------------
* POV-Ray is based on the popular DKB raytracer version 2.12.
* DKBTrace was originally written by David K. Buck.
* DKBTrace Ver 2.0-2.12 were written by David K. Buck & Aaron A. Collins.
* ---------------------------------------------------------------------------
* $File: //depot/public/povray/3.x/source/base/pov_err.h $
* $Revision: #1 $
* $Change: 6069 $
* $DateTime: 2013/11/06 11:59:40 $
* $Author: chrisc $
*******************************************************************************/
#ifndef POV_ERR_H
#define POV_ERR_H
#include "base/configbase.h"
namespace pov_base
{
// fatal errors
enum
{
kNoError = 0,
kNoErr = kNoError,
kParamErr = -1,
kMemFullErr = -2,
kOutOfMemoryErr = kMemFullErr,
kInvalidDataSizeErr = -3,
kCannotHandleDataErr = -4,
kNullPointerErr = -5,
kChecksumErr = -6,
kParseErr = -7,
kCannotOpenFileErr = -8,
kInvalidDestAddrErr = -9,
kCannotConnectErr = -10,
kDisconnectedErr = -11,
kHostDisconnectedErr = -12,
kNetworkDataErr = -13,
kNetworkConnectionErr = -14,
kObjectAccessErr = -15,
kVersionErr = -16,
kFileDataErr = -17,
kAuthorisationErr = -18,
kDataTypeErr = -19,
kTimeoutErr = -20,
kInvalidContextErr = -21,
kIncompleteDataErr = -22,
kInvalidIdentifierErr = -23,
kCannotHandleRequestErr = -24,
kImageAlreadyRenderedErr = -25,
kAccessViolationErr = -26,
kDivideByZeroErr = -27,
kStackOverflowErr = -28,
kNativeExceptionErr = -29,
kInternalLimitErr = -30,
kUncategorizedError = -31,
kNumericalLimitErr = -32,
};
// non fatal errors
enum
{
kFalseErr = 1,
kOutOfSyncErr = 2,
kNotNowErr = kOutOfSyncErr,
kQueueFullErr = 3,
kUserAbortErr = 4
};
/**
* Macro which builds an exception with file name, line and function.
* Requires an error message text string to be specified.
*/
#define POV_EXCEPTION_STRING(str) pov_base::Exception(__FUNCTION__, __FILE__, __LINE__, (str))
/**
* Macro which builds an exception with file name, line and function.
* Requires an error code to be specified.
* The string will be derived from the error code.
*/
#define POV_EXCEPTION_CODE(err) pov_base::Exception(__FUNCTION__, __FILE__, __LINE__, (err))
/**
* Macro which builds an exception with file name, line and function.
* Requires an error code and string to be specified.
*/
#define POV_EXCEPTION(err,str) pov_base::Exception(__FUNCTION__, __FILE__, __LINE__, (err), (str))
/**
* POV-Ray exception class.
*/
class Exception : public runtime_error
{
public:
/**
* Create a new exception without location information.
* @param str Error message string.
*/
Exception(const char *str) throw() : runtime_error(str), xfunction(NULL), xfile(NULL), xline(0), xcode(0), xcodevalid(false), xfrontendnotified(false) { }
/**
* Create a new exception with location information; looks up message from code.
* @param fn __FUNCTION__ or NULL
* @param fi __FILE__
* @param li __LINE__
* @param err Error number.
*/
Exception(const char *fn, const char *fi, unsigned int li, int err) throw() : runtime_error(Exception::lookup_code(err, fi, li)), xfunction(fn), xfile(fi), xline(li), xcode(err), xcodevalid(true), xfrontendnotified(false) { }
/**
* Create a new exception with code, location information, and an explicit message.
* @param fn __FUNCTION__ or NULL
* @param fi __FILE__
* @param li __LINE__
* @param str Error message string.
*/
Exception(const char *fn, const char *fi, unsigned int li, const char *str) throw() : runtime_error(str), xfunction(fn), xfile(fi), xline(li), xcode(0), xcodevalid(false), xfrontendnotified(false) { }
/**
* Create a new exception with code, location information, and an explicit message.
* @param fn __FUNCTION__ or NULL
* @param fi __FILE__
* @param li __LINE__
* @param str Error message string.
*/
Exception(const char *fn, const char *fi, unsigned int li, const string& str) throw() : runtime_error(str), xfunction(fn), xfile(fi), xline(li), xcode(0), xcodevalid(false), xfrontendnotified(false) { }
/**
* Create a new exception with code, location information, and an explicit message.
* @param fn __FUNCTION__ or NULL
* @param fi __FILE__
* @param li __LINE__
* @param err Error number.
* @param str Error message string.
*/
Exception(const char *fn, const char *fi, unsigned int li, int err, const char *str) throw() : runtime_error(str), xfunction(fn), xfile(fi), xline(li), xcode(err), xcodevalid(true), xfrontendnotified(false) { }
/**
* Create a new exception with code, location information, and an explicit message.
* @param fn __FUNCTION__ or NULL
* @param fi __FILE__
* @param li __LINE__
* @param err Error number.
* @param str Error message string.
*/
Exception(const char *fn, const char *fi, unsigned int li, int err, const string& str) throw() : runtime_error(str), xfunction(fn), xfile(fi), xline(li), xcode(err), xcodevalid(true), xfrontendnotified(false) { }
/**
* Destructor.
*/
virtual ~Exception() throw() { }
/**
* Determine the function name where the exception occured.
* @return Function name or NULL.
*/
const char *function() const { return xfunction; }
/**
* Determine the name of the source file where the exception occured.
* @return File name or NULL.
*/
const char *file() const { return xfile; }
/**
* Determine the line number in the source file where the exception occured.
* @return File line or 0.
*/
unsigned int line() const { return xline; }
/**
* Determine the error code.
* @return Error code (n.b. 0 is a legal errorcode)
*/
int code() const { return xcode; }
/**
* Determine the error code or default value if code not supplied at construction.
* @return Error code (n.b. 0 is a legal errorcode)
*/
int code(int defval) const { return xcodevalid ? xcode : defval; }
/**
* Find out if an errorcode was supplied
* @return true if this exception was created with an int param
*/
bool codevalid() const { return xcodevalid; }
/**
* Find out if the front-end has been notified about this exception
* @return true if the front-end has been told about the exception
*/
bool frontendnotified(void) const { return xfrontendnotified; }
/**
* Set the front-end notification flag
* @param yes true to indicate notification has been passed on
* @return previous value of notification flag
*/
bool frontendnotified(bool yes) { bool oldval = xfrontendnotified; xfrontendnotified = yes; return oldval; }
/**
* Return the error description for the given code.
* @param err Error code.
* @return Error string for error code.
*/
static std::string lookup_code(int err, const char *file = NULL, unsigned int line = 0);
private:
/// Function where the exception occured
const char *xfunction;
/// File name of the source file where the exception occured
const char *xfile;
// Line number in the source file where the exception occured
unsigned int xline;
// Error code
int xcode;
// flag so we can tell if this exception was created with an errorcode
bool xcodevalid;
// flag that tells us if this exception has been notified to the front-end
bool xfrontendnotified;
};
}
#endif
|