mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-02-05 12:15:34 +00:00
Merge pull request #2699 from elsid/get_items_owned_by_visitor
Avoid using temporary vector to get items owned by
This commit is contained in:
commit
36f1b632ec
3 changed files with 7 additions and 20 deletions
|
@ -269,7 +269,7 @@ namespace MWWorld
|
||||||
/// \attention This function also lists deleted (count 0) objects!
|
/// \attention This function also lists deleted (count 0) objects!
|
||||||
/// \return Iteration completed?
|
/// \return Iteration completed?
|
||||||
template<class Visitor>
|
template<class Visitor>
|
||||||
bool forEach (Visitor& visitor)
|
bool forEach (Visitor&& visitor)
|
||||||
{
|
{
|
||||||
if (mState != State_Loaded)
|
if (mState != State_Loaded)
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -330,7 +330,7 @@ namespace MWWorld
|
||||||
const auto navigator = MWBase::Environment::get().getWorld()->getNavigator();
|
const auto navigator = MWBase::Environment::get().getWorld()->getNavigator();
|
||||||
ListAndResetObjectsVisitor visitor;
|
ListAndResetObjectsVisitor visitor;
|
||||||
|
|
||||||
(*iter)->forEach<ListAndResetObjectsVisitor>(visitor);
|
(*iter)->forEach(visitor);
|
||||||
const auto world = MWBase::Environment::get().getWorld();
|
const auto world = MWBase::Environment::get().getWorld();
|
||||||
for (const auto& ptr : visitor.mObjects)
|
for (const auto& ptr : visitor.mObjects)
|
||||||
{
|
{
|
||||||
|
|
|
@ -2745,28 +2745,15 @@ namespace MWWorld
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct ListObjectsVisitor
|
|
||||||
{
|
|
||||||
std::vector<MWWorld::Ptr> mObjects;
|
|
||||||
|
|
||||||
bool operator() (Ptr ptr)
|
|
||||||
{
|
|
||||||
if (ptr.getRefData().getBaseNode())
|
|
||||||
mObjects.push_back(ptr);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
void World::getItemsOwnedBy (const MWWorld::ConstPtr& npc, std::vector<MWWorld::Ptr>& out)
|
void World::getItemsOwnedBy (const MWWorld::ConstPtr& npc, std::vector<MWWorld::Ptr>& out)
|
||||||
{
|
{
|
||||||
for (CellStore* cellstore : mWorldScene->getActiveCells())
|
for (CellStore* cellstore : mWorldScene->getActiveCells())
|
||||||
{
|
{
|
||||||
ListObjectsVisitor visitor;
|
cellstore->forEach([&] (const auto& ptr) {
|
||||||
cellstore->forEach(visitor);
|
if (ptr.getRefData().getBaseNode() && Misc::StringUtils::ciEqual(ptr.getCellRef().getOwner(), npc.getCellRef().getRefId()))
|
||||||
|
out.push_back(ptr);
|
||||||
for (const Ptr &object : visitor.mObjects)
|
return true;
|
||||||
if (Misc::StringUtils::ciEqual(object.getCellRef().getOwner(), npc.getCellRef().getRefId()))
|
});
|
||||||
out.push_back(object);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue