jle_cpp_tk
0.0 2015-04-03 sh1:"d699093732dd5f321606d0ff7a6b63b229f1922c"
A small, safe, selft contained, soft-realtime C++ toolkit
Main Page
Namespaces
Classes
Files
Examples
File List
int_div0.h
1
#ifndef JLE_INT_DIV0__H
2
#define JLE_INT_DIV0__H
3
4
5
#include <signal.h>
6
#include <setjmp.h>
7
#include <string.h>
// memcpy
8
9
11
12
13
14
namespace
jle
{
15
16
17
#ifdef _WIN32
18
19
#define JLE_HANDLE_DIV0_INIT \
20
{ \
21
jle::init_handle_signal_FPE_intdiv0(); \
22
if (setjmp(jle::env_jmp_div0)!=0) \
23
{ \
24
throw std::runtime_error("SIGNAL FPE probably int div0"); \
25
} \
26
else \
27
{
28
29
#define JLE_HANDLE_DIV0_INIT_A(__A__) \
30
{ \
31
jmp_buf previus_env_jmp_div0##__A__; \
32
memcpy(previus_env_jmp_div0##__A__, jle::env_jmp_div0, sizeof(jmp_buf)); \
33
bool previus_init_jump_div0##__A__ = jle::init_jump_div0; \
34
jle::init_jump_div0 = true; \
35
jle::init_handle_signal_FPE_intdiv0(); \
36
if (setjmp(jle::env_jmp_div0)!=0) \
37
{ \
38
memcpy(jle::env_jmp_div0, previus_env_jmp_div0##__A__, sizeof(jmp_buf)); \
39
jle::init_jump_div0 = previus_init_jump_div0##__A__; \
40
throw std::runtime_error("SIGNAL FPE probably int div0"); \
41
} \
42
else \
43
{
44
45
#elif __linux__
46
#define JLE_HANDLE_DIV0_INIT \
47
{ \
48
jle::init_handle_signal_FPE_intdiv0(); \
49
if (sigsetjmp(jle::env_jmp_div0, 1)!=0) \
50
{ \
51
throw std::runtime_error("SIGNAL FPE probably int div0"); \
52
} \
53
else \
54
{
55
56
#define JLE_HANDLE_DIV0_INIT_A(__A__) \
57
{ \
58
jmp_buf previus_env_jmp_div0##__A__; \
59
memcpy(previus_env_jmp_div0##__A__, jle::env_jmp_div0, sizeof(jmp_buf)); \
60
bool previus_init_jump_div0##__A__ = jle::init_jump_div0; \
61
jle::init_jump_div0 = true; \
62
jle::init_handle_signal_FPE_intdiv0(); \
63
if (sigsetjmp(jle::env_jmp_div0, 1)!=0) \
64
{ \
65
memcpy(jle::env_jmp_div0, previus_env_jmp_div0##__A__, sizeof(jmp_buf)); \
66
jle::init_jump_div0 = previus_init_jump_div0##__A__; \
67
throw std::runtime_error("SIGNAL FPE probably int div0"); \
68
} \
69
else \
70
{
71
72
#else
73
#error "Unknown platfom..."
74
#endif
75
76
77
#define JLE_HANDLE_DIV0_END \
78
} \
79
}
80
81
82
#define JLE_HANDLE_DIV0_END_A(__A__) \
83
} \
84
memcpy(jle::env_jmp_div0, previus_env_jmp_div0##__A__, sizeof(jmp_buf)); \
85
jle::init_jump_div0 = previus_init_jump_div0##__A__; \
86
}
87
88
89
90
// Using JLE_HANDLE_DIV0 doesn't require to call this function
91
// it is called by such macro
92
void
init_handle_signal_FPE_intdiv0 (
void
);
93
extern
jmp_buf env_jmp_div0;
94
extern
bool
init_jump_div0;
95
96
97
98
99
100
101
};
// end namespace jle
102
103
#endif // JLE_INT_DIV0__H
104
jle
generic namespace
Definition:
alarm.cpp:12
src
core
int_div0.h
Generated on Wed Mar 16 2016 20:34:38 for jle_cpp_tk by
1.8.11