diff --git a/rjp++/include/string.hpp b/rjp++/include/string.hpp index 09f2259..dda7dde 100644 --- a/rjp++/include/string.hpp +++ b/rjp++/include/string.hpp @@ -47,6 +47,9 @@ namespace rjp{ string& operator=(RJP_value* r); }; + string escape(const rexy::string_base& str); + string escape(const char* c); + } #endif diff --git a/rjp++/src/string.cpp b/rjp++/src/string.cpp index 11b2c4f..e7a0cc1 100644 --- a/rjp++/src/string.cpp +++ b/rjp++/src/string.cpp @@ -23,27 +23,35 @@ namespace rjp{ - string::string(RJP_value* r): - rexy::string_intermediary(rexy::steal(r ? rjp_get_string(r)->value : nullptr), - r ? rjp_get_string(r)->length : 0, - r ? rjp_get_string(r)->length : 0) - { - if(r){ - RJP_string* str = rjp_get_string(r); - str->value = nullptr; - str->length = 0; - rjp_set_null(r); - } - } - string& string::operator=(RJP_value* r){ - if(!r) - return *this; - reset(); + string::string(RJP_value* r): + rexy::string_intermediary(rexy::steal(r ? rjp_get_string(r)->value : nullptr), + r ? rjp_get_string(r)->length : 0, + r ? rjp_get_string(r)->length : 0) + { + if(r){ RJP_string* str = rjp_get_string(r); - m_data = std::exchange(str->value, nullptr); - m_length = str->length; - m_cap = str->length; + str->value = nullptr; str->length = 0; - return *this; + rjp_set_null(r); } + } + string& string::operator=(RJP_value* r){ + if(!r) + return *this; + reset(); + RJP_string* str = rjp_get_string(r); + m_data = std::exchange(str->value, nullptr); + m_length = str->length; + m_cap = str->length; + str->length = 0; + return *this; + } + + string escape(const rexy::string_base& str){ + return escape(str.c_str()); + } + string escape(const char* c){ + RJP_string tmp = rjp_escape(c); + return string(rexy::steal(tmp.value), tmp.length); + } }