8#ifndef PANDORA_STATUS_CODES_H
9#define PANDORA_STATUS_CODES_H 1
14#if defined(__GNUC__) && defined(BACKTRACE)
19#define PANDORA_RETURN_RESULT_IF(StatusCode1, Operator, Command) \
21 const pandora::StatusCode statusCode(Command); \
22 if (statusCode Operator StatusCode1) \
24 std::cout << #Command << " return " << StatusCodeToString(statusCode) << std::endl; \
25 std::cout << " in function: " << __FUNCTION__ << std::endl; \
26 std::cout << " in file: " << __FILE__ << " line#: " << __LINE__ << std::endl; \
31#define PANDORA_RETURN_RESULT_IF_AND_IF(StatusCode1, StatusCode2, Operator, Command) \
33 const pandora::StatusCode statusCode(Command); \
34 if ((statusCode Operator StatusCode1) && (statusCode Operator StatusCode2)) \
36 std::cout << #Command << " return " << StatusCodeToString(statusCode) << std::endl; \
37 std::cout << " in function: " << __FUNCTION__ << std::endl; \
38 std::cout << " in file: " << __FILE__ << " line#: " << __LINE__ << std::endl; \
43#define PANDORA_THROW_RESULT_IF(StatusCode1, Operator, Command) \
45 const pandora::StatusCode statusCode(Command); \
46 if (statusCode Operator StatusCode1) \
48 std::cout << #Command << " throw " << StatusCodeToString(statusCode) << std::endl; \
49 std::cout << " in function: " << __FUNCTION__ << std::endl; \
50 std::cout << " in file: " << __FILE__ << " line#: " << __LINE__ << std::endl; \
51 throw pandora::StatusCodeException(statusCode); \
55#define PANDORA_THROW_RESULT_IF_AND_IF(StatusCode1, StatusCode2, Operator, Command) \
57 const pandora::StatusCode statusCode(Command); \
58 if ((statusCode Operator StatusCode1) && (statusCode Operator StatusCode2)) \
60 std::cout << #Command << " throw " << StatusCodeToString(statusCode) << std::endl; \
61 std::cout << " in function: " << __FUNCTION__ << std::endl; \
62 std::cout << " in file: " << __FILE__ << " line#: " << __LINE__ << std::endl; \
63 throw pandora::StatusCodeException(statusCode); \
72#define STATUS_CODE_TABLE(d) \
73 d(STATUS_CODE_SUCCESS, "STATUS_CODE_SUCCESS" ) \
74 d(STATUS_CODE_FAILURE, "STATUS_CODE_FAILURE" ) \
75 d(STATUS_CODE_NOT_FOUND, "STATUS_CODE_NOT_FOUND" ) \
76 d(STATUS_CODE_NOT_INITIALIZED, "STATUS_CODE_NOT_INITIALIZED" ) \
77 d(STATUS_CODE_ALREADY_INITIALIZED, "STATUS_CODE_ALREADY_INITIALIZED" ) \
78 d(STATUS_CODE_ALREADY_PRESENT, "STATUS_CODE_ALREADY_PRESENT" ) \
79 d(STATUS_CODE_OUT_OF_RANGE, "STATUS_CODE_OUT_OF_RANGE" ) \
80 d(STATUS_CODE_NOT_ALLOWED, "STATUS_CODE_NOT_ALLOWED" ) \
81 d(STATUS_CODE_INVALID_PARAMETER, "STATUS_CODE_INVALID_PARAMETER" ) \
82 d(STATUS_CODE_UNCHANGED, "STATUS_CODE_UNCHANGED" )
87#define GET_STATUS_CODE_ENUM_ENTRY(a, b) \
93#define GET_STATUS_CODE_NAME_SWITCH(a, b) \
162 m_statusCode(statusCode)
164#if defined(__GNUC__) && defined(BACKTRACE)
165 const size_t maxDepth = 100;
166 void *stackAddresses[maxDepth];
168 size_t stackDepth = backtrace(stackAddresses, maxDepth);
169 char **stackStrings = backtrace_symbols(stackAddresses, stackDepth);
173 for (
size_t i = 0; i < stackDepth; ++i)
218 default :
return "UNKNOWN";
#define GET_STATUS_CODE_ENUM_ENTRY(a, b)
The status code enum entry macro.
#define GET_STATUS_CODE_NAME_SWITCH(a, b)
The status code name switch statement macro.
#define STATUS_CODE_TABLE(d)
StatusCodeException class.
std::string m_backTrace
The back trace.
~StatusCodeException()
Constructor.
const StatusCode m_statusCode
The status code.
std::string ToString() const
Get status code as a string.
StatusCodeException(const StatusCode statusCode)
Constructor.
StatusCode GetStatusCode() const
Get status code.
const std::string & GetBackTrace() const
Get back trace at point of exception construction (gcc only)
std::string StatusCodeToString(const StatusCode statusCode)
Get status code as a string.
StatusCode
The StatusCode enum.