Skip to content
Permalink
Browse files

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.
  • Loading branch information...
osjc authored and nerzhul committed Jan 13, 2019
1 parent 5a00b11 commit a51909bb64811694773b6dd3abd791d3d78d85e6
Showing with 3 additions and 0 deletions.
  1. +3 −0 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());

0 comments on commit a51909b

Please sign in to comment.
You can’t perform that action at this time.