32 #include "../my_config.h"
41 #define E_END(passage, message) } catch(Egeneric & e) { e.stack(passage, message); throw; }
60 Egeneric(
const std::string &source,
const std::string &message);
67 virtual void stack(
const std::string & passage,
const std::string & message =
"") { pile.push_back(niveau(passage, message)); };
75 const std::string &
get_message()
const {
return pile.front().objet; };
78 const std::string &
get_source()
const {
return pile.front().lieu; };
84 const std::string &
find_object(
const std::string & location)
const;
93 virtual std::string exceptionID()
const = 0;
98 niveau(
const std::string &ou,
const std::string &quoi) { lieu = ou; objet = quoi; };
99 std::string lieu, objet;
102 std::list<niveau> pile;
104 static const std::string empty_string;
118 Ememory(
const std::string &source,
const std::string & message) :
Egeneric(source, message) {};
119 std::string exceptionID()
const {
return "MEMORY"; };
130 std::string exceptionID()
const {
return "SECU_MEMORY"; };
134 #define SRC_BUG Ebug(__FILE__, __LINE__)
135 #define XMT_BUG(exception, call) exception.stack(call, __FILE__, __LINE__)
141 Ebug(
const std::string &
file, S_I line);
143 void stack(
const std::string & passage,
const std::string & file,
const std::string & line);
146 std::string exceptionID()
const {
return "BUG"; };
156 Einfinint(
const std::string & source,
const std::string & message) :
Egeneric(source, message) {};
159 std::string exceptionID()
const {
return "INFININT"; };
169 Elimitint() :
Egeneric(
"",
dar_gettext(
"Cannot handle such a too large integer. Use a full version of libdar (compiled to rely on the \"infinint\" integer type) to solve this problem")) {};
172 std::string exceptionID()
const {
return "LIMITINT"; };
182 Erange(
const std::string & source,
const std::string & message) :
Egeneric(source, message) {};
185 std::string exceptionID()
const {
return "RANGE"; };
196 Edeci(
const std::string & source,
const std::string & message) :
Egeneric(source, message) {};
199 std::string exceptionID()
const {
return "DECI"; };
212 std::string exceptionID()
const {
return "UNIMPLEMENTED FEATURE"; };
222 Ehardware(
const std::string & source,
const std::string & message) :
Egeneric(source, message) {};
225 std::string exceptionID()
const {
return "HARDWARE ERROR"; };
238 std::string exceptionID()
const {
return "USER ABORTED OPERATION"; };
252 std::string exceptionID()
const {
return "ERROR IN TREATED DATA"; };
262 Escript(
const std::string & source,
const std::string & msg) :
Egeneric(source ,msg) {};
265 std::string exceptionID()
const {
return "USER ABORTED OPERATION"; };
275 Elibcall(
const std::string & source,
const std::string & msg) :
Egeneric(source ,msg) {};
278 std::string exceptionID()
const {
return "USER ABORTED OPERATION"; };
291 std::string exceptionID()
const {
return "FEATURE DISABLED AT COMPILATION TIME"; };
300 Ethread_cancel(
bool now, U_64 x_flag) :
Egeneric(
"", now ?
dar_gettext(
"Thread cancellation requested, aborting as soon as possible") :
dar_gettext(
"Thread cancellation requested, aborting as properly as possible")) { immediate = now; flag = x_flag; };
302 bool immediate_cancel()
const {
return immediate; };
303 U_64 get_flag()
const {
return flag; };
306 std::string exceptionID()
const {
return "THREAD CANCELLATION REQUESTED, ABORTING"; };