-
Notifications
You must be signed in to change notification settings - Fork 3
/
exceptions.h
141 lines (118 loc) · 2.68 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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
/*
* exceptions.h
*
* Created on: Sep. 27, 2020
* Author: shujianqian
*/
#ifndef EXCEPTIONS_H_
#define EXCEPTIONS_H_
#include <exception>
#include <string>
namespace format {
class missing_arg_error : public std::runtime_error
{
public:
missing_arg_error (std::string arg, std::string msg="Argument missing")
: std::runtime_error(msg)
{
arg_ = arg;
}
std::string arg() const { return arg_; }
private:
std::string arg_;
};
class open_file_error : public std::runtime_error
{
public:
open_file_error (std::string filename, std::string msg="Failed to open file")
: std::runtime_error(msg)
{
filename_ = filename;
}
std::string filename() const { return filename_; }
private:
std::string filename_;
};
class read_file_error : public open_file_error
{
public:
read_file_error (std::string filename, std::string msg="Failed to read file")
: open_file_error(filename, msg)
{}
};
class write_file_error : public open_file_error
{
public:
write_file_error (
std::string filename,
std::string msg="Failed to write to file"
)
: open_file_error(filename, msg)
{}
};
class mtx_error : public std::runtime_error
{
public:
mtx_error (std::string filename, std::string msg="Error loading matrix")
: std::runtime_error(msg)
{
filename_ = filename;
}
std::string filename() const { return filename_; }
private:
std::string filename_;
};
class mtx_header_error : public mtx_error
{
public:
mtx_header_error (
std::string filename="Unknown",
std::string msg="Invalid matrix header"
)
: mtx_error(filename, msg)
{}
};
class mtx_format_error : public mtx_error
{
public:
mtx_format_error
(
std::string expected_format,
std::string got_format,
std::string filename = "Unknown",
std::string msg = "Matrix format mismatch"
)
: mtx_error(filename, msg)
{
expected_format_ = expected_format;
got_format_ = got_format;
}
std::string expected_format() const { return expected_format_; }
std::string got_format() const { return got_format_; }
private:
std::string expected_format_;
std::string got_format_;
};
class mtx_arith_error : public mtx_error
{
public:
mtx_arith_error
(
std::string expected_arith,
std::string got_arith,
std::string filename="Unknown",
std::string msg="Matrix arithmetic mismatch"
)
: mtx_error(filename, msg)
{
expected_arith_ = expected_arith;
got_arith_ = got_arith;
}
std::string expected_arith() const { return expected_arith_; }
std::string got_arith() const { return got_arith_; }
private:
std::string expected_arith_;
std::string got_arith_;
};
} // namespace format
#endif /* EXCEPTIONS_H_ */