Reaktoro
A unified framework for modeling chemically reactive systems
Exception.hpp
1 // Reaktoro is a unified framework for modeling chemically reactive systems.
2 //
3 // Copyright (C) 2014-2018 Allan Leal
4 //
5 // This library is free software; you can redistribute it and/or
6 // modify it under the terms of the GNU Lesser General Public
7 // License as published by the Free Software Foundation; either
8 // version 2.1 of the License, or (at your option) any later version.
9 //
10 // This library is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 // Lesser General Public License for more details.
14 //
15 // You should have received a copy of the GNU Lesser General Public License
16 // along with this library. If not, see <http://www.gnu.org/licenses/>.
17 
18 #pragma once
19 
20 // C++ includes
21 #include <sstream>
22 #include <stdexcept>
23 #include <string>
24 
25 namespace Reaktoro {
26 
40 struct Exception
41 {
43  std::stringstream error;
44 
46  std::stringstream reason;
47 };
48 
49 namespace internal {
50 
57 std::string message(const Exception& exception, const std::string& file, int line);
58 
59 } // namespace internal
60 
64 #define RaiseError(exception) \
65  throw std::runtime_error(Reaktoro::internal::message(exception, __FILE__, __LINE__));
66 
70 #define RuntimeError(errorstr, reasonstr) \
71  { \
72  Reaktoro::Exception exception; \
73  exception.error << errorstr; \
74  exception.reason << reasonstr; \
75  RaiseError(exception); \
76  }
77 
81 #define Assert(condition, errorstr, reasonstr) \
82  { \
83  if(!(condition)) { \
84  Reaktoro::Exception exception; \
85  exception.error << errorstr; \
86  exception.reason << reasonstr; \
87  RaiseError(exception); \
88  } \
89  }
90 
91 } // namespace Reaktoro
std::stringstream reason
The reason message to be displayed when the exception is raised.
Definition: Exception.hpp:46
The namespace containing all components of the Reaktoro library.
Definition: ChemicalScalar.hpp:24
std::stringstream error
The error message to be displayed when the exception is raised.
Definition: Exception.hpp:43
Provides a convenient way to initialized an exception with helpful error messages.
Definition: Exception.hpp:41