Program Listing for File errors.hpp

Return to documentation for file (/tmp/ws/src/ecl_lite/ecl_sigslots_lite/include/ecl/sigslots_lite/errors.hpp)

/*****************************************************************************
** Ifdefs
*****************************************************************************/

#ifndef ECL_SIGSLOTS_LITE_ERRORS_HPP_
#define ECL_SIGSLOTS_LITE_ERRORS_HPP_

/*****************************************************************************
** Namespaces
*****************************************************************************/

namespace ecl {
namespace lite {
namespace sigslots {

enum ErrorFlag {
    NoError = 0,
    UnknownError = -1,
    OutOfResourcesError = -21,
};

class Error {
public:
    Error(const sigslots::ErrorFlag& flag = UnknownError) : error_flag(flag) {}
    virtual sigslots::ErrorFlag flag() const { return error_flag; }
    virtual const char* what() const {
        switch (error_flag) {
            case (NoError) : { return noErrorString(); }
            case (OutOfResourcesError) : { return outOfResourcesErrorString(); }
            default : { return unknownErrorString(); }
        }
    }
private:
    const char* noErrorString() const { return "No error."; }
    const char* unknownErrorString() const { return "Unknown error."; }
    const char* outOfResourcesErrorString() const { return "You cannot add any more to this signal/slot interface (capacity is already fully utilised)."; }
    ErrorFlag error_flag;

};

} // namespace sigslots
} // namespace lite
} // namespace ecl

#endif /* ECL_SIGSLOTS_LITE_ERRORS_HPP_ */