From bf098ac96a887752f308cd9941de236a931dedc4 Mon Sep 17 00:00:00 2001 From: rexy712 Date: Sun, 19 Jul 2020 08:48:10 -0700 Subject: [PATCH] Add escape functionality to rjp++ --- rjp++/include/string.hpp | 3 +++ rjp++/src/string.cpp | 48 +++++++++++++++++++++++----------------- 2 files changed, 31 insertions(+), 20 deletions(-) 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); + } }