SCI: Added TODO: Merge SegInterface and MemObject? And some cleanup

svn-id: r39485
This commit is contained in:
Max Horn 2009-03-17 16:08:25 +00:00
parent 3c23ba7d73
commit 95c58e76d6
4 changed files with 25 additions and 6 deletions

View file

@ -70,9 +70,9 @@ int IntMapper::checkKey(int key, bool add, bool *was_added) {
if (was_added) if (was_added)
*was_added = false; *was_added = false;
if (*node) { if (*node)
return (*node)->idx; return (*node)->idx;
}
// Not found // Not found
if (!add) if (!add)
@ -96,6 +96,18 @@ int IntMapper::checkKey(int key, bool add, bool *was_added) {
return (*node)->idx; return (*node)->idx;
} }
int IntMapper::lookupKey(int key) const {
Node *const *node = &(nodes[HASH(key)]);
while (*node && (key != (*node)->key))
node = &((*node)->next);
if (*node)
return (*node)->idx;
return -1;
}
void IntMapper::saveLoadWithSerializer(Common::Serializer &s) { void IntMapper::saveLoadWithSerializer(Common::Serializer &s) {
s.syncAsSint32LE(base_value); s.syncAsSint32LE(base_value);
if (s.isLoading()) { if (s.isLoading()) {

View file

@ -93,6 +93,9 @@ public:
*/ */
int checkKey(int key, bool add, bool *wasAdded = 0); int checkKey(int key, bool add, bool *wasAdded = 0);
int lookupKey(int key) const;
/** /**
* Removes a key from the map. * Removes a key from the map.
* @param key The key to remove * @param key The key to remove

View file

@ -568,8 +568,8 @@ void SegManager::sm_put_heap(reg_t reg, int16 value) {
#endif #endif
// return the seg if script_id is valid and in the map, else -1 // return the seg if script_id is valid and in the map, else -1
int SegManager::segGet(int script_id) { int SegManager::segGet(int script_id) const {
return id_seg_map->checkKey(script_id, false); return id_seg_map->lookupKey(script_id);
} }
// validate the seg // validate the seg

View file

@ -103,8 +103,7 @@ public:
// Get the segment ID associated with a script number // Get the segment ID associated with a script number
// Parameters: (int) script_nr: Number of the script to look up // Parameters: (int) script_nr: Number of the script to look up
// Returns : (int) The associated segment ID, or -1 if no matching segment exists // Returns : (int) The associated segment ID, or -1 if no matching segment exists
// This function is "pure" (i.e, it doesn't modify anything). int segGet(int script_nr) const;
int segGet(int script_nr);
// script lock operations // script lock operations
@ -445,6 +444,11 @@ private:
// 11. Segment interface, primarily for GC // 11. Segment interface, primarily for GC
// TODO: Merge SegInterface and MemObject?
// After all, _mobj->type == _typeId
// and we make very little use of _segmgr (-> could get rid of that).
// Other code would benefit, e.g. the saveload code.
// But note that _mobj->segmgr_id != _segId !
class SegInterface { class SegInterface {
protected: protected:
SegInterface(SegManager *segmgr, MemObject *mobj, SegmentId segId, memObjType typeId); SegInterface(SegManager *segmgr, MemObject *mobj, SegmentId segId, memObjType typeId);