Przeglądaj źródła

TerrainTile::topVisitableObj: avoid costly vector copying

ArseniyShestakov 10 lat temu
rodzic
commit
649ebfad2f
1 zmienionych plików z 6 dodań i 4 usunięć
  1. 6 4
      lib/mapping/CMap.cpp

+ 6 - 4
lib/mapping/CMap.cpp

@@ -132,11 +132,13 @@ Obj TerrainTile::topVisitableId(bool excludeTop) const
 
 CGObjectInstance * TerrainTile::topVisitableObj(bool excludeTop) const
 {
-	auto visitableObj = visitableObjects;
-	if(excludeTop && visitableObj.size())
-		visitableObj.pop_back();
+	if(visitableObjects.empty() || (excludeTop && visitableObjects.size() == 1))
+		return nullptr;
 
-	return visitableObj.size() ? visitableObj.back() : nullptr;
+	if(excludeTop)
+		return visitableObjects[visitableObjects.size()-2];
+
+	return visitableObjects.back();
 }
 
 bool TerrainTile::isCoastal() const