@@ -46,18 +46,25 @@ void LogTypeDictionaryEntry::add_float_var () {
46
46
add_float_var (m_value);
47
47
}
48
48
49
+ void LogTypeDictionaryEntry::add_escape_var () {
50
+ m_var_positions.push_back (m_value.length ());
51
+ add_escape_var (m_value);
52
+ }
53
+
49
54
bool LogTypeDictionaryEntry::parse_next_var (const string& msg, size_t & var_begin_pos, size_t & var_end_pos, string& var) {
50
55
auto last_var_end_pos = var_end_pos;
51
56
if (ir::get_bounds_of_next_var (msg, var_begin_pos, var_end_pos)) {
52
57
// Append to log type: from end of last variable to start of current variable
53
- add_constant (msg, last_var_end_pos, var_begin_pos - last_var_end_pos);
58
+ auto constant = std::string_view (msg).substr (last_var_end_pos, var_begin_pos - last_var_end_pos);
59
+ ir::escape_and_append_constant_to_logtype (constant, m_value);
54
60
55
61
var.assign (msg, var_begin_pos, var_end_pos - var_begin_pos);
56
62
return true ;
57
63
}
58
64
if (last_var_end_pos < msg.length ()) {
59
65
// Append to log type: from end of last variable to end
60
- add_constant (msg, last_var_end_pos, msg.length () - last_var_end_pos);
66
+ auto constant = std::string_view (msg).substr (last_var_end_pos, msg.length () - last_var_end_pos);
67
+ ir::escape_and_append_constant_to_logtype (constant, m_value);
61
68
}
62
69
63
70
return false ;
@@ -71,10 +78,8 @@ void LogTypeDictionaryEntry::clear () {
71
78
void LogTypeDictionaryEntry::write_to_file (streaming_compression::Compressor& compressor) const {
72
79
compressor.write_numeric_value (m_id);
73
80
74
- string escaped_value;
75
- get_value_with_unfounded_variables_escaped (escaped_value);
76
- compressor.write_numeric_value <uint64_t >(escaped_value.length ());
77
- compressor.write_string (escaped_value);
81
+ compressor.write_numeric_value <uint64_t >(m_value.length ());
82
+ compressor.write_string (m_value);
78
83
}
79
84
80
85
ErrorCode LogTypeDictionaryEntry::try_read_from_file (streaming_compression::Decompressor& decompressor) {
@@ -109,6 +114,9 @@ ErrorCode LogTypeDictionaryEntry::try_read_from_file (streaming_compression::Dec
109
114
is_escaped = false ;
110
115
} else if (ir::cVariablePlaceholderEscapeCharacter == c) {
111
116
is_escaped = true ;
117
+ add_constant (constant, 0 , constant.length ());
118
+ constant.clear ();
119
+ add_escape_var ();
112
120
} else {
113
121
if (enum_to_underlying_type (ir::VariablePlaceholder::Integer) == c) {
114
122
add_constant (constant, 0 , constant.length ());
0 commit comments