forked from CoolProp/CoolProp
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathExceptions.h
75 lines (64 loc) · 2.15 KB
/
Exceptions.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#ifndef CPEXCEPTIONS_H
#define CPEXCEPTIONS_H
#include <exception>
#include <iostream>
namespace CoolProp {
class CoolPropBaseError : public std::exception
{
public:
enum ErrCode
{
eNotImplemented,
eSolution,
eAttribute,
eOutOfRange,
eValue,
eWrongFluid,
eComposition,
eInput,
eNotAvailable,
eHandle,
eKey,
eUnableToLoad,
eDirectorySize
};
CoolPropBaseError(const std::string& err, ErrCode code) throw() : m_code(code), m_err(err) {}
~CoolPropBaseError() throw(){};
virtual const char* what() const throw() {
return m_err.c_str();
}
ErrCode code() {
return m_code;
}
private:
ErrCode m_code;
std::string m_err;
};
template <CoolPropBaseError::ErrCode errcode>
class CoolPropError : public CoolPropBaseError
{
public:
CoolPropError(const std::string& err = "", ErrCode ecode = errcode) throw() : CoolPropBaseError(err, ecode) {}
};
typedef CoolPropError<CoolPropBaseError::eNotImplemented> NotImplementedError;
typedef CoolPropError<CoolPropBaseError::eSolution> SolutionError;
typedef CoolPropError<CoolPropBaseError::eAttribute> AttributeError;
typedef CoolPropError<CoolPropBaseError::eOutOfRange> OutOfRangeError;
typedef CoolPropError<CoolPropBaseError::eValue> ValueError;
typedef CoolPropError<CoolPropBaseError::eKey> KeyError;
typedef CoolPropError<CoolPropBaseError::eHandle> HandleError;
typedef CoolPropError<CoolPropBaseError::eUnableToLoad> UnableToLoadError;
typedef CoolPropError<CoolPropBaseError::eDirectorySize> DirectorySizeError;
// ValueError specializations
template <CoolPropBaseError::ErrCode errcode>
class ValueErrorSpec : public ValueError
{
public:
ValueErrorSpec(const std::string& err = "", ErrCode ecode = errcode) throw() : ValueError(err, ecode) {}
};
typedef ValueErrorSpec<CoolPropBaseError::eWrongFluid> WrongFluidError;
typedef ValueErrorSpec<CoolPropBaseError::eComposition> CompositionError;
typedef ValueErrorSpec<CoolPropBaseError::eInput> InputError;
typedef ValueErrorSpec<CoolPropBaseError::eNotAvailable> NotAvailableError;
}; /* namespace CoolProp */
#endif