1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-11-29 23:07:48 +02:00

Tiny optimizations to avoid copies

This commit is contained in:
Tomasz Zieliński
2023-12-13 22:20:23 +01:00
parent d31789e745
commit 99870be24c
3 changed files with 68 additions and 42 deletions

View File

@@ -238,6 +238,7 @@ bool Area::contains(const Area & area) const
bool Area::overlap(const std::vector<int3> & tiles) const
{
// Important: Make sure that tiles.size < area.size
for(const auto & t : tiles)
{
if(contains(t))
@@ -296,15 +297,14 @@ int3 Area::nearest(const Area & area) const
Area Area::getSubarea(const std::function<bool(const int3 &)> & filter) const
{
Area subset;
for(const auto & t : getTilesVector())
if(filter(t))
subset.add(t);
vstd::copy_if(getTilesVector(), vstd::set_inserter(subset.dTiles), filter);
return subset;
}
void Area::clear()
{
dTiles.clear();
dTilesVectorCache.clear();
dTotalShiftCache = int3();
invalidate();
}
@@ -329,11 +329,10 @@ void Area::erase(const int3 & tile)
void Area::unite(const Area & area)
{
invalidate();
for(const auto & t : area.getTilesVector())
{
dTiles.insert(t);
}
auto & vec = area.getTilesVector();
dTiles.insert(vec.begin(), vec.end());
}
void Area::intersect(const Area & area)
{
invalidate();
@@ -359,7 +358,7 @@ void Area::translate(const int3 & shift)
{
dBorderCache.clear();
dBorderOutsideCache.clear();
if(dTilesVectorCache.empty())
{
getTiles();
@@ -373,7 +372,6 @@ void Area::translate(const int3 & shift)
{
t += shift;
}
//toAbsolute(dTiles, shift);
}
void Area::erase_if(std::function<bool(const int3&)> predicate)