[Scummvm-cvs-logs] SF.net SVN: scummvm:[43912] scummvm/trunk/engines/saga/actor_path.cpp

fingolfin at users.sourceforge.net fingolfin at users.sourceforge.net
Wed Sep 2 21:33:10 CEST 2009


Revision: 43912
          http://scummvm.svn.sourceforge.net/scummvm/?rev=43912&view=rev
Author:   fingolfin
Date:     2009-09-02 19:33:08 +0000 (Wed, 02 Sep 2009)

Log Message:
-----------
SAGA: Change Actor::fillPathArray to use a dynamic queue instead of an only-growing array -> should reduce memory usage significantly

Modified Paths:
--------------
    scummvm/trunk/engines/saga/actor_path.cpp

Modified: scummvm/trunk/engines/saga/actor_path.cpp
===================================================================
--- scummvm/trunk/engines/saga/actor_path.cpp	2009-09-02 16:08:39 UTC (rev 43911)
+++ scummvm/trunk/engines/saga/actor_path.cpp	2009-09-02 19:33:08 UTC (rev 43912)
@@ -232,7 +232,7 @@
 	int directionCount;
 	int16 compressX = (_vm->getGameId() == GID_ITE) ? 2 : 1;
 
-	Common::Array<PathDirectionData> pathDirectionList;
+	Common::List<PathDirectionData> pathDirectionQueue;
 
 	pointCounter = 0;
 	bestRating = quickDistance(fromPoint, toPoint, compressX);
@@ -240,7 +240,7 @@
 
 	for (startDirection = 0; startDirection < 4; startDirection++) {
 		PathDirectionData tmp = { startDirection, fromPoint.x, fromPoint.y };
-		pathDirectionList.push_back(tmp);
+		pathDirectionQueue.push_back(tmp);
 	}
 
 	if (validPathCellPoint(fromPoint)) {
@@ -251,10 +251,12 @@
 #endif
 	}
 
-	for (uint i = 0; i < pathDirectionList.size(); ++i) {
+	while (!pathDirectionQueue.empty()) {
+		PathDirectionData curPathDirection = pathDirectionQueue.front();
+		pathDirectionQueue.pop_front();
 		for (directionCount = 0; directionCount < 3; directionCount++) {
-			samplePathDirection = &pathDirectionLUT[pathDirectionList[i].direction][directionCount];
-			nextPoint = Point(pathDirectionList[i].x, pathDirectionList[i].y);
+			samplePathDirection = &pathDirectionLUT[curPathDirection.direction][directionCount];
+			nextPoint = Point(curPathDirection.x, curPathDirection.y);
 			nextPoint.x += samplePathDirection->x;
 			nextPoint.y += samplePathDirection->y;
 
@@ -274,7 +276,7 @@
 			PathDirectionData tmp = {
 				samplePathDirection->direction,
 				nextPoint.x, nextPoint.y };
-			pathDirectionList.push_back(tmp);
+			pathDirectionQueue.push_back(tmp);
 			++pointCounter;
 			if (nextPoint == toPoint) {
 				bestPoint = toPoint;


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list