Unravel Engine C++ Reference
Loading...
Searching...
No Matches
serialization.cpp
Go to the documentation of this file.
1
#include "
serialization.h
"
2
#include <sstream>
3
4
namespace
serialization
5
{
6
namespace
7
{
8
auto
get_warning_logger() ->
log_callback_t
&
9
{
10
static
log_callback_t
logger;
11
return
logger;
12
}
13
14
// Path tracking implementation
15
thread_local
path_context
* current_path_context =
nullptr
;
16
17
}
// namespace
18
void
set_warning_logger
(
const
std::function<
void
(
const
std::string&,
const
hpp::source_location& loc)>& logger)
19
{
20
get_warning_logger() = logger;
21
}
22
void
log_warning
(
const
std::string& log_msg,
const
hpp::source_location& loc)
23
{
24
auto
& logger = get_warning_logger();
25
if
(logger)
26
logger(log_msg, loc);
27
}
28
29
auto
get_path_context
() ->
path_context
*
30
{
31
return
current_path_context;
32
}
33
34
void
set_path_context
(
path_context
* ctx)
35
{
36
current_path_context = ctx;
37
}
38
39
void
path_context::push_segment
(
const
std::string& segment,
bool
ignore_next)
40
{
41
if
(
recording_enabled
)
42
{
43
if
(!ignore_next)
44
{
45
if
(
ignore_next_push
)
46
{
47
ignore_next_push
=
false
;
48
}
49
else
50
{
51
path_segments
.push_back(segment);
52
}
53
}
54
}
55
}
56
57
void
path_context::pop_segment
()
58
{
59
if
(
recording_enabled
&& !
path_segments
.empty())
60
{
61
path_segments
.pop_back();
62
}
63
}
64
65
auto
path_context::get_current_path
() const ->
std
::
string
66
{
67
if
(
path_segments
.empty())
68
return
""
;
69
70
std::stringstream ss;
71
for
(
size_t
i = 0; i <
path_segments
.size(); ++i)
72
{
73
if
(i > 0)
74
ss <<
"/"
;
75
ss <<
path_segments
[i];
76
}
77
return
ss.str();
78
}
79
80
void
path_context::enable_recording
()
81
{
82
recording_enabled
=
true
;
83
}
84
85
void
path_context::disable_recording
()
86
{
87
recording_enabled
=
false
;
88
}
89
90
auto
path_context::is_recording
() const ->
bool
91
{
92
return
recording_enabled
;
93
}
94
95
void
path_context::clear
()
96
{
97
path_segments
.clear();
98
recording_enabled
=
false
;
99
}
100
101
path_segment_guard::path_segment_guard
(
const
std::string& segment,
bool
ignore_next_push)
102
{
103
auto
* ctx =
get_path_context
();
104
if
(ctx && ctx->is_recording())
105
{
106
ctx->push_segment(segment);
107
was_pushed_ =
true
;
108
}
109
}
110
111
path_segment_guard::~path_segment_guard
()
112
{
113
if
(was_pushed_)
114
{
115
auto
* ctx =
get_path_context
();
116
if
(ctx)
117
{
118
ctx->pop_segment();
119
}
120
}
121
}
122
123
auto
get_current_deserialization_path
() -> std::string
124
{
125
auto
* ctx =
get_path_context
();
126
if
(ctx && ctx->is_recording())
127
{
128
return
ctx->get_current_path();
129
}
130
return
""
;
131
}
132
133
}
// namespace serialization
serialization
Definition
serialization.cpp:5
serialization::log_warning
void log_warning(const std::string &log_msg, const hpp::source_location &loc)
Definition
serialization.cpp:22
serialization::get_current_deserialization_path
auto get_current_deserialization_path() -> std::string
Definition
serialization.cpp:123
serialization::log_callback_t
std::function< void(const std::string &, const hpp::source_location &loc)> log_callback_t
Definition
serialization.h:23
serialization::set_path_context
void set_path_context(path_context *ctx)
Definition
serialization.cpp:34
serialization::get_path_context
auto get_path_context() -> path_context *
Definition
serialization.cpp:29
serialization::set_warning_logger
void set_warning_logger(const std::function< void(const std::string &, const hpp::source_location &loc)> &logger)
Definition
serialization.cpp:18
std
Definition
render_view_keys.h:37
serialization.h
serialization::path_context
Definition
serialization.h:29
serialization::path_context::recording_enabled
bool recording_enabled
Definition
serialization.h:32
serialization::path_context::clear
void clear()
Definition
serialization.cpp:95
serialization::path_context::disable_recording
void disable_recording()
Definition
serialization.cpp:85
serialization::path_context::get_current_path
auto get_current_path() const -> std::string
Definition
serialization.cpp:65
serialization::path_context::push_segment
void push_segment(const std::string &segment, bool ignore_next=false)
Definition
serialization.cpp:39
serialization::path_context::pop_segment
void pop_segment()
Definition
serialization.cpp:57
serialization::path_context::enable_recording
void enable_recording()
Definition
serialization.cpp:80
serialization::path_context::is_recording
auto is_recording() const -> bool
Definition
serialization.cpp:90
serialization::path_context::ignore_next_push
bool ignore_next_push
Definition
serialization.h:33
serialization::path_context::path_segments
std::vector< std::string > path_segments
Definition
serialization.h:31
serialization::path_segment_guard::path_segment_guard
path_segment_guard(const std::string &segment, bool ignore_next_push=false)
Definition
serialization.cpp:101
serialization::path_segment_guard::~path_segment_guard
~path_segment_guard()
Definition
serialization.cpp:111
UnravelEngine
UnravelEngine
engine
core
serialization
serialization.cpp
Generated by
1.12.0