[Scummvm-cvs-logs] SF.net SVN: scummvm:[46102] scummvm/trunk/engines/made
john_doe at users.sourceforge.net
john_doe at users.sourceforge.net
Mon Nov 23 16:31:58 CET 2009
Revision: 46102
http://scummvm.svn.sourceforge.net/scummvm/?rev=46102&view=rev
Author: john_doe
Date: 2009-11-23 15:31:58 +0000 (Mon, 23 Nov 2009)
Log Message:
-----------
Optimized object property access speed
Modified Paths:
--------------
scummvm/trunk/engines/made/database.cpp
scummvm/trunk/engines/made/database.h
Modified: scummvm/trunk/engines/made/database.cpp
===================================================================
--- scummvm/trunk/engines/made/database.cpp 2009-11-23 06:44:40 UTC (rev 46101)
+++ scummvm/trunk/engines/made/database.cpp 2009-11-23 15:31:58 UTC (rev 46102)
@@ -320,13 +320,28 @@
obj->setString(str);
}
+int16 *GameDatabase::findObjectPropertyCached(int16 objectIndex, int16 propertyId, int16 &propertyFlag) {
+ uint32 id = (objectIndex << 16) | propertyId;
+ ObjectPropertyCacheMap::iterator iter = _objectPropertyCache.find(id);
+ int16 *propertyPtr = NULL;
+ if (iter != _objectPropertyCache.end()) {
+ propertyPtr = (*iter)._value;
+ } else {
+ propertyPtr = findObjectProperty(objectIndex, propertyId, propertyFlag);
+ _objectPropertyCache[id] = propertyPtr;
+ }
+ propertyFlag = 1;
+ return propertyPtr;
+}
+
int16 GameDatabase::getObjectProperty(int16 objectIndex, int16 propertyId) {
if (objectIndex == 0)
return 0;
int16 propertyFlag;
- int16 *property = findObjectProperty(objectIndex, propertyId, propertyFlag);
+ //int16 *property = findObjectProperty(objectIndex, propertyId, propertyFlag);
+ int16 *property = findObjectPropertyCached(objectIndex, propertyId, propertyFlag);
if (property) {
return (int16)READ_LE_UINT16(property);
@@ -342,7 +357,8 @@
return 0;
int16 propertyFlag;
- int16 *property = findObjectProperty(objectIndex, propertyId, propertyFlag);
+ //int16 *property = findObjectProperty(objectIndex, propertyId, propertyFlag);
+ int16 *property = findObjectPropertyCached(objectIndex, propertyId, propertyFlag);
if (property) {
if (propertyFlag == 1) {
Modified: scummvm/trunk/engines/made/database.h
===================================================================
--- scummvm/trunk/engines/made/database.h 2009-11-23 06:44:40 UTC (rev 46101)
+++ scummvm/trunk/engines/made/database.h 2009-11-23 15:31:58 UTC (rev 46102)
@@ -27,6 +27,7 @@
#define MADE_DATABASE_H
#include "common/array.h"
+#include "common/hashmap.h"
#include "common/util.h"
#include "common/file.h"
#include "common/stream.h"
@@ -141,6 +142,7 @@
void setObjectString(int16 index, const char *str);
virtual int16 *findObjectProperty(int16 objectIndex, int16 propertyId, int16 &propertyFlag) = 0;
+ int16 *findObjectPropertyCached(int16 objectIndex, int16 propertyId, int16 &propertyFlag);
virtual const char *getString(uint16 offset) = 0;
virtual bool getSavegameDescription(const char *filename, Common::String &description, int16 version) = 0;
virtual int16 savegame(const char *filename, const char *description, int16 version) = 0;
@@ -152,8 +154,10 @@
void dumpObject(int16 index);
protected:
+ typedef Common::HashMap<uint32, int16*> ObjectPropertyCacheMap;
MadeEngine *_vm;
Common::Array<Object*> _objects;
+ ObjectPropertyCacheMap _objectPropertyCache;
byte *_gameState;
uint32 _gameStateSize;
int16 _mainCodeObjectIndex;
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