QuantLib: a free/open-source library for quantitative finance
Fully annotated sources - version 1.32
Loading...
Searching...
No Matches
errors.cpp
1/* -*- mode: c++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2
3/*
4 Copyright (C) 2003, 2004, 2005 StatPro Italia srl
5
6 This file is part of QuantLib, a free-software/open-source library
7 for financial quantitative analysts and developers - http://quantlib.org/
8
9 QuantLib is free software: you can redistribute it and/or modify it
10 under the terms of the QuantLib license. You should have received a
11 copy of the license along with this program; if not, please email
12 <quantlib-dev@lists.sf.net>. The license is also available online at
13 <http://quantlib.org/license.shtml>.
14
15 This program is distributed in the hope that it will be useful, but WITHOUT
16 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
17 FOR A PARTICULAR PURPOSE. See the license for more details.
18*/
19
20#include <ql/errors.hpp>
21#include <stdexcept>
22
23namespace {
24
25 #if defined(_MSC_VER) || defined(__BORLANDC__)
26 // allow Visual Studio integration
27 std::string format(
28 #ifdef QL_ERROR_LINES
29 const std::string& file, long line,
30 #else
31 const std::string&, long,
32 #endif
33 #ifdef QL_ERROR_FUNCTIONS
34 const std::string& function,
35 #else
36 const std::string&,
37 #endif
38 const std::string& message) {
39 std::ostringstream msg;
40 #ifdef QL_ERROR_FUNCTIONS
41 if (function != "(unknown)")
42 msg << function << ": ";
43 #endif
44 #ifdef QL_ERROR_LINES
45 msg << "\n " << file << "(" << line << "): \n";
46 #endif
47 msg << message;
48 return msg.str();
49 }
50 #else
51 // use gcc format (e.g. for integration with Emacs)
52 std::string format(const std::string& file, long line,
53 const std::string& function,
54 const std::string& message) {
55 std::ostringstream msg;
56 #ifdef QL_ERROR_LINES
57 msg << "\n" << file << ":" << line << ": ";
58 #endif
59 #ifdef QL_ERROR_FUNCTIONS
60 if (function != "(unknown)")
61 msg << "In function `" << function << "': \n";
62 #endif
63 msg << message;
64 return msg.str();
65 }
66 #endif
67
68}
69
70namespace boost {
71
72 // must be defined by the user
73 void assertion_failed(char const * expr, char const * function,
74 char const * file, long line) {
75 throw std::runtime_error(format(file, line, function,
76 "Boost assertion failed: " +
77 std::string(expr)));
78 }
79
80 void assertion_failed_msg(char const * expr, char const * msg,
81 char const * function, char const * file,
82 long line) {
83 throw std::runtime_error(format(file, line, function,
84 "Boost assertion failed: " +
85 std::string(expr) + ": " +
86 std::string(msg)));
87 }
88
89}
90
91namespace QuantLib {
92
93 Error::Error(const std::string& file, long line,
94 const std::string& function,
95 const std::string& message) {
96 message_ = ext::make_shared<std::string>(
97 format(file, line, function, message));
98 }
99
100 const char* Error::what() const noexcept { return message_->c_str(); }
101}
102
ext::shared_ptr< std::string > message_
Definition: errors.hpp:52
Error(const std::string &file, long line, const std::string &functionName, const std::string &message="")
Definition: errors.cpp:93
const char * what() const noexcept override
returns the error message.
Definition: errors.cpp:100
Definition: any.hpp:35
Definition: errors.cpp:70
void assertion_failed_msg(char const *expr, char const *msg, char const *function, char const *file, long line)
Definition: errors.cpp:80
void assertion_failed(char const *expr, char const *function, char const *file, long line)
Definition: errors.cpp:73