2 #ifndef WIBBLE_EXCEPTION_H 3 #define WIBBLE_EXCEPTION_H 109 static std::vector< std::string > &
context() {
112 s_context =
new std::vector< std::string >();
116 template<
typename O >
118 std::copy( context().
begin(), context().
end(), out );
126 context().push_back( s );
130 assert_eq( context().back(), m_context );
131 context().pop_back();
153 void addContext(
const std::string& c)
throw () { m_context.push_back(c); }
156 if (m_context.empty())
157 return "no context information available";
159 std::stringstream res;
160 std::copy( m_context.begin(), m_context.end(),
161 std::ostream_iterator< std::string >( res,
", \n " ) );
162 std::string r = res.str();
163 return std::string( r, 0, r.length() - 7 );
166 const std::vector<std::string>&
context()
const throw ()
190 virtual const char*
type()
const throw () {
return "Generic"; }
193 virtual std::string
desc()
const throw ()
195 return "an unspecified problem happened; if you see this message, please report a bug to the maintainer";
205 virtual const std::string&
fullInfo()
const throw ()
207 if (m_formatted.empty())
208 m_formatted = desc() +
". Context:\n " 213 virtual const char*
what()
const throw () {
return fullInfo().c_str(); }
230 virtual const char*
type()
const throw () {
return "Interrupted"; }
247 virtual const char*
type()
const throw () {
return "WaitInterrupted"; }
259 Consistency(
const std::string& context,
const std::string& error = std::string()) throw () :
260 Generic(context), m_error(error) {}
263 virtual const char*
type()
const throw () {
return "Consistency"; }
265 virtual std::string
desc()
const throw ()
268 return "consistency check failed";
279 virtual std::string
typeinfo()
const throw() {
return "unknown types"; }
280 virtual std::string
desc()
const throw() {
281 return std::string(
"bad cast: " ) + typeinfo();
286 template<
typename From,
typename To >
289 BadCastExt(
const std::string &error = std::string() ) throw()
293 virtual std::string
typeinfo()
const throw() {
return std::string(
"from " )
294 +
typeid( From ).name()
296 +
typeid( To ).name(); }
315 OutOfRange(
const std::string& var_desc,
const std::string& context)
throw ()
319 virtual const char*
type()
const throw () {
return "OutOfRange"; }
322 virtual std::string
var_desc()
const throw () {
return m_var_desc; }
324 virtual std::string
desc()
const throw () {
return m_var_desc +
" out of range"; }
356 const std::string& context)
throw ()
358 m_val(val), m_inf(inf), m_sup(sup) {}
362 virtual C val()
const throw () {
return m_val; }
365 virtual C
inf()
const throw () {
return m_inf; }
367 virtual C
sup()
const throw () {
return m_sup; }
370 virtual const char*
type()
const throw ()
372 return "ValOutOfRange<>";
375 virtual std::string desc()
const throw ();
402 System(
const std::string& context)
throw ();
403 System(
int code,
const std::string& context)
throw ();
405 virtual const char*
type()
const throw () {
return "System"; }
408 virtual int code()
const throw () {
return m_errno; }
411 virtual std::string desc()
const throw ();
426 File(
const std::string& name,
const std::string& context)
throw () :
427 System(context), m_name(name) {}
430 virtual const char*
type()
const throw () {
return "File"; }
int m_errno
Definition: exception.h:399
void(* old)()
Definition: exception.h:99
Store context information for an exception.
Definition: exception.h:136
Base class for exceptions for file I/O.
Definition: exception.h:420
static std::vector< std::string > & context()
Definition: exception.h:109
virtual std::string var_desc() const
Get a short description of the variable that has been checked.
Definition: exception.h:322
C m_sup
Definition: exception.h:349
~OutOfRange()
Definition: exception.h:317
virtual std::string desc() const
Get a string describing what happened that threw the exception.
Definition: exception.h:280
virtual const char * what() const
Definition: exception.h:213
virtual ~Generic()
Definition: exception.h:187
static void copyContext(O out)
Definition: exception.h:117
~Consistency()
Definition: exception.h:261
ValOutOfRange(const std::string &var_desc, C val, C inf, C sup, const std::string &context)
Construct the exception; minBound and maxBound are the bounds of the valid index range (inclusive)...
Definition: exception.h:355
Generic()
Definition: exception.h:185
Exception thrown when some consistency check fails.
Definition: exception.h:254
virtual std::string typeinfo() const
Definition: exception.h:293
virtual std::string desc() const
Get the description of the error code.
virtual const char * type() const
Get a string tag identifying the exception type.
Definition: exception.h:405
virtual std::string desc() const
Get a string describing what happened that threw the exception.
Definition: exception.h:324
virtual const char * type() const
Get a string tag identifying the exception type.
Definition: exception.h:319
virtual C sup() const
Get the maximum allowed value for this index.
Definition: exception.h:367
BadCast(const std::string &context)
Definition: exception.h:275
Exception thrown when index checking fails.
Definition: exception.h:344
Base class for all exceptions.
Definition: exception.h:179
ListIterator< List > begin(List l)
Definition: list.h:420
#define assert_eq(x, y)
Definition: test.h:33
Context()
Definition: exception.h:142
virtual C inf() const
Get the minimum allowed value for this index.
Definition: exception.h:365
Definition: exception.h:273
virtual std::string typeinfo() const
Definition: exception.h:279
std::string m_context
Definition: exception.h:121
~File()
Definition: exception.h:428
Exception thrown when some long event is interrupted by an external event (like a system call being i...
Definition: exception.h:224
Exception thrown when some system wait is interrupted by a signal.
Definition: exception.h:241
Consistency(const std::string &context, const std::string &error=std::string())
Definition: exception.h:259
std::string m_formatted
Definition: exception.h:182
static std::vector< std::string > * s_context
Definition: exception.h:107
virtual const char * type() const
Get a string tag identifying the exception type.
Definition: exception.h:230
~AddContext()
Definition: exception.h:129
virtual const char * type() const
Get a string tag identifying the exception type.
Definition: exception.h:370
virtual int code() const
Get the system error code associated to the exception.
Definition: exception.h:408
Interrupted()
Definition: exception.h:227
virtual const char * type() const
Get a string tag identifying the exception type.
Definition: exception.h:263
AddContext(std::string s)
Definition: exception.h:123
virtual std::string desc() const
Get a string describing what happened that threw the exception.
Definition: exception.h:193
Install an unexpected handler for the duration of its scope.
Definition: exception.h:96
Interrupted(const std::string &context)
Definition: exception.h:228
const std::vector< std::string > & context() const
Definition: exception.h:166
void DefaultUnexpected()
Basic unexpected handler.
Definition: exception.cpp:69
WaitInterrupted(const std::string &context)
Definition: exception.h:244
virtual const char * type() const
Get a string tag identifying the exception type.
Definition: exception.h:190
C m_val
Definition: exception.h:347
File(const std::string &name, const std::string &context)
Definition: exception.h:426
C m_inf
Definition: exception.h:348
virtual const char * type() const
Get a string tag identifying the exception type.
Definition: exception.h:430
~BadCastExt()
Definition: exception.h:292
Context(const std::string &context)
Definition: exception.h:147
virtual const std::string & fullInfo() const
Format in a string all available information about the exception.
Definition: exception.h:205
Exception thrown when some value is out of range.
Definition: exception.h:309
std::string m_name
Definition: exception.h:423
std::string formatContext() const
Definition: exception.h:154
Definition: exception.h:106
InstallUnexpected(void(*func)()=DefaultUnexpected)
Definition: exception.cpp:76
virtual std::string desc() const
Get the description of the error code.
Definition: exception.h:432
OutOfRange(const std::string &var_desc, const std::string &context)
Definition: exception.h:315
std::vector< std::string > m_context
Definition: exception.h:139
~BadCast()
Definition: exception.h:278
virtual std::string desc() const
Get a string describing what happened that threw the exception.
Definition: exception.h:265
Generic(const std::string &context)
Definition: exception.h:186
BadCastExt(const std::string &error=std::string())
Definition: exception.h:289
std::string m_var_desc
Definition: exception.h:312
ListIterator< List > end(List)
Definition: list.h:425
~InstallUnexpected()
Definition: exception.cpp:81
Definition: exception.h:287
void addContext(const std::string &c)
Definition: exception.h:153
Base class for system exceptions.
Definition: exception.h:396
virtual const char * type() const
Get a string tag identifying the exception type.
Definition: exception.h:247