add more utility methods for string_ref

master
Daniel Kolesa 2021-04-06 01:10:49 +02:00
parent e531ab3434
commit f93042d7b9
4 changed files with 15 additions and 7 deletions

View File

@ -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:

View File

@ -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());

View File

@ -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 {

View File

@ -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));
});