ICU 4.8.1.1
4.8.1.1
|
Wrapper class for UErrorCode, with conversion operators for direct use in ICU C and C++ APIs. More...
#include <errorcode.h>
Public Member Functions | |
ErrorCode () | |
Default constructor. | |
virtual | ~ErrorCode () |
Destructor, does nothing. | |
operator UErrorCode & () | |
Conversion operator, returns a reference. | |
operator UErrorCode * () | |
Conversion operator, returns a pointer. | |
UBool | isSuccess () const |
Tests for U_SUCCESS(). | |
UBool | isFailure () const |
Tests for U_FAILURE(). | |
UErrorCode | get () const |
Returns the UErrorCode value. | |
void | set (UErrorCode value) |
Sets the UErrorCode value. | |
UErrorCode | reset () |
Returns the UErrorCode value and resets it to U_ZERO_ERROR. | |
void | assertSuccess () const |
Asserts isSuccess(). | |
const char * | errorName () const |
Return a string for the UErrorCode value. | |
Protected Member Functions | |
virtual void | handleFailure () const |
Called by assertSuccess() if isFailure() is true. | |
Protected Attributes | |
UErrorCode | errorCode |
Internal UErrorCode, accessible to subclasses. |
Wrapper class for UErrorCode, with conversion operators for direct use in ICU C and C++ APIs.
Intended to be used as a base class, where a subclass overrides the handleFailure() function so that it throws an exception, does an assert(), logs an error, etc. This is not an abstract base class. This class can be used and instantiated by itself, although it will be more useful when subclassed.
Features:
Note: For automatic checking for success in the destructor, a subclass must implement such logic in its own destructor because the base class destructor cannot call a subclass function (like handleFailure()). The ErrorCode base class destructor does nothing.
Note also: While it is possible for a destructor to throw an exception, it is generally unsafe to do so. This means that in a subclass the destructor and the handleFailure() function may need to take different actions.
Sample code:
class IcuErrorCode: public icu::ErrorCode { public: virtual ~IcuErrorCode() { // Safe because our handleFailure() does not throw exceptions. if(isFailure()) { handleFailure(); } } protected: virtual void handleFailure() const { log_failure(u_errorName(errorCode)); exit(errorCode); } }; IcuErrorCode error_code; UConverter *cnv = ucnv_open("Shift-JIS", error_code); length = ucnv_fromUChars(dest, capacity, src, length, error_code); ucnv_close(cnv); // IcuErrorCode destructor checks for success.
Definition at line 79 of file errorcode.h.
ErrorCode::ErrorCode | ( | ) | [inline] |
Default constructor.
Initializes its UErrorCode to U_ZERO_ERROR.
Definition at line 85 of file errorcode.h.
virtual ErrorCode::~ErrorCode | ( | ) | [inline, virtual] |
Destructor, does nothing.
See class documentation for details.
Definition at line 87 of file errorcode.h.
void ErrorCode::assertSuccess | ( | ) | const |
Asserts isSuccess().
In other words, this method checks for a failure code, and the base class handles it like this:
if(isFailure()) { handleFailure(); }
const char* ErrorCode::errorName | ( | ) | const |
Return a string for the UErrorCode value.
The string will be the same as the name of the error code constant in the UErrorCode enum.
UErrorCode ErrorCode::get | ( | ) | const [inline] |
virtual void ErrorCode::handleFailure | ( | ) | const [inline, protected, virtual] |
Called by assertSuccess() if isFailure() is true.
A subclass should override this function to deal with a failure code: Throw an exception, log an error, terminate the program, or similar.
Definition at line 132 of file errorcode.h.
UBool ErrorCode::isFailure | ( | ) | const [inline] |
Tests for U_FAILURE().
Definition at line 95 of file errorcode.h.
References U_FAILURE.
UBool ErrorCode::isSuccess | ( | ) | const [inline] |
Tests for U_SUCCESS().
Definition at line 93 of file errorcode.h.
References U_SUCCESS.
ErrorCode::operator UErrorCode & | ( | ) | [inline] |
ErrorCode::operator UErrorCode * | ( | ) | [inline] |
Returns the UErrorCode value and resets it to U_ZERO_ERROR.
void ErrorCode::set | ( | UErrorCode | value | ) | [inline] |
UErrorCode ErrorCode::errorCode [protected] |
Internal UErrorCode, accessible to subclasses.
Definition at line 125 of file errorcode.h.