Update to newer rexylib

This commit is contained in:
rexy712 2022-06-22 16:30:34 -07:00
parent 69fca74d3c
commit 25d7c6c0fc
10 changed files with 65 additions and 61 deletions

View File

@ -93,7 +93,7 @@ namespace rjp{
string_val add(const RJP_string&); string_val add(const RJP_string&);
string_val add(RJP_string&&); string_val add(RJP_string&&);
string_val add(const char*, RJP_index len = 0); string_val add(const char*, RJP_index len = 0);
string_val add(const rexy::string_base<char>&); string_val add(rexy::string_view);
string_val add(string&&); string_val add(string&&);
value& remove(value& val); value& remove(value& val);

View File

@ -75,13 +75,13 @@ namespace rjp{
object& operator=(object&&) = default; object& operator=(object&&) = default;
template<class Val> template<class Val>
member<std::decay_t<Val>> add(const rexy::string_view& key, typename std::decay_t<Val>::underlying_type t){ member<std::decay_t<Val>> add(rexy::string_view key, typename std::decay_t<Val>::underlying_type t){
RJP_value* newmem = add_member_impl(key); RJP_value* newmem = add_member_impl(key);
detail::set_to_underlying<std::decay_t<Val>>(newmem, t); detail::set_to_underlying<std::decay_t<Val>>(newmem, t);
return create_unmanaged(newmem); return create_unmanaged(newmem);
} }
template<class Val = null> template<class Val = null>
member<std::decay_t<Val>> add(const rexy::string_view& key){ member<std::decay_t<Val>> add(rexy::string_view key){
RJP_value* newmem = add_member_impl(key); RJP_value* newmem = add_member_impl(key);
if constexpr(std::is_same<std::decay_t<Val>,rjp::array>::value) if constexpr(std::is_same<std::decay_t<Val>,rjp::array>::value)
set_array_value(newmem); set_array_value(newmem);
@ -93,11 +93,11 @@ namespace rjp{
detail::set_to_underlying<std::decay_t<Val>>(newmem, 0); detail::set_to_underlying<std::decay_t<Val>>(newmem, 0);
return create_unmanaged(newmem); return create_unmanaged(newmem);
} }
member<string_val> add(const rexy::string_view& key, const RJP_string&); member<string_val> add(rexy::string_view key, const RJP_string&);
member<string_val> add(const rexy::string_view& key, RJP_string&&); member<string_val> add(rexy::string_view key, RJP_string&&);
member<string_val> add(const rexy::string_view& key, const char*, RJP_index len = 0); member<string_val> add(rexy::string_view key, const char*, RJP_index len = 0);
member<string_val> add(const rexy::string_view& key, const rexy::string_view&); member<string_val> add(rexy::string_view key, rexy::string_view);
member<string_val> add(const rexy::string_view& key, string&&); member<string_val> add(rexy::string_view key, string&&);
template<class Val> template<class Val>
member<std::decay_t<Val>> add(string&& key, typename std::decay_t<Val>::underlying_type t){ member<std::decay_t<Val>> add(string&& key, typename std::decay_t<Val>::underlying_type t){
@ -121,13 +121,13 @@ namespace rjp{
member<string_val> add(string&& key, const RJP_string&); member<string_val> add(string&& key, const RJP_string&);
member<string_val> add(string&& key, RJP_string&&); member<string_val> add(string&& key, RJP_string&&);
member<string_val> add(string&& key, const char*, RJP_index len = 0); member<string_val> add(string&& key, const char*, RJP_index len = 0);
member<string_val> add(string&& key, const rexy::string_view&); member<string_val> add(string&& key, rexy::string_view);
member<string_val> add(string&& key, string&&); member<string_val> add(string&& key, string&&);
value remove(const rexy::string_view& key); value remove(rexy::string_view key);
value& remove(value& val); value& remove(value& val);
void destroy(const rexy::string_view& key); void destroy(rexy::string_view key);
void destroy(value&& val); void destroy(value&& val);
bool has_child(const value&); bool has_child(const value&);
@ -142,10 +142,10 @@ namespace rjp{
size_type size(void)const; size_type size(void)const;
value search(const rexy::string_view& key)const; value search(rexy::string_view key)const;
private: private:
RJP_value* add_member_impl(const rexy::string_view& key); RJP_value* add_member_impl(rexy::string_view key);
RJP_value* add_member_impl(string&& key); RJP_value* add_member_impl(string&& key);
}; };

View File

@ -51,7 +51,7 @@ namespace rjp{
[[nodiscard]] [[nodiscard]]
string to_json(const value& val, int format = RJP_FORMAT_PRETTY); string to_json(const value& val, int format = RJP_FORMAT_PRETTY);
[[nodiscard]] [[nodiscard]]
parse_res parse_json(const rexy::string_base<char>& str, RJP_parse_flag = RJP_PARSE_NO_EXT); parse_res parse_json(rexy::string_view str, RJP_parse_flag = RJP_PARSE_NO_EXT);
[[nodiscard]] [[nodiscard]]
parse_res parse_json(const char* str, RJP_parse_flag = RJP_PARSE_NO_EXT); parse_res parse_json(const char* str, RJP_parse_flag = RJP_PARSE_NO_EXT);
namespace detail{ namespace detail{

View File

@ -32,13 +32,13 @@ namespace rjp{
using underlying_type = RJP_string; using underlying_type = RJP_string;
public: public:
using value::value; using value::value;
string_val(const rexy::string_view& str); string_val(rexy::string_view str);
string_val(string&& str); string_val(string&& str);
string_val(void); string_val(void);
string_val(const value& val); string_val(const value& val);
string_val(value&& val); string_val(value&& val);
string_val(const value& val, const rexy::string_base<char>& i); string_val(const value& val, rexy::string_view i);
string_val(value&& val, const rexy::string_base<char>& i); string_val(value&& val, rexy::string_view i);
string_val(const value& val, string&& i); string_val(const value& val, string&& i);
string_val(value&& val, string&& i); string_val(value&& val, string&& i);
@ -50,7 +50,7 @@ namespace rjp{
rexy::string_view get(void)const; rexy::string_view get(void)const;
string steal(void); string steal(void);
void set(const rexy::string_base<char>& str); void set(rexy::string_view str);
void set(string&& str); void set(string&& str);
}; };

View File

@ -55,8 +55,8 @@ namespace rjp{
rjp_set_string(newelem, c, len); rjp_set_string(newelem, c, len);
return string_val(create_unmanaged(newelem)); return string_val(create_unmanaged(newelem));
} }
string_val array::add(const rexy::string_base<char>& s){ string_val array::add(rexy::string_view s){
return add(s.get(), s.length()); return add(s.data(), s.length());
} }
string_val array::add(string&& s){ string_val array::add(string&& s){
RJP_value* newelem = rjp_new_element(m_value); RJP_value* newelem = rjp_new_element(m_value);

View File

@ -39,62 +39,62 @@ namespace rjp{
if(rjp_value_type(m_value) != rjp_json_object) if(rjp_value_type(m_value) != rjp_json_object)
rjp_set_object(m_value); rjp_set_object(m_value);
} }
member<string_val> object::add(const rexy::string_view& key, const RJP_string& s){ member<string_val> object::add(rexy::string_view key, const RJP_string& s){
RJP_value* newmem = rjp_new_member(m_value, key.get(), key.length()); RJP_value* newmem = rjp_new_member(m_value, key.data(), key.length());
rjp_set_string(newmem, s.value, s.length); rjp_set_string(newmem, s.value, s.length);
return create_unmanaged(newmem); return create_unmanaged(newmem);
} }
member<string_val> object::add(const rexy::string_view& key, RJP_string&& s){ member<string_val> object::add(rexy::string_view key, RJP_string&& s){
RJP_value* newmem = rjp_new_member(m_value, key.get(), key.length()); RJP_value* newmem = rjp_new_member(m_value, key.data(), key.length());
rjp_set_string_steal(newmem, s.value, s.length); rjp_set_string_steal(newmem, s.value, s.length);
return create_unmanaged(newmem); return create_unmanaged(newmem);
} }
member<string_val> object::add(const rexy::string_view& key, const char* s, RJP_index len){ member<string_val> object::add(rexy::string_view key, const char* s, RJP_index len){
RJP_value* newmem = rjp_new_member(m_value, key.get(), key.length()); RJP_value* newmem = rjp_new_member(m_value, key.data(), key.length());
rjp_set_string(newmem, s, len); rjp_set_string(newmem, s, len);
return create_unmanaged(newmem); return create_unmanaged(newmem);
} }
member<string_val> object::add(const rexy::string_view& key, const rexy::string_view& s){ member<string_val> object::add(rexy::string_view key, rexy::string_view s){
RJP_value* newmem = rjp_new_member(m_value, key.get(), key.length()); RJP_value* newmem = rjp_new_member(m_value, key.data(), key.length());
rjp_set_string(newmem, s.get(), s.length()); rjp_set_string(newmem, s.data(), s.length());
return create_unmanaged(newmem); return create_unmanaged(newmem);
} }
member<string_val> object::add(const rexy::string_view& key, string&& s){ member<string_val> object::add(rexy::string_view key, string&& s){
RJP_value* newmem = rjp_new_member(m_value, key.get(), key.length()); RJP_value* newmem = rjp_new_member(m_value, key.data(), key.length());
auto len = s.length(); auto len = s.length();
rjp_set_string_steal(newmem, s.release(), len); rjp_set_string_steal(newmem, s.release(), len);
return create_unmanaged(newmem); return create_unmanaged(newmem);
} }
member<string_val> object::add(string&& key, const RJP_string& s){ member<string_val> object::add(string&& key, const RJP_string& s){
RJP_value* newmem = rjp_new_member_steal_key(m_value, key.get(), key.length()); RJP_value* newmem = rjp_new_member_steal_key(m_value, key.data(), key.length());
rjp_set_string(newmem, s.value, s.length); rjp_set_string(newmem, s.value, s.length);
return create_unmanaged(newmem); return create_unmanaged(newmem);
} }
member<string_val> object::add(string&& key, RJP_string&& s){ member<string_val> object::add(string&& key, RJP_string&& s){
RJP_value* newmem = rjp_new_member_steal_key(m_value, key.get(), key.length()); RJP_value* newmem = rjp_new_member_steal_key(m_value, key.data(), key.length());
rjp_set_string_steal(newmem, s.value, s.length); rjp_set_string_steal(newmem, s.value, s.length);
return create_unmanaged(newmem); return create_unmanaged(newmem);
} }
member<string_val> object::add(string&& key, const char* s, RJP_index len){ member<string_val> object::add(string&& key, const char* s, RJP_index len){
RJP_value* newmem = rjp_new_member_steal_key(m_value, key.get(), key.length()); RJP_value* newmem = rjp_new_member_steal_key(m_value, key.data(), key.length());
rjp_set_string(newmem, s, len); rjp_set_string(newmem, s, len);
return create_unmanaged(newmem); return create_unmanaged(newmem);
} }
member<string_val> object::add(string&& key, const rexy::string_view& s){ member<string_val> object::add(string&& key, rexy::string_view s){
RJP_value* newmem = rjp_new_member_steal_key(m_value, key.get(), key.length()); RJP_value* newmem = rjp_new_member_steal_key(m_value, key.data(), key.length());
rjp_set_string(newmem, s.get(), s.length()); rjp_set_string(newmem, s.data(), s.length());
return create_unmanaged(newmem); return create_unmanaged(newmem);
} }
member<string_val> object::add(string&& key, string&& s){ member<string_val> object::add(string&& key, string&& s){
RJP_value* newmem = rjp_new_member_steal_key(m_value, key.get(), key.length()); RJP_value* newmem = rjp_new_member_steal_key(m_value, key.data(), key.length());
auto len = s.length(); auto len = s.length();
rjp_set_string_steal(newmem, s.release(), len); rjp_set_string_steal(newmem, s.release(), len);
return create_unmanaged(newmem); return create_unmanaged(newmem);
} }
value object::remove(const rexy::string_view& key){ value object::remove(rexy::string_view key){
RJP_value* removed = rjp_remove_member_by_key(m_value, key.get()); RJP_value* removed = rjp_remove_member_by_key(m_value, key.data());
return create_managed(removed); return create_managed(removed);
} }
value& object::remove(value& val){ value& object::remove(value& val){
@ -103,8 +103,8 @@ namespace rjp{
return val; return val;
} }
void object::destroy(const rexy::string_view& key){ void object::destroy(rexy::string_view key){
rjp_free_member_by_key(m_value, key.get()); rjp_free_member_by_key(m_value, key.data());
} }
void object::destroy(value&& val){ void object::destroy(value&& val){
rjp_free_member(m_value, val.raw()); rjp_free_member(m_value, val.raw());
@ -134,13 +134,13 @@ namespace rjp{
object::size_type object::size(void)const{ object::size_type object::size(void)const{
return rjp_num_members(m_value); return rjp_num_members(m_value);
} }
value object::search(const rexy::string_view& key)const{ value object::search(rexy::string_view key)const{
RJP_value* result = rjp_search_member(m_value, key.get()); RJP_value* result = rjp_search_member(m_value, key.data());
return create_unmanaged(result); return create_unmanaged(result);
} }
RJP_value* object::add_member_impl(const rexy::string_view& key){ RJP_value* object::add_member_impl(rexy::string_view key){
return rjp_new_member(m_value, key.get(), key.length()); return rjp_new_member(m_value, key.data(), key.length());
} }
RJP_value* object::add_member_impl(string&& key){ RJP_value* object::add_member_impl(string&& key){
auto length = key.length(); auto length = key.length();

View File

@ -57,8 +57,8 @@ namespace rjp{
s.reset(rjp_to_json(val.raw(), format)); s.reset(rjp_to_json(val.raw(), format));
return s; return s;
} }
parse_res parse_json(const rexy::string_base<char>& str, RJP_parse_flag flags){ parse_res parse_json(rexy::string_view str, RJP_parse_flag flags){
return parse_json(str.get(), flags); return parse_json(str.data(), flags);
} }
parse_res parse_json(const char* str, RJP_parse_flag flags){ parse_res parse_json(const char* str, RJP_parse_flag flags){
RJP_parse_error err = {}; RJP_parse_error err = {};

View File

@ -22,10 +22,12 @@
namespace rjp{ namespace rjp{
string_val::string_val(const rexy::string_view& str): using namespace rexy::str_literals;
value(rjp_new_string(str.get(), str.length()), true){}
string_val::string_val(rexy::string_view str):
value(rjp_new_string(str.data(), str.length()), true){}
string_val::string_val(string&& str): string_val::string_val(string&& str):
value(rjp_new_string_steal(str.get(), str.length()), true) value(rjp_new_string_steal(str.data(), str.length()), true)
{ {
str.release(); str.release();
} }
@ -47,15 +49,15 @@ namespace rjp{
if(rjp_value_type(m_value) != rjp_json_string) if(rjp_value_type(m_value) != rjp_json_string)
rjp_set_string(m_value, "", 0); rjp_set_string(m_value, "", 0);
} }
string_val::string_val(const value& val, const rexy::string_base<char>& i): string_val::string_val(const value& val, rexy::string_view i):
value(val) value(val)
{ {
rjp_set_string(m_value, i.get(), i.length()); rjp_set_string(m_value, i.data(), i.length());
} }
string_val::string_val(value&& val, const rexy::string_base<char>& i): string_val::string_val(value&& val, rexy::string_view i):
value(std::move(val)) value(std::move(val))
{ {
rjp_set_string(m_value, i.get(), i.length()); rjp_set_string(m_value, i.data(), i.length());
} }
string_val::string_val(const value& val, string&& i): string_val::string_val(const value& val, string&& i):
value(val) value(val)
@ -77,8 +79,8 @@ namespace rjp{
string string_val::steal(void){ string string_val::steal(void){
return string(m_value); return string(m_value);
} }
void string_val::set(const rexy::string_base<char>& str){ void string_val::set(rexy::string_view str){
rjp_set_string(m_value, str.get(), str.length()); rjp_set_string(m_value, str.data(), str.length());
} }
void string_val::set(string&& str){ void string_val::set(string&& str){
auto length = str.length(); auto length = str.length();

View File

@ -3,6 +3,8 @@
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
using namespace rexy::str_literals;
typedef struct{ typedef struct{
rjp::value (*create)(void); rjp::value (*create)(void);
const char* res; const char* res;
@ -337,17 +339,17 @@ static test_pair tests[] = {
int run_test(test_pair* p){ int run_test(test_pair* p){
rjp::value test = p->create(); rjp::value test = p->create();
rjp::string buf = test.to_json(p->fmt); rjp::string buf = test.to_json(p->fmt);
if(!buf){ if(buf.empty()){
if(!p->res) if(!p->res)
return 1; return 1;
return 0; return 0;
} }
int retval = !strcmp(buf, p->res); int retval = !strcmp(buf.c_str(), p->res);
if(retval){ if(retval){
fprintf(stderr, "Success\n"); fprintf(stderr, "Success\n");
}else{ }else{
fprintf(stderr, "Failure\n"); fprintf(stderr, "Failure\n");
fprintf(stderr, "Expected: '%s'\nGot: '%s'\n", p->res, buf.get()); fprintf(stderr, "Expected: '%s'\nGot: '%s'\n", p->res, buf.c_str());
} }
return retval; return retval;
} }

View File

@ -20,7 +20,7 @@ int handle_res(const rjp::parse_res& res){
if(res.valid()){ if(res.valid()){
fprintf(stderr, "Accepted\n"); fprintf(stderr, "Accepted\n");
}else{ }else{
fprintf(stderr, "%s\n", res.errstr().get()); fprintf(stderr, "%s\n", res.errstr().data());
} }
return !res.valid(); return !res.valid();
} }