14 #ifndef STXXL_COMMON_ERROR_HANDLING_HEADER
15 #define STXXL_COMMON_ERROR_HANDLING_HEADER
33 #define STXXL_PRETTY_FUNCTION_NAME __FUNCTION__
35 #define STXXL_PRETTY_FUNCTION_NAME __PRETTY_FUNCTION__
41 #define STXXL_THROW2(exception_type, location, error_message) \
43 std::ostringstream msg; \
44 msg << "Error in " << location << " : " << error_message; \
45 throw exception_type(msg.str()); \
49 #define STXXL_THROW(exception_type, error_message) \
50 STXXL_THROW2(exception_type, \
51 STXXL_PRETTY_FUNCTION_NAME, \
55 #define STXXL_THROW_ERRNO2(exception_type, error_message, errno_value) \
56 STXXL_THROW2(exception_type, \
57 STXXL_PRETTY_FUNCTION_NAME, \
58 error_message << " : " << strerror(errno_value))
61 #define STXXL_THROW_ERRNO(exception_type, error_message) \
62 STXXL_THROW_ERRNO2(exception_type, error_message, errno)
65 #define STXXL_THROW_INVALID_ARGUMENT(error_message) \
66 STXXL_THROW2(std::invalid_argument, \
67 STXXL_PRETTY_FUNCTION_NAME, \
71 #define STXXL_THROW_UNREACHABLE() \
72 STXXL_THROW2(stxxl::unreachable, \
73 "file " << __FILE__ << ", line " << __LINE__, \
74 "this code should never be reachable")
79 #define STXXL_THROW_IF(expr, exception_type, error_message) \
82 STXXL_THROW(exception_type, error_message); \
87 #define STXXL_THROW_NE_0(expr, exception_type, error_message) \
88 STXXL_THROW_IF((expr) != 0, exception_type, error_message)
91 #define STXXL_THROW_EQ_0(expr, exception_type, error_message) \
92 STXXL_THROW_IF((expr) == 0, exception_type, error_message)
95 #define STXXL_THROW_LT_0(expr, exception_type, error_message) \
96 STXXL_THROW_IF((expr) < 0, exception_type, error_message)
101 #define STXXL_THROW_ERRNO_IF(expr, exception_type, error_message) \
104 STXXL_THROW_ERRNO(exception_type, error_message); \
109 #define STXXL_THROW_ERRNO_NE_0(expr, exception_type, error_message) \
110 STXXL_THROW_ERRNO_IF((expr) != 0, exception_type, error_message)
113 #define STXXL_THROW_ERRNO_EQ_0(expr, exception_type, error_message) \
114 STXXL_THROW_ERRNO_IF((expr) == 0, exception_type, error_message)
117 #define STXXL_THROW_ERRNO_LT_0(expr, exception_type, error_message) \
118 STXXL_THROW_ERRNO_IF((expr) < 0, exception_type, error_message)
123 #define STXXL_CHECK_PTHREAD_CALL(expr) \
127 STXXL_THROW_ERRNO2(stxxl::resource_error, #expr, res); \
133 #if STXXL_WINDOWS || defined(__MINGW32__)
136 #define STXXL_THROW_WIN_LASTERROR(exception_type, error_message) \
139 DWORD dw = GetLastError(); \
141 FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, \
143 MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), \
146 std::ostringstream msg; \
147 msg << "Error in " << STXXL_PRETTY_FUNCTION_NAME \
148 << " : " << error_message \
149 << " : error code " << dw << " : " << ((char*)lpMsgBuf); \
150 LocalFree(lpMsgBuf); \
151 throw exception_type(msg.str()); \
160 #endif // !STXXL_COMMON_ERROR_HANDLING_HEADER
#define STXXL_BEGIN_NAMESPACE
#define STXXL_END_NAMESPACE