ed
src
error_context.cpp
Go to the documentation of this file.
1
#include "
ed/error_context.h
"
2
3
#include <pthread.h>
4
#include <
iostream
>
5
6
namespace
ed
7
{
8
9
// ----------------------------------------------------------------------------------------------------
10
11
namespace
12
{
13
14
void
dataDestructor(
void
* data)
15
{
16
ErrorContextData* edata =
static_cast<
ErrorContextData*
>
(
data
);
17
delete
edata;
18
}
19
20
struct
KeyHolder
21
{
22
23
KeyHolder() {
24
pthread_key_create(&key, &dataDestructor);
25
}
26
27
pthread_key_t key;
28
29
};
30
31
static
KeyHolder key;
32
33
}
34
35
// ----------------------------------------------------------------------------------------------------
36
37
ErrorContext::ErrorContext
(
const
char
* msg,
const
char
* value)
38
{
39
ErrorContextData
* _data =
data
();
40
if
(!_data)
41
{
42
_data =
new
ErrorContextData
;
43
pthread_setspecific(key.key, _data);
44
}
45
46
_data->
stack
.
push_back
(
std::pair<const char*, const char*>
(msg, value));
47
48
}
49
50
ErrorContext::~ErrorContext
()
51
{
52
ErrorContextData
* _data =
data
();
53
if
(!_data)
54
return
;
55
56
_data->
stack
.
pop_back
();
57
}
58
59
void
ErrorContext::change
(
const
char
* msg,
const
char
* value)
60
{
61
ErrorContextData
* _data =
data
();
62
_data->
stack
.
back
() =
std::pair<const char*, const char*>
(msg, value);
63
}
64
65
ErrorContextData
*
ErrorContext::data
()
66
{
67
return
static_cast<
ErrorContextData
*
>
(pthread_getspecific(key.key));
68
}
69
70
}
std::pair
ed::ErrorContextData
Definition:
error_context.h:9
ed::ErrorContext::data
static ErrorContextData * data()
Definition:
error_context.cpp:65
std::vector::back
T back(T... args)
iostream
std::vector::push_back
T push_back(T... args)
ed::ErrorContextData::stack
std::vector< std::pair< const char *, const char * > > stack
Definition:
error_context.h:11
std::vector::pop_back
T pop_back(T... args)
ed::ErrorContext::ErrorContext
ErrorContext(const char *msg, const char *value=0)
Definition:
error_context.cpp:37
error_context.h
ed
Definition:
convex_hull.h:8
std::data
T data(T... args)
ed::ErrorContext::~ErrorContext
~ErrorContext()
Definition:
error_context.cpp:50
ed::ErrorContext::change
void change(const char *msg, const char *value=0)
Definition:
error_context.cpp:59
Generated on Sun Feb 23 2025 04:34:40 for ed by
1.8.17