From f93042d7b940013b851da7334098ed9b92bbb2a9 Mon Sep 17 00:00:00 2001 From: Daniel Kolesa Date: Tue, 6 Apr 2021 01:10:49 +0200 Subject: [PATCH] add more utility methods for string_ref --- include/cubescript/cubescript/value.hh | 8 ++++++++ src/cs_state.cc | 4 ++-- src/cs_vm.cc | 2 +- src/lib_str.cc | 8 ++++---- 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/include/cubescript/cubescript/value.hh b/include/cubescript/cubescript/value.hh index 9ce13b4..c8cf17f 100644 --- a/include/cubescript/cubescript/value.hh +++ b/include/cubescript/cubescript/value.hh @@ -63,6 +63,14 @@ struct LIBCUBESCRIPT_EXPORT string_ref { return std::string_view{*this}.data(); } + std::string_view view() const { + return std::string_view{*this}; + } + + bool empty() const { + return (size() == 0); + } + bool operator==(string_ref const &s) const; private: diff --git a/src/cs_state.cc b/src/cs_state.cc index 0091da1..8c6a185 100644 --- a/src/cs_state.cc +++ b/src/cs_state.cc @@ -159,8 +159,8 @@ state::state(alloc_func func, void *data) { ) { auto *sv = args[0].get_ident()->get_svar(); if (args[2].get_integer() <= 1) { - auto val = std::string_view{sv->get_value()}; - if (val.find('"') == val.npos) { + auto val = sv->get_value(); + if (val.view().find('"') == std::string_view::npos) { std::printf("%s = \"%s\"\n", sv->get_name().data(), val.data()); } else { std::printf("%s = [%s]\n", sv->get_name().data(), val.data()); diff --git a/src/cs_vm.cc b/src/cs_vm.cc index d889c0a..f266845 100644 --- a/src/cs_vm.cc +++ b/src/cs_vm.cc @@ -128,7 +128,7 @@ void exec_command( args[i].set_none(); fakeargs++; } else if (args[i].get_type() == value_type::STRING) { - auto str = std::string_view{args[i].get_string()}; + auto str = args[i].get_string(); if (str.empty()) { args[i].set_integer(0); } else { diff --git a/src/lib_str.cc b/src/lib_str.cc index 2dc0dd3..8b7b16b 100644 --- a/src/lib_str.cc +++ b/src/lib_str.cc @@ -59,21 +59,21 @@ void init_lib_string(state &cs) { }); cs.new_command("strlower", "s", [](auto &ccs, auto args, auto &res) { - auto inps = std::string_view{args[0].get_string()}; + auto inps = args[0].get_string(); auto *ics = state_p{ccs}.ts().istate; auto *buf = ics->strman->alloc_buf(inps.size()); for (std::size_t i = 0; i < inps.size(); ++i) { - buf[i] = char(tolower(inps[i])); + buf[i] = char(tolower(inps.data()[i])); } res.set_string(ics->strman->steal(buf)); }); cs.new_command("strupper", "s", [](auto &ccs, auto args, auto &res) { - auto inps = std::string_view{args[0].get_string()}; + auto inps = args[0].get_string(); auto *ics = state_p{ccs}.ts().istate; auto *buf = ics->strman->alloc_buf(inps.size()); for (std::size_t i = 0; i < inps.size(); ++i) { - buf[i] = char(toupper(inps[i])); + buf[i] = char(toupper(inps.data()[i])); } res.set_string(ics->strman->steal(buf)); });