diff options
author | Jozef Behran <jozuejozef@gmail.com> | 2019-01-13 09:11:47 -0500 |
---|---|---|
committer | Loïc Blot <nerzhul@users.noreply.github.com> | 2019-01-13 15:11:47 +0100 |
commit | a51909bb64811694773b6dd3abd791d3d78d85e6 (patch) | |
tree | 76553f6cf3c685c292b00a898c8672df05d2b3a4 /src/craftdef.cpp | |
parent | 5a00b118959941722de977f2452f1e656c75304e (diff) | |
download | minetest-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.cpp | 3 |
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()); |