-
Notifications
You must be signed in to change notification settings - Fork 0
/
Exception.h
67 lines (59 loc) · 1.54 KB
/
Exception.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
#pragma once
#include <exception>
#include <string>
namespace Wex
{
class Exception : public std::exception
{
public:
Exception() = default;
Exception(
const std::string& file,
int line,
const std::string& whenCompiled,
const std::string& whenModified,
const std::string& function,
const std::string& location,
int errorCode,
const std::string& description);
Exception(const Exception& rhs) = default;
~Exception() noexcept(true) = default;
Exception& operator=(const Exception& rhs) = default;
const char* what() const noexcept(true) override;
const std::string& GetFile() const;
int GetLine() const;
const std::string& GetWhenCompiled() const;
const std::string& GetWhenModified() const;
const std::string& GetFunction() const;
const std::string& GetLocation() const;
int GetErrorCode() const;
const std::string& GetDescription() const;
const std::string& GetFullDescription() const;
private:
friend class ExceptionTest;
std::string file;
int line = 0;
std::string whenCompiled;
std::string whenModified;
std::string function;
std::string location;
int errorCode = 0;
std::string description;
std::string fullDescription;
};
}
#define ThrowException(location, errorCode, description) \
throw Wex::Exception \
{ \
__FILE__, \
__LINE__, \
__DATE__ " " __TIME__, \
__TIMESTAMP__, \
__PRETTY_FUNCTION__, \
location, \
errorCode, \
description \
}
#define CheckError(isError, errorCode, description) \
if (isError) \
ThrowException(#isError, errorCode, description);