blocxx
Classes | Namespaces | Macros | Functions | Variables
Exception.hpp File Reference
#include "blocxx/BLOCXX_config.h"
#include "blocxx/AutoPtr.hpp"
#include <iosfwd>
#include <exception>
#include <new>
#include <cerrno>

Go to the source code of this file.

Classes

class  BLOCXX_NAMESPACE::Exception
 This class is the base of all exceptions thrown by BloCxx code. More...
 
class  BLOCXX_NAMESPACE::ExceptionDetail::FormatMsg
 
struct  BLOCXX_NAMESPACE::ExceptionDetail::Errno< exType >
 

Namespaces

namespace  BLOCXX_NAMESPACE
 Taken from RFC 1321.
 
namespace  BLOCXX_NAMESPACE::ExceptionDetail
 

Macros

#define BLOCXX_THROW(exType, msg)   throw exType(__FILE__, __LINE__, (msg))
 Throw an exception using FILE and LINE.
 
#define BLOCXX_THROWL(exType, line, msg)   throw exType(__FILE__, (line), (msg))
 This macro is deprecated in 3.1.0.
 
#define BLOCXX_THROW_SUBEX(exType, msg, subex)
 Throw an exception using FILE and LINE.
 
#define BLOCXX_THROW_ERR(exType, msg, err)   throw exType(__FILE__, __LINE__, (msg), (err))
 Throw an exception using FILE and LINE.
 
#define BLOCXX_THROW_ERRNO(exType)   BLOCXX_THROW_ERRNO1(exType, errno)
 Throw an exception using FILE, LINE, errno and strerror(errno)
 
#define BLOCXX_THROW_ERRNO1(exType, errnum)   throw ::BLOCXX_NAMESPACE::ExceptionDetail::Errno< exType >::simple(__FILE__, __LINE__, (errnum))
 Throw an exception using FILE, LINE, errnum and strerror(errnum)
 
#define BLOCXX_THROW_ERRNO_MSG(exType, msg)   BLOCXX_THROW_ERRNO_MSG1(exType, (msg), errno)
 Throw an exception using FILE, LINE, errno and strerror(errno)
 
#define BLOCXX_THROW_ERRNO_MSG1(exType, msg, errnum)
 Throw an exception using FILE, LINE, errnum and strerror(errnum)
 
#define BLOCXX_THROW_ERR_SUBEX(exType, msg, err, subex)   throw exType(__FILE__, __LINE__, (msg), (err), &(subex))
 Throw an exception using FILE and LINE.
 
#define BLOCXX_DECLARE_EXCEPTION2(NAME, BASE)
 Declare a new exception class named <NAME>Exception that derives from <BASE>.
 
#define BLOCXX_DECLARE_APIEXCEPTION2(NAME, BASE, LINKAGE_SPEC)
 Declare a new exception class named <NAME>Exception that derives from <BASE>.
 
#define BLOCXX_DECLARE_EXCEPTION(NAME)   BLOCXX_DECLARE_EXCEPTION2(NAME, ::BLOCXX_NAMESPACE::Exception)
 Declare a new exception class named <NAME>Exception that derives from Exception This macro is typically used in a header file.
 
#define BLOCXX_DECLARE_APIEXCEPTION(NAME, LINKAGE_SPEC)   BLOCXX_DECLARE_APIEXCEPTION2(NAME, ::BLOCXX_NAMESPACE::Exception, LINKAGE_SPEC)
 Declare a new exception class named <NAME>Exception that derives from Exception This macro is typically used in a header file.
 
#define BLOCXX_DEFINE_EXCEPTION2(NAME, BASE)
 Define a new exception class named <NAME>Exception that derives from <BASE>.
 
#define BLOCXX_DEFINE_EXCEPTION_WITH_BASE_AND_ID_AUX(NAME, BASE, SUB_CLASS_ID)
 Define a new exception class named <NAME>Exception that derives from <BASE>.
 
#define BLOCXX_DEFINE_EXCEPTION(NAME)   BLOCXX_DEFINE_EXCEPTION_WITH_BASE_AND_ID_AUX(NAME, ::BLOCXX_NAMESPACE::Exception, ::BLOCXX_NAMESPACE::Exception::UNKNOWN_SUBCLASS_ID)
 Define a new exception class named <NAME>Exception that derives from Exception.
 
#define BLOCXX_DEFINE_EXCEPTION_WITH_ID(NAME)   BLOCXX_DEFINE_EXCEPTION_WITH_BASE_AND_ID_AUX(NAME, ::BLOCXX_NAMESPACE::Exception, ::BLOCXX_NAMESPACE::ExceptionIds::NAME##ExceptionId)
 Define a new exception class named <NAME>Exception that derives from Exception.
 
#define BLOCXX_DEFINE_EXCEPTION_WITH_BASE_AND_ID(NAME, BASE)   BLOCXX_DEFINE_EXCEPTION_WITH_BASE_AND_ID_AUX(NAME, BASE, ::BLOCXX_NAMESPACE::ExceptionIds::NAME##ExceptionId)
 Define a new exception class named <NAME>Exception that derives from <BASE>.
 

Functions

void BLOCXX_NAMESPACE::ExceptionDetail::portable_strerror_r (int errnum, char *buf, unsigned n)
 
std::ostream & BLOCXX_NAMESPACE::operator<< (std::ostream &os, const Exception &e)
 Writes the exception object to the stream in the form: <file>: <line> <type>: <message>
 

Variables

struct BLOCXX_COMMON_API BLOCXX_NAMESPACE::ExceptionDetail::FormatMsgImpl
 
unsigned const BLOCXX_NAMESPACE::ExceptionDetail::BUFSZ = 1024
 

Macro Definition Documentation

◆ BLOCXX_DECLARE_APIEXCEPTION

#define BLOCXX_DECLARE_APIEXCEPTION (   NAME,
  LINKAGE_SPEC 
)    BLOCXX_DECLARE_APIEXCEPTION2(NAME, ::BLOCXX_NAMESPACE::Exception, LINKAGE_SPEC)

Declare a new exception class named <NAME>Exception that derives from Exception This macro is typically used in a header file.

Parameters
NAMEThe name of the new class (Exception will be postfixed)
LINKAGE_SPECthe linkage specifier. If the BLOCXX_DEFINE_EXCEPTION is part of libblocxx this would BLOCXX_COMMON_API...

Definition at line 396 of file Exception.hpp.

◆ BLOCXX_DECLARE_APIEXCEPTION2

#define BLOCXX_DECLARE_APIEXCEPTION2 (   NAME,
  BASE,
  LINKAGE_SPEC 
)
Value:
class LINKAGE_SPEC NAME##Exception : public BASE \
{ \
public: \
NAME##Exception(const char* file, int line, const char* msg, int errorCode = ::BLOCXX_NAMESPACE::Exception::UNKNOWN_ERROR_CODE, const Exception* otherException = 0, int subClassId = ::BLOCXX_NAMESPACE::Exception::UNKNOWN_SUBCLASS_ID); \
virtual ~NAME##Exception() throw(); \
virtual const char* type() const; \
virtual NAME##Exception* clone() const; \
virtual void rethrow() const; \
};
static const int UNKNOWN_SUBCLASS_ID
Definition: Exception.hpp:112
static const int UNKNOWN_ERROR_CODE
Definition: Exception.hpp:113

Declare a new exception class named <NAME>Exception that derives from <BASE>.

This macro is typically used in a header file. The exception class declaration will be prefaced with the linkage_spec parm. This allows the use of BLOCXX_COMMON_API when declaring exceptions. Example: BLOCXX_DECLARE_APIEXCEPTION(Bogus, MYException, BLOCXX_COMMON_API)

Parameters
NAMEThe name of the new class (Exception will be postfixed)
BASEThe base class.
LINKAGE_SPECThe linkage specifier for the exception class.

Definition at line 366 of file Exception.hpp.

◆ BLOCXX_DECLARE_EXCEPTION

#define BLOCXX_DECLARE_EXCEPTION (   NAME)    BLOCXX_DECLARE_EXCEPTION2(NAME, ::BLOCXX_NAMESPACE::Exception)

Declare a new exception class named <NAME>Exception that derives from Exception This macro is typically used in a header file.

Parameters
NAMEThe name of the new class (Exception will be postfixed)

Definition at line 386 of file Exception.hpp.

◆ BLOCXX_DECLARE_EXCEPTION2

#define BLOCXX_DECLARE_EXCEPTION2 (   NAME,
  BASE 
)
Value:
class NAME##Exception : public BASE \
{ \
public: \
NAME##Exception(const char* file, int line, const char* msg, int errorCode = ::BLOCXX_NAMESPACE::Exception::UNKNOWN_ERROR_CODE, const Exception* otherException = 0, int subClassId = ::BLOCXX_NAMESPACE::Exception::UNKNOWN_SUBCLASS_ID); \
virtual ~NAME##Exception() throw(); \
virtual const char* type() const; \
virtual NAME##Exception* clone() const; \
virtual void rethrow() const; \
};

Declare a new exception class named <NAME>Exception that derives from <BASE>.

This macro is typically used in a header file.

Parameters
NAMEThe name of the new class (Exception will be postfixed)
BASEThe base class.

Definition at line 344 of file Exception.hpp.

◆ BLOCXX_DEFINE_EXCEPTION

Define a new exception class named <NAME>Exception that derives from Exception.

The new class will use UNKNOWN_SUBCLASS_ID for the subclass id. Use this macro for internal implementation exceptions that don't have an id. This macro is typically used in a cpp file.

Parameters
NAMEThe name of the new class (Exception will be postfixed)

Definition at line 439 of file Exception.hpp.

◆ BLOCXX_DEFINE_EXCEPTION2

#define BLOCXX_DEFINE_EXCEPTION2 (   NAME,
  BASE 
)
Value:
NAME##Exception::NAME##Exception(const char* file, int line, const char* msg, int errorCode, const ::BLOCXX_NAMESPACE::Exception* otherException, int subClassId) \
: BASE(file, line, msg, errorCode, otherException, subClassId) {} \
NAME##Exception::~NAME##Exception() throw() { } \
NAME##Exception* NAME##Exception::clone() const { return new(std::nothrow) NAME##Exception(*this); } \
const char* NAME##Exception::type() const { return #NAME "Exception"; }\
void NAME##Exception::rethrow() const { throw *this; }

Define a new exception class named <NAME>Exception that derives from <BASE>.

The new class will use UNKNOWN_SUBCLASS_ID for the subclass id. This macro is typically used in a cpp file.

Parameters
NAMEThe name of the new class (Exception will be postfixed)
BASEThe base class.

Definition at line 406 of file Exception.hpp.

◆ BLOCXX_DEFINE_EXCEPTION_WITH_BASE_AND_ID

#define BLOCXX_DEFINE_EXCEPTION_WITH_BASE_AND_ID (   NAME,
  BASE 
)    BLOCXX_DEFINE_EXCEPTION_WITH_BASE_AND_ID_AUX(NAME, BASE, ::BLOCXX_NAMESPACE::ExceptionIds::NAME##ExceptionId)

Define a new exception class named <NAME>Exception that derives from <BASE>.

The new class will use ExceptionIds::<NAME>ExceptionId for the subclass id. Use this macro to create public exceptions that have an id in the BLOCXX_NAMESPACE::ExceptionIds namespace that will derive from BASE This macro is typically used in a cpp file.

Parameters
NAMEThe name of the new class (Exception will be postfixed)
BASEThe base class.

Definition at line 460 of file Exception.hpp.

◆ BLOCXX_DEFINE_EXCEPTION_WITH_BASE_AND_ID_AUX

#define BLOCXX_DEFINE_EXCEPTION_WITH_BASE_AND_ID_AUX (   NAME,
  BASE,
  SUB_CLASS_ID 
)
Value:
NAME##Exception::NAME##Exception(const char* file, int line, const char* msg, int errorCode, const ::BLOCXX_NAMESPACE::Exception* otherException, int subClassId) \
: BASE(file, line, msg, errorCode, otherException, subClassId == ::BLOCXX_NAMESPACE::Exception::UNKNOWN_SUBCLASS_ID ? (SUB_CLASS_ID) : subClassId) {} \
NAME##Exception::~NAME##Exception() throw() { } \
NAME##Exception* NAME##Exception::clone() const { return new(std::nothrow) NAME##Exception(*this); } \
const char* NAME##Exception::type() const { return #NAME "Exception"; } \
void NAME##Exception::rethrow() const { throw *this; }

Define a new exception class named <NAME>Exception that derives from <BASE>.

The new class will use SUB_CLASS_ID for the subclass id. This macro is typically used in a cpp file.

Parameters
NAMEThe name of the new class (Exception will be postfixed)
BASEThe base class.
SUB_CLASS_IDThe subclass id.

Definition at line 423 of file Exception.hpp.

◆ BLOCXX_DEFINE_EXCEPTION_WITH_ID

#define BLOCXX_DEFINE_EXCEPTION_WITH_ID (   NAME)    BLOCXX_DEFINE_EXCEPTION_WITH_BASE_AND_ID_AUX(NAME, ::BLOCXX_NAMESPACE::Exception, ::BLOCXX_NAMESPACE::ExceptionIds::NAME##ExceptionId)

Define a new exception class named <NAME>Exception that derives from Exception.

The new class will use ExceptionIds::<NAME>ExceptionId for the subclass id. Use this macro to create public exceptions that have an id in the BLOCXX_NAMESPACE::ExceptionIds namespace that derive from Exception This macro is typically used in a cpp file.

Parameters
NAMEThe name of the new class (Exception will be postfixed)

Definition at line 449 of file Exception.hpp.

◆ BLOCXX_THROW

#define BLOCXX_THROW (   exType,
  msg 
)    throw exType(__FILE__, __LINE__, (msg))

Throw an exception using FILE and LINE.

If applicable, BLOCXX_THROW_ERR should be used instead of this macro.

Parameters
exTypeThe type of the exception
msgThe exception message. A string that will be copied.

Definition at line 263 of file Exception.hpp.

◆ BLOCXX_THROW_ERR

#define BLOCXX_THROW_ERR (   exType,
  msg,
  err 
)    throw exType(__FILE__, __LINE__, (msg), (err))

Throw an exception using FILE and LINE.

Parameters
exTypeThe type of the exception
msgThe exception message. A string that will be copied.
errThe error code.

Definition at line 287 of file Exception.hpp.

◆ BLOCXX_THROW_ERR_SUBEX

#define BLOCXX_THROW_ERR_SUBEX (   exType,
  msg,
  err,
  subex 
)    throw exType(__FILE__, __LINE__, (msg), (err), &(subex))

Throw an exception using FILE and LINE.

Parameters
exTypeThe type of the exception
msgThe exception message. A string that will be copied.
errThe error code.
subexA sub-exception. A point to it will be passed to the exception constructor, which should clone() it.

Definition at line 334 of file Exception.hpp.

◆ BLOCXX_THROW_ERRNO

#define BLOCXX_THROW_ERRNO (   exType)    BLOCXX_THROW_ERRNO1(exType, errno)

Throw an exception using FILE, LINE, errno and strerror(errno)

Parameters
exTypeThe type of the exception; ctor must take file, line, message, and error code.

Definition at line 295 of file Exception.hpp.

◆ BLOCXX_THROW_ERRNO1

#define BLOCXX_THROW_ERRNO1 (   exType,
  errnum 
)    throw ::BLOCXX_NAMESPACE::ExceptionDetail::Errno< exType >::simple(__FILE__, __LINE__, (errnum))

Throw an exception using FILE, LINE, errnum and strerror(errnum)

Parameters
exTypeThe type of the exception; ctor must take file, line, message, and error code.
errnumThe errno value.

Definition at line 303 of file Exception.hpp.

◆ BLOCXX_THROW_ERRNO_MSG

#define BLOCXX_THROW_ERRNO_MSG (   exType,
  msg 
)    BLOCXX_THROW_ERRNO_MSG1(exType, (msg), errno)

Throw an exception using FILE, LINE, errno and strerror(errno)

Parameters
exTypeThe type of the exception; ctor must take file, line, message, and error code.
msgThe exception message to use.

Definition at line 312 of file Exception.hpp.

◆ BLOCXX_THROW_ERRNO_MSG1

#define BLOCXX_THROW_ERRNO_MSG1 (   exType,
  msg,
  errnum 
)
Value:
throw ::BLOCXX_NAMESPACE::ExceptionDetail::Errno< exType >:: \
format(__FILE__, __LINE__, (msg), (errnum))

Throw an exception using FILE, LINE, errnum and strerror(errnum)

Parameters
exTypeThe type of the exception; ctor must take file, line, message, and error code.
msgThe exception message to use.
errnumThe errno value.

Definition at line 322 of file Exception.hpp.

◆ BLOCXX_THROW_SUBEX

#define BLOCXX_THROW_SUBEX (   exType,
  msg,
  subex 
)
Value:
throw exType(__FILE__, __LINE__, (msg), \

Throw an exception using FILE and LINE.

Parameters
exTypeThe type of the exception
msgThe exception message. A string that will be copied.
subexA sub-exception. A pointer to it will be passed to the exception constructor, which should clone() it.

Definition at line 277 of file Exception.hpp.

◆ BLOCXX_THROWL

#define BLOCXX_THROWL (   exType,
  line,
  msg 
)    throw exType(__FILE__, (line), (msg))

This macro is deprecated in 3.1.0.

Definition at line 268 of file Exception.hpp.