aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/engine/gc.cpp
diff options
context:
space:
mode:
authorMax Horn2010-07-01 16:05:29 +0000
committerMax Horn2010-07-01 16:05:29 +0000
commitb8904a48ed81d04a2cbe84f78d80aaa75344d16e (patch)
tree0ca4fcea00f9aad9d14292b5ec393057b815abfb /engines/sci/engine/gc.cpp
parentc822cd67cbebf22999a6b4d95d965ea5873e1b9a (diff)
downloadscummvm-rg350-b8904a48ed81d04a2cbe84f78d80aaa75344d16e.tar.gz
scummvm-rg350-b8904a48ed81d04a2cbe84f78d80aaa75344d16e.tar.bz2
scummvm-rg350-b8904a48ed81d04a2cbe84f78d80aaa75344d16e.zip
SCI: Make SegManager::_heap private
svn-id: r50552
Diffstat (limited to 'engines/sci/engine/gc.cpp')
-rw-r--r--engines/sci/engine/gc.cpp24
1 files changed, 13 insertions, 11 deletions
diff --git a/engines/sci/engine/gc.cpp b/engines/sci/engine/gc.cpp
index 3dd7acfa1c..75456bcef0 100644
--- a/engines/sci/engine/gc.cpp
+++ b/engines/sci/engine/gc.cpp
@@ -51,12 +51,12 @@ struct WorklistManager {
}
};
-static reg_t_hash_map *normalise_hashmap_ptrs(SegManager *segMan, reg_t_hash_map &nonnormal_map) {
+static reg_t_hash_map *normalizeAddresses(SegManager *segMan, reg_t_hash_map &nonnormal_map) {
reg_t_hash_map *normal_map = new reg_t_hash_map();
for (reg_t_hash_map::iterator i = nonnormal_map.begin(); i != nonnormal_map.end(); ++i) {
reg_t reg = i->_key;
- SegmentObj *mobj = (reg.segment < segMan->_heap.size()) ? segMan->_heap[reg.segment] : NULL;
+ SegmentObj *mobj = segMan->getSegmentObj(reg.segment);
if (mobj) {
reg = mobj->findCanonicAddress(segMan, reg);
@@ -113,11 +113,12 @@ reg_t_hash_map *find_all_used_references(EngineState *s) {
debugC(2, kDebugLevelGC, "[GC] -- Finished adding execution stack");
+ const Common::Array<SegmentObj *> &heap = segMan->getSegments();
+
// Init: Explicitly loaded scripts
- for (i = 1; i < segMan->_heap.size(); i++) {
- if (segMan->_heap[i]
- && segMan->_heap[i]->getType() == SEG_TYPE_SCRIPT) {
- Script *script = (Script *)segMan->_heap[i];
+ for (i = 1; i < heap.size(); i++) {
+ if (heap[i] && heap[i]->getType() == SEG_TYPE_SCRIPT) {
+ Script *script = (Script *)heap[i];
if (script->getLockers()) { // Explicitly loaded?
wm.pushArray(script->listObjectReferences());
@@ -134,15 +135,15 @@ reg_t_hash_map *find_all_used_references(EngineState *s) {
wm._worklist.pop_back();
if (reg.segment != stack_seg) { // No need to repeat this one
debugC(2, kDebugLevelGC, "[GC] Checking %04x:%04x", PRINT_REG(reg));
- if (reg.segment < segMan->_heap.size() && segMan->_heap[reg.segment]) {
+ if (reg.segment < heap.size() && heap[reg.segment]) {
// Valid heap object? Find its outgoing references!
- wm.pushArray(segMan->_heap[reg.segment]->listAllOutgoingReferences(reg));
+ wm.pushArray(heap[reg.segment]->listAllOutgoingReferences(reg));
}
}
}
// Normalise
- normal_map = normalise_hashmap_ptrs(segMan, wm._map);
+ normal_map = normalizeAddresses(segMan, wm._map);
return normal_map;
}
@@ -162,8 +163,9 @@ void run_gc(EngineState *s) {
// Iterate over all segments, and check for each whether it
// contains stuff that can be collected.
- for (uint seg = 1; seg < segMan->_heap.size(); seg++) {
- SegmentObj *mobj = segMan->_heap[seg];
+ const Common::Array<SegmentObj *> &heap = segMan->getSegments();
+ for (uint seg = 1; seg < heap.size(); seg++) {
+ SegmentObj *mobj = heap[seg];
if (mobj != NULL) {
const SegmentType type = mobj->getType();
segnames[type] = SegmentObj::getSegmentTypeName(type);