37 #ifndef VIGRA_ERROR_HXX
38 #define VIGRA_ERROR_HXX
125 class ContractViolation :
public StdException
128 ContractViolation(
char const * prefix,
char const * message,
129 char const * file,
int line)
131 sprintf(what_,
"\n%.30s\n%.900s\n(%.100s:%d)\n", prefix, message, file, line);
134 ContractViolation(
char const * prefix,
char const * message)
136 sprintf(what_,
"\n%.30s\n%.900s\n", prefix, message);
139 virtual const char * what()
const throw()
145 enum { bufsize_ = 1100 };
146 char what_[bufsize_];
149 class PreconditionViolation :
public ContractViolation
152 PreconditionViolation(
char const * message,
const char * file,
int line)
153 : ContractViolation(
"Precondition violation!", message, file, line)
156 PreconditionViolation(
char const * message)
157 : ContractViolation(
"Precondition violation!", message)
161 class PostconditionViolation :
public ContractViolation
164 PostconditionViolation(
char const * message,
const char * file,
int line)
165 : ContractViolation(
"Postcondition violation!", message, file, line)
168 PostconditionViolation(
char const * message)
169 : ContractViolation(
"Postcondition violation!", message)
173 class InvariantViolation :
public ContractViolation
176 InvariantViolation(
char const * message,
const char * file,
int line)
177 : ContractViolation(
"Invariant violation!", message, file, line)
180 InvariantViolation(
char const * message)
181 : ContractViolation(
"Invariant violation!", message)
188 void throw_invariant_error(
bool predicate,
char const * message,
char const * file,
int line)
191 throw vigra::InvariantViolation(message, file, line);
195 void throw_invariant_error(
bool predicate, std::string message,
char const * file,
int line)
198 throw vigra::InvariantViolation(message.c_str(), file, line);
202 void throw_precondition_error(
bool predicate,
char const * message,
char const * file,
int line)
205 throw vigra::PreconditionViolation(message, file, line);
209 void throw_precondition_error(
bool predicate, std::string message,
char const * file,
int line)
212 throw vigra::PreconditionViolation(message.c_str(), file, line);
216 void throw_postcondition_error(
bool predicate,
char const * message,
char const * file,
int line)
219 throw vigra::PostconditionViolation(message, file, line);
223 void throw_postcondition_error(
bool predicate, std::string message,
char const * file,
int line)
226 throw vigra::PostconditionViolation(message.c_str(), file, line);
230 void throw_runtime_error(
char const * message,
char const * file,
int line)
233 sprintf(what_,
"\n%.900s\n(%.100s:%d)\n", message, file, line);
234 throw std::runtime_error(what_);
238 void throw_runtime_error(std::string message,
char const * file,
int line)
241 sprintf(what_,
"\n%.900s\n(%.100s:%d)\n", message.c_str(), file, line);
242 throw std::runtime_error(what_);
245 #define vigra_precondition(PREDICATE, MESSAGE) vigra::throw_precondition_error((PREDICATE), MESSAGE, __FILE__, __LINE__)
247 #define vigra_assert(PREDICATE, MESSAGE) vigra_precondition(PREDICATE, MESSAGE)
249 #define vigra_postcondition(PREDICATE, MESSAGE) vigra::throw_postcondition_error((PREDICATE), MESSAGE, __FILE__, __LINE__)
251 #define vigra_invariant(PREDICATE, MESSAGE) vigra::throw_invariant_error((PREDICATE), MESSAGE, __FILE__, __LINE__)
253 #define vigra_fail(MESSAGE) vigra::throw_runtime_error(MESSAGE, __FILE__, __LINE__)
258 void throw_invariant_error(
bool predicate,
char const * message)
261 throw vigra::InvariantViolation(message);
265 void throw_precondition_error(
bool predicate,
char const * message)
268 throw vigra::PreconditionViolation(message);
272 void throw_postcondition_error(
bool predicate,
char const * message)
275 throw vigra::PostconditionViolation(message);
279 void throw_invariant_error(
bool predicate, std::string message)
282 throw vigra::InvariantViolation(message.c_str());
286 void throw_precondition_error(
bool predicate, std::string message)
289 throw vigra::PreconditionViolation(message.c_str());
293 void throw_postcondition_error(
bool predicate, std::string message)
296 throw vigra::PostconditionViolation(message.c_str());
299 #define vigra_precondition(PREDICATE, MESSAGE) vigra::throw_precondition_error((PREDICATE), MESSAGE)
301 #define vigra_assert(PREDICATE, MESSAGE)
303 #define vigra_postcondition(PREDICATE, MESSAGE) vigra::throw_postcondition_error((PREDICATE), MESSAGE)
305 #define vigra_invariant(PREDICATE, MESSAGE) vigra::throw_invariant_error((PREDICATE), MESSAGE)
307 #define vigra_fail(MESSAGE) throw std::runtime_error(MESSAGE)
313 #endif // VIGRA_ERROR_HXX