1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-08-06 17:41:04 +00:00

Introduce std::string_view into wider use (#14368)

This commit is contained in:
sfan5 2024-02-17 15:35:33 +01:00 committed by GitHub
parent fa47af737f
commit 6ca214fefc
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
74 changed files with 501 additions and 456 deletions

View file

@ -1664,7 +1664,7 @@ Pointabilities read_pointabilities(lua_State *L, int index)
std::string name = luaL_checkstring(L, -2);
// handle groups
if(std::string_view(name).substr(0,6)=="group:") {
if (str_starts_with(name, "group:")) {
pointabilities.node_groups[name.substr(6)] = read_pointability_type(L, -1);
} else {
pointabilities.nodes[name] = read_pointability_type(L, -1);
@ -1685,7 +1685,7 @@ Pointabilities read_pointabilities(lua_State *L, int index)
std::string name = luaL_checkstring(L, -2);
// handle groups
if(std::string_view(name).substr(0,6)=="group:") {
if (str_starts_with(name, "group:")) {
pointabilities.object_groups[name.substr(6)] = read_pointability_type(L, -1);
} else {
pointabilities.objects[name] = read_pointability_type(L, -1);

View file

@ -25,6 +25,7 @@ extern "C" {
#include <cmath>
#include <irr_v2d.h>
#include <irr_v3d.h>
#include <string_view>
#include "c_converter.h"
#include "c_types.h"
@ -78,11 +79,16 @@ v3f LuaHelper::readParam(lua_State *L, int index)
}
template <>
std::string LuaHelper::readParam(lua_State *L, int index)
std::string_view LuaHelper::readParam(lua_State *L, int index)
{
size_t length;
std::string result;
const char *str = luaL_checklstring(L, index, &length);
result.assign(str, length);
return result;
return std::string_view(str, length);
}
template <>
std::string LuaHelper::readParam(lua_State *L, int index)
{
auto sv = readParam<std::string_view>(L, index);
return std::string(sv); // a copy
}

View file

@ -19,6 +19,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#pragma once
#include <string_view>
extern "C" {
#include <lua.h>
}
@ -27,23 +29,22 @@ class LuaHelper
{
protected:
/**
* Read a value using a template type T from Lua State L and index
*
* Read a value using a template type T from Lua state L at index
*
* @tparam T type to read from Lua
* @param L Lua state
* @param index Lua Index to read
* @param index Lua index to read
* @return read value from Lua
*/
template <typename T>
static T readParam(lua_State *L, int index);
/**
* Read a value using a template type T from Lua State L and index
* Read a value using a template type T from Lua state L at index
*
* @tparam T type to read from Lua
* @param L Lua state
* @param index Lua Index to read
* @param index Lua index to read
* @param default_value default value to apply if nil
* @return read value from Lua or default value if nil
*/
@ -53,3 +54,18 @@ protected:
return lua_isnoneornil(L, index) ? default_value : readParam<T>(L, index);
}
};
// (only declared for documentation purposes:)
/**
* Read a string from Lua state L at index without copying it.
*
* Note that the returned string view is only valid as long as the value is on
* the stack and has not been modified. Be careful.
*
* @param L Lua state
* @param index Lua index to read
* @return string view
*/
template <>
std::string_view LuaHelper::readParam(lua_State *L, int index);