diff options
author | Max Horn | 2005-04-23 16:52:11 +0000 |
---|---|---|
committer | Max Horn | 2005-04-23 16:52:11 +0000 |
commit | 554ecd57cbe1bf396cda807e25bd4ed832850d0c (patch) | |
tree | 1721b41a946b7ea85b7826513f16d063ac51f87b /scumm/resource.cpp | |
parent | b43e1e960fadff6b900329ec96c32121406cb92b (diff) | |
download | scummvm-rg350-554ecd57cbe1bf396cda807e25bd4ed832850d0c.tar.gz scummvm-rg350-554ecd57cbe1bf396cda807e25bd4ed832850d0c.tar.bz2 scummvm-rg350-554ecd57cbe1bf396cda807e25bd4ed832850d0c.zip |
Don't use Common::Map for the object table at all; rather use bsearch on a fixed size table.
svn-id: r17777
Diffstat (limited to 'scumm/resource.cpp')
-rw-r--r-- | scumm/resource.cpp | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/scumm/resource.cpp b/scumm/resource.cpp index 060f3f83b8..668e2b3431 100644 --- a/scumm/resource.cpp +++ b/scumm/resource.cpp @@ -1148,18 +1148,24 @@ void ScummEngine_v8::readGlobalObjects() { int num = _fileHandle->readUint32LE(); assert(num == _numGlobalObjects); - char buffer[40]; + _objectIDMap = new ObjectNameId[num]; + _objectIDMapSize = num; for (i = 0; i < num; i++) { - _fileHandle->read(buffer, 40); - if (buffer[0]) { - // Add to object name-to-id map - _objectIDMap[buffer] = i; - } + // Add to object name-to-id map + _fileHandle->read(_objectIDMap[i].name, 40); + _objectIDMap[i].id = i; + _objectStateTable[i] = _fileHandle->readByte(); _objectRoomTable[i] = _fileHandle->readByte(); _classData[i] = _fileHandle->readUint32LE(); } memset(_objectOwnerTable, 0xFF, num); + + // Finally, sort the object name->ID map, so we can later use + // bsearch on it. For this we (ab)use strcmp, which works fine + // since the table entries start with a string. + qsort(_objectIDMap, _objectIDMapSize, sizeof(ObjectNameId), + (int (*)(const void*, const void*))strcmp); } void ScummEngine_v7::readGlobalObjects() { |