1
0
mirror of https://gitlab.com/OpenMW/openmw.git synced 2025-02-20 15:40:32 +00:00

Avoid allocating std::vector for a single element

This commit is contained in:
elsid 2023-10-29 13:38:20 +01:00
parent ac891a5eb1
commit 7290ce81c0
No known key found for this signature in database
GPG Key ID: 4DE04C198CBA7625
3 changed files with 12 additions and 12 deletions

View File

@ -165,12 +165,12 @@ namespace MWWorld
class TerrainPreloadItem : public SceneUtil::WorkItem
{
public:
TerrainPreloadItem(const std::vector<osg::ref_ptr<Terrain::View>>& views, Terrain::World* world,
const std::vector<PositionCellGrid>& preloadPositions)
explicit TerrainPreloadItem(const std::vector<osg::ref_ptr<Terrain::View>>& views, Terrain::World* world,
std::span<const PositionCellGrid> preloadPositions)
: mAbort(false)
, mTerrainViews(views)
, mWorld(world)
, mPreloadPositions(preloadPositions)
, mPreloadPositions(preloadPositions.begin(), preloadPositions.end())
{
}
@ -380,10 +380,10 @@ namespace MWWorld
mTerrainPreloadItem->abort();
mTerrainPreloadItem->waitTillDone();
}
setTerrainPreloadPositions(std::vector<PositionCellGrid>());
setTerrainPreloadPositions({});
}
void CellPreloader::setTerrainPreloadPositions(const std::vector<PositionCellGrid>& positions)
void CellPreloader::setTerrainPreloadPositions(std::span<const PositionCellGrid> positions)
{
if (positions.empty())
{
@ -404,7 +404,7 @@ namespace MWWorld
mTerrainViews.emplace_back(mTerrain->createView());
}
mTerrainPreloadPositions = positions;
mTerrainPreloadPositions.assign(positions.begin(), positions.end());
if (!positions.empty())
{
mTerrainPreloadItem = new TerrainPreloadItem(mTerrainViews, mTerrain, positions);

View File

@ -8,6 +8,7 @@
#include <osg/ref_ptr>
#include <map>
#include <span>
namespace osg
{
@ -77,7 +78,7 @@ namespace MWWorld
void setWorkQueue(osg::ref_ptr<SceneUtil::WorkQueue> workQueue);
void setTerrainPreloadPositions(const std::vector<PositionCellGrid>& positions);
void setTerrainPreloadPositions(std::span<const PositionCellGrid> positions);
void syncTerrainLoad(Loading::Listener& listener);
void abortTerrainPreloadExcept(const PositionCellGrid* exceptPos);

View File

@ -1232,10 +1232,9 @@ namespace MWWorld
void Scene::preloadTerrain(const osg::Vec3f& pos, ESM::RefId worldspace, bool sync)
{
ESM::ExteriorCellLocation cellPos = ESM::positionToExteriorCellLocation(pos.x(), pos.y(), worldspace);
std::vector<PositionCellGrid> vec;
vec.emplace_back(pos, gridCenterToBounds({ cellPos.mX, cellPos.mY }));
mPreloader->abortTerrainPreloadExcept(vec.data());
mPreloader->setTerrainPreloadPositions(vec);
const PositionCellGrid position{ pos, gridCenterToBounds({ cellPos.mX, cellPos.mY }) };
mPreloader->abortTerrainPreloadExcept(&position);
mPreloader->setTerrainPreloadPositions(std::span(&position, 1));
if (!sync)
return;
@ -1249,7 +1248,7 @@ namespace MWWorld
void Scene::reloadTerrain()
{
mPreloader->setTerrainPreloadPositions(std::vector<PositionCellGrid>());
mPreloader->setTerrainPreloadPositions({});
}
struct ListFastTravelDestinationsVisitor