-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathGSException.h
158 lines (145 loc) · 5.19 KB
/
GSException.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
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
/*
Copyright (c) 2017 TOSHIBA Digital Solutions Corporation.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
#ifndef _GS_EXXCEPTION_H_
#define _GS_EXXCEPTION_H_
#include <exception>
#include <string>
#include "gridstore.h"
using namespace std;
#define DEFAULT_ERROR_CODE -1
namespace griddb {
/**
* This class creates exception corresponding to error code
*/
class GSException : public exception {
private:
bool mIsTimeout;
int32_t mCode;
string mMessage;
void *mResource;
public:
GSException(int32_t code) : exception(), mCode(code), mResource(NULL) {
mMessage = "Error with number " + to_string((long long int)mCode);
if (mCode != DEFAULT_ERROR_CODE) {
//Case exception with error code.
mIsTimeout = gsIsTimeoutError(mCode);
}
else {
mIsTimeout = false;
}
}
GSException(const char* message) : exception(),
mCode(DEFAULT_ERROR_CODE), mMessage(message), mResource(NULL) {
if (mCode != DEFAULT_ERROR_CODE) {
//Case exception with error code.
mIsTimeout = gsIsTimeoutError(mCode);
}
else {
mIsTimeout = false;
}
}
GSException(void *resource, const char* message) : exception(),
mCode(DEFAULT_ERROR_CODE), mMessage(message), mResource(resource) {
if (mCode != DEFAULT_ERROR_CODE) {
//Case exception with error code.
mIsTimeout = gsIsTimeoutError(mCode);
}
else {
mIsTimeout = false;
}
}
GSException(void *resource, int32_t code) : exception(),
mCode(code), mResource(resource) {
mMessage = "Error with number " + to_string((long long int)mCode);
if (mCode != DEFAULT_ERROR_CODE) {
//Case exception with error code.
mIsTimeout = gsIsTimeoutError(mCode);
}
else {
mIsTimeout = false;
}
}
GSException(int32_t code, const char* message) : exception(),
mCode(code), mMessage(message), mResource(NULL) {
if (mCode != DEFAULT_ERROR_CODE) {
//Case exception with error code.
mIsTimeout = gsIsTimeoutError(mCode);
}
else {
mIsTimeout = false;
}
}
GSException(void *resource, int32_t code, const char* message) : exception(),
mCode(code), mMessage(message), mResource(resource) {
if (mCode != DEFAULT_ERROR_CODE) {
//Case exception with error code.
mIsTimeout = gsIsTimeoutError(mCode);
}
else {
mIsTimeout = false;
}
}
GSException(const GSException* exception) {
mCode = exception->mCode;
mIsTimeout = exception->mIsTimeout;
mMessage = exception->mMessage;
mResource = exception->mResource;
}
~GSException() throw() {}
int32_t get_code() {
return mCode;
}
virtual const char* what() const throw() {
return mMessage.c_str();
}
/*
* Check timeout. Convert from C-API: gsIsTimeoutError
*/
bool is_timeout() {
return mIsTimeout;
}
/**
* Get error stack size. Convert from C-API: gsGetErrorStackSize.
*/
size_t get_error_stack_size() {
return gsGetErrorStackSize(mResource);
}
/**
* Get error code. Convert from C-API: gsGetErrorCode.
*/
GSResult get_error_code(size_t stack_index) {
return gsGetErrorCode(mResource, stack_index);
}
/**
* Get error message. Convert from C-API: gsFormatErrorMessage.
*/
string get_message(size_t stack_index, size_t buf_size = 1024) {
char* strBuf = new char[buf_size];
size_t stringSize = gsFormatErrorMessage(mResource, stack_index, strBuf, buf_size);
string ret(strBuf, stringSize);
delete [] strBuf;
return ret;
}
/**
* Get error location. Convert from C-API: gsFormatErrorLocation.
*/
string get_location(size_t stack_index, size_t buf_size = 1024) {
char* strBuf = new char[buf_size];
size_t stringSize = gsFormatErrorLocation(mResource, stack_index, strBuf, buf_size);
string ret(strBuf, stringSize);
delete [] strBuf;
return ret;
}
};
} /* namespace griddb */
#endif