From 470092dfe452172cba23a1466066c6beb765e33f Mon Sep 17 00:00:00 2001 From: Jochen Topf Date: Mon, 7 Jul 2025 09:50:20 +0200 Subject: [PATCH 1/3] Accessors should return string references, not copies --- src/expire-output.hpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/expire-output.hpp b/src/expire-output.hpp index 6325a6960..c25033d96 100644 --- a/src/expire-output.hpp +++ b/src/expire-output.hpp @@ -29,16 +29,16 @@ class expire_output_t public: expire_output_t() = default; - std::string filename() const noexcept { return m_filename; } + std::string const &filename() const noexcept { return m_filename; } void set_filename(std::string filename) { m_filename = std::move(filename); } - std::string schema() const noexcept { return m_schema; } + std::string const &schema() const noexcept { return m_schema; } - std::string table() const noexcept { return m_table; } + std::string const &table() const noexcept { return m_table; } void set_schema_and_table(std::string schema, std::string table) { From 4bc74b3a9ff26dce32e67ac29de16c1fcca137f1 Mon Sep 17 00:00:00 2001 From: Jochen Topf Date: Mon, 7 Jul 2025 10:29:04 +0200 Subject: [PATCH 2/3] Refactoring: Use luaX_pushstring() helper more Gets rid of c_str() in many places --- src/flex-lua-locator.cpp | 4 ++-- src/flex-lua-table.cpp | 9 ++++----- src/lua-setup.cpp | 2 +- src/lua-utils.cpp | 4 ++-- src/lua-utils.hpp | 2 +- src/output-flex.cpp | 2 +- src/tagtransform-lua.cpp | 8 ++++---- 7 files changed, 15 insertions(+), 16 deletions(-) diff --git a/src/flex-lua-locator.cpp b/src/flex-lua-locator.cpp index 4598a7854..113675d14 100644 --- a/src/flex-lua-locator.cpp +++ b/src/flex-lua-locator.cpp @@ -158,7 +158,7 @@ int lua_wrapper_locator::all_intersecting() int n = 0; for (auto const& name : names) { lua_pushinteger(lua_state(), ++n); - lua_pushstring(lua_state(), name.c_str()); + luaX_pushstring(lua_state(), name); lua_rawset(lua_state(), -3); } @@ -182,7 +182,7 @@ int lua_wrapper_locator::first_intersecting() return 0; } - lua_pushstring(lua_state(), name.c_str()); + luaX_pushstring(lua_state(), name); return 1; } diff --git a/src/flex-lua-table.cpp b/src/flex-lua-table.cpp index d7239706a..6f6ed4064 100644 --- a/src/flex-lua-table.cpp +++ b/src/flex-lua-table.cpp @@ -503,12 +503,11 @@ int lua_wrapper_table::columns() const lua_pushinteger(lua_state(), ++n); lua_newtable(lua_state()); - luaX_add_table_str(lua_state(), "name", column.name().c_str()); - luaX_add_table_str(lua_state(), "type", column.type_name().c_str()); - luaX_add_table_str(lua_state(), "sql_type", - column.sql_type_name().c_str()); + luaX_add_table_str(lua_state(), "name", column.name()); + luaX_add_table_str(lua_state(), "type", column.type_name()); + luaX_add_table_str(lua_state(), "sql_type", column.sql_type_name()); luaX_add_table_str(lua_state(), "sql_modifiers", - column.sql_modifiers().c_str()); + column.sql_modifiers()); luaX_add_table_bool(lua_state(), "not_null", column.not_null()); luaX_add_table_bool(lua_state(), "create_only", column.create_only()); diff --git a/src/lua-setup.cpp b/src/lua-setup.cpp index e28e65d26..25b0266ff 100644 --- a/src/lua-setup.cpp +++ b/src/lua-setup.cpp @@ -33,7 +33,7 @@ void setup_lua_environment(lua_State *lua_state, std::string const &filename, if (!dir_path.empty()) { dir_path += std::filesystem::path::preferred_separator; } - luaX_add_table_str(lua_state, "config_dir", dir_path.c_str()); + luaX_add_table_str(lua_state, "config_dir", dir_path); luaX_add_table_str(lua_state, "mode", append_mode ? "append" : "create"); } diff --git a/src/lua-utils.cpp b/src/lua-utils.cpp index 376d460a9..c843ec375 100644 --- a/src/lua-utils.cpp +++ b/src/lua-utils.cpp @@ -76,10 +76,10 @@ void luaX_add_table_str(lua_State *lua_state, char const *key, } void luaX_add_table_str(lua_State *lua_state, char const *key, - char const *value, std::size_t size) noexcept + std::string_view value) noexcept { lua_pushstring(lua_state, key); - lua_pushlstring(lua_state, value, size); + luaX_pushstring(lua_state, value); lua_rawset(lua_state, -3); } diff --git a/src/lua-utils.hpp b/src/lua-utils.hpp index 920d28495..cd0919f12 100644 --- a/src/lua-utils.hpp +++ b/src/lua-utils.hpp @@ -28,7 +28,7 @@ void luaX_pushstring(lua_State *lua_state, std::string_view str) noexcept; void luaX_add_table_str(lua_State *lua_state, char const *key, char const *value) noexcept; void luaX_add_table_str(lua_State *lua_state, char const *key, - char const *value, std::size_t size) noexcept; + std::string_view value) noexcept; void luaX_add_table_int(lua_State *lua_state, char const *key, int64_t value) noexcept; void luaX_add_table_num(lua_State *lua_state, char const *key, diff --git a/src/output-flex.cpp b/src/output-flex.cpp index 3a3b4e625..a806a5c80 100644 --- a/src/output-flex.cpp +++ b/src/output-flex.cpp @@ -1281,7 +1281,7 @@ void output_flex_t::init_lua(std::string const &filename, lua_createtable(lua_state(), 0, (int)properties.size()); for (auto const &property : properties) { luaX_add_table_str(lua_state(), property.first.c_str(), - property.second.c_str()); + property.second); } lua_rawset(lua_state(), -3); diff --git a/src/tagtransform-lua.cpp b/src/tagtransform-lua.cpp index b22c6d28f..678bdd2f0 100644 --- a/src/tagtransform-lua.cpp +++ b/src/tagtransform-lua.cpp @@ -111,8 +111,8 @@ bool lua_tagtransform_t::filter_tags(osmium::OSMObject const &o, bool *polygon, taglist_t tags; tags.add_attributes(o); for (auto const &t : tags) { - lua_pushstring(lua_state(), t.key.c_str()); - lua_pushstring(lua_state(), t.value.c_str()); + luaX_pushstring(lua_state(), t.key); + luaX_pushstring(lua_state(), t.value); lua_rawset(lua_state(), -3); ++sz; } @@ -158,8 +158,8 @@ bool lua_tagtransform_t::filter_rel_member_tags( lua_newtable(lua_state()); /* relations key value table */ for (auto const &rel_tag : rel_tags) { - lua_pushstring(lua_state(), rel_tag.key.c_str()); - lua_pushstring(lua_state(), rel_tag.value.c_str()); + luaX_pushstring(lua_state(), rel_tag.key); + luaX_pushstring(lua_state(), rel_tag.value); lua_rawset(lua_state(), -3); } From 7f5da49804dc578c09cfd1d52df5f72ddbf104c2 Mon Sep 17 00:00:00 2001 From: Jochen Topf Date: Mon, 7 Jul 2025 09:49:04 +0200 Subject: [PATCH 3/3] Make some simple functions noexcept --- src/flex-lua-expire-output.cpp | 10 +++++----- src/flex-lua-expire-output.hpp | 10 +++++----- src/flex-lua-locator.cpp | 2 +- src/flex-lua-locator.hpp | 2 +- src/flex-lua-table.cpp | 6 +++--- src/flex-lua-table.hpp | 6 +++--- 6 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/flex-lua-expire-output.cpp b/src/flex-lua-expire-output.cpp index aac3ba2f3..e3609de33 100644 --- a/src/flex-lua-expire-output.cpp +++ b/src/flex-lua-expire-output.cpp @@ -138,31 +138,31 @@ int lua_wrapper_expire_output::tostring() const return 1; } -int lua_wrapper_expire_output::filename() const +int lua_wrapper_expire_output::filename() const noexcept { luaX_pushstring(lua_state(), self().filename()); return 1; } -int lua_wrapper_expire_output::maxzoom() const +int lua_wrapper_expire_output::maxzoom() const noexcept { lua_pushinteger(lua_state(), self().maxzoom()); return 1; } -int lua_wrapper_expire_output::minzoom() const +int lua_wrapper_expire_output::minzoom() const noexcept { lua_pushinteger(lua_state(), self().minzoom()); return 1; } -int lua_wrapper_expire_output::schema() const +int lua_wrapper_expire_output::schema() const noexcept { luaX_pushstring(lua_state(), self().schema()); return 1; } -int lua_wrapper_expire_output::table() const +int lua_wrapper_expire_output::table() const noexcept { luaX_pushstring(lua_state(), self().table()); return 1; diff --git a/src/flex-lua-expire-output.hpp b/src/flex-lua-expire-output.hpp index 29dc0ae68..dcdc4be4a 100644 --- a/src/flex-lua-expire-output.hpp +++ b/src/flex-lua-expire-output.hpp @@ -37,11 +37,11 @@ class lua_wrapper_expire_output : public lua_wrapper_base } int tostring() const; - int filename() const; - int maxzoom() const; - int minzoom() const; - int schema() const; - int table() const; + int filename() const noexcept; + int maxzoom() const noexcept; + int minzoom() const noexcept; + int schema() const noexcept; + int table() const noexcept; }; // class lua_wrapper_expire_output diff --git a/src/flex-lua-locator.cpp b/src/flex-lua-locator.cpp index 113675d14..65bc7bfb5 100644 --- a/src/flex-lua-locator.cpp +++ b/src/flex-lua-locator.cpp @@ -104,7 +104,7 @@ int lua_wrapper_locator::tostring() const return 1; } -int lua_wrapper_locator::name() const +int lua_wrapper_locator::name() const noexcept { luaX_pushstring(lua_state(), self().name()); return 1; diff --git a/src/flex-lua-locator.hpp b/src/flex-lua-locator.hpp index 6dcbea93f..186256780 100644 --- a/src/flex-lua-locator.hpp +++ b/src/flex-lua-locator.hpp @@ -39,7 +39,7 @@ class lua_wrapper_locator : public lua_wrapper_base } int tostring() const; - int name() const; + int name() const noexcept; int add_bbox(); int add_from_db(); int all_intersecting(); diff --git a/src/flex-lua-table.cpp b/src/flex-lua-table.cpp index 6f6ed4064..9bff4d543 100644 --- a/src/flex-lua-table.cpp +++ b/src/flex-lua-table.cpp @@ -488,7 +488,7 @@ int lua_wrapper_table::tostring() const return 1; } -int lua_wrapper_table::cluster() const +int lua_wrapper_table::cluster() const noexcept { lua_pushboolean(lua_state(), self().cluster_by_geom()); return 1; @@ -517,13 +517,13 @@ int lua_wrapper_table::columns() const return 1; } -int lua_wrapper_table::name() const +int lua_wrapper_table::name() const noexcept { luaX_pushstring(lua_state(), self().name()); return 1; } -int lua_wrapper_table::schema() const +int lua_wrapper_table::schema() const noexcept { luaX_pushstring(lua_state(), self().schema()); return 1; diff --git a/src/flex-lua-table.hpp b/src/flex-lua-table.hpp index 29d8b9ef4..9bda81830 100644 --- a/src/flex-lua-table.hpp +++ b/src/flex-lua-table.hpp @@ -37,10 +37,10 @@ class lua_wrapper_table : public lua_wrapper_base } int tostring() const; - int cluster() const; + int cluster() const noexcept; int columns() const; - int name() const; - int schema() const; + int name() const noexcept; + int schema() const noexcept; }; // class lua_wrapper_table