summaryrefslogtreecommitdiff
path: root/src/craftdef.cpp
diff options
context:
space:
mode:
authorJozef Behran <jozuejozef@gmail.com>2019-01-13 09:11:47 -0500
committerLoïc Blot <nerzhul@users.noreply.github.com>2019-01-13 15:11:47 +0100
commita51909bb64811694773b6dd3abd791d3d78d85e6 (patch)
tree76553f6cf3c685c292b00a898c8672df05d2b3a4 /src/craftdef.cpp
parent5a00b118959941722de977f2452f1e656c75304e (diff)
downloadminetest-a51909bb64811694773b6dd3abd791d3d78d85e6.tar.gz
minetest-a51909bb64811694773b6dd3abd791d3d78d85e6.tar.bz2
minetest-a51909bb64811694773b6dd3abd791d3d78d85e6.zip
Speed up the craft definition handling (#8097)
The craft definition handling code that collects the names of the craftable nodes suffers from vector reallocation performance hits, slowing down instances with lots of crafting recipes (VanessaE's DreamBuilder and most public server some to my mind when thinking about this). As in each instance the size of the resulting vector is already known, add a reserve() call before the offending loops to allocate the needed chunk of memory within the result vector in one go, getting rid of the overhead.
Diffstat (limited to 'src/craftdef.cpp')
-rw-r--r--src/craftdef.cpp3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/craftdef.cpp b/src/craftdef.cpp
index d64b7e55e..077d7e044 100644
--- a/src/craftdef.cpp
+++ b/src/craftdef.cpp
@@ -112,6 +112,7 @@ static std::vector<std::string> craftGetItemNames(
const std::vector<std::string> &itemstrings, IGameDef *gamedef)
{
std::vector<std::string> result;
+ result.reserve(itemstrings.size());
for (const auto &itemstring : itemstrings) {
result.push_back(craftGetItemName(itemstring, gamedef));
}
@@ -123,6 +124,7 @@ static std::vector<std::string> craftGetItemNames(
const std::vector<ItemStack> &items, IGameDef *gamedef)
{
std::vector<std::string> result;
+ result.reserve(items.size());
for (const auto &item : items) {
result.push_back(item.name);
}
@@ -134,6 +136,7 @@ static std::vector<ItemStack> craftGetItems(
const std::vector<std::string> &items, IGameDef *gamedef)
{
std::vector<ItemStack> result;
+ result.reserve(items.size());
for (const auto &item : items) {
result.emplace_back(std::string(item), (u16)1,
(u16)0, gamedef->getItemDefManager());