Add escape functionality to rjp++

This commit is contained in:
rexy712 2020-07-19 08:48:10 -07:00
parent ad2138ba5d
commit bf098ac96a
2 changed files with 31 additions and 20 deletions

View File

@ -47,6 +47,9 @@ namespace rjp{
string& operator=(RJP_value* r); string& operator=(RJP_value* r);
}; };
string escape(const rexy::string_base& str);
string escape(const char* c);
} }
#endif #endif

View File

@ -23,27 +23,35 @@
namespace rjp{ namespace rjp{
string::string(RJP_value* r): string::string(RJP_value* r):
rexy::string_intermediary<detail::allocator>(rexy::steal(r ? rjp_get_string(r)->value : nullptr), rexy::string_intermediary<detail::allocator>(rexy::steal(r ? rjp_get_string(r)->value : nullptr),
r ? rjp_get_string(r)->length : 0, r ? rjp_get_string(r)->length : 0,
r ? rjp_get_string(r)->length : 0) r ? rjp_get_string(r)->length : 0)
{ {
if(r){ 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();
RJP_string* str = rjp_get_string(r); RJP_string* str = rjp_get_string(r);
m_data = std::exchange(str->value, nullptr); str->value = nullptr;
m_length = str->length;
m_cap = str->length;
str->length = 0; 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<char*>(tmp.value), tmp.length);
}
} }