[Scummvm-cvs-logs] SF.net SVN: scummvm:[50552] scummvm/trunk/engines/sci/engine

fingolfin at users.sourceforge.net fingolfin at users.sourceforge.net
Thu Jul 1 18:05:29 CEST 2010


Revision: 50552
          http://scummvm.svn.sourceforge.net/scummvm/?rev=50552&view=rev
Author:   fingolfin
Date:     2010-07-01 16:05:29 +0000 (Thu, 01 Jul 2010)

Log Message:
-----------
SCI: Make SegManager::_heap private

Modified Paths:
--------------
    scummvm/trunk/engines/sci/engine/gc.cpp
    scummvm/trunk/engines/sci/engine/seg_manager.cpp
    scummvm/trunk/engines/sci/engine/seg_manager.h

Modified: scummvm/trunk/engines/sci/engine/gc.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/gc.cpp	2010-07-01 16:05:10 UTC (rev 50551)
+++ scummvm/trunk/engines/sci/engine/gc.cpp	2010-07-01 16:05:29 UTC (rev 50552)
@@ -51,12 +51,12 @@
 	}
 };
 
-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 @@
 
 	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 @@
 		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 @@
 
 	// 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);

Modified: scummvm/trunk/engines/sci/engine/seg_manager.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/seg_manager.cpp	2010-07-01 16:05:10 UTC (rev 50551)
+++ scummvm/trunk/engines/sci/engine/seg_manager.cpp	2010-07-01 16:05:29 UTC (rev 50552)
@@ -553,7 +553,7 @@
 
 	if (ret.isRaw != wantRaw) {
 		warning("Dereferencing pointer %04x:%04x (type %d) which is %s, but expected %s", PRINT_REG(pointer),
-			segMan->_heap[pointer.segment]->getType(),
+			segMan->getSegmentType(pointer.segment),
 			ret.isRaw ? "raw" : "not raw",
 			wantRaw ? "raw" : "not raw");
 	}

Modified: scummvm/trunk/engines/sci/engine/seg_manager.h
===================================================================
--- scummvm/trunk/engines/sci/engine/seg_manager.h	2010-07-01 16:05:10 UTC (rev 50551)
+++ scummvm/trunk/engines/sci/engine/seg_manager.h	2010-07-01 16:05:29 UTC (rev 50552)
@@ -438,8 +438,8 @@
 	 */
 	reg_t findObjectByName(const Common::String &name, int index = -1);
 
-	uint32 classTableSize() { return _classTable.size(); }
-	Class getClass(int index) { return _classTable[index]; }
+	uint32 classTableSize() const { return _classTable.size(); }
+	Class getClass(int index) const { return _classTable[index]; }
 	void setClassOffset(int index, reg_t offset) { _classTable[index].reg = offset;	}
 	void resizeClassTable(uint32 size) { _classTable.resize(size); }
 
@@ -460,9 +460,6 @@
 		return &_sysStrings->_strings[idx];
 	}
 
-public: // TODO: make private
-	Common::Array<SegmentObj *> _heap;
-
 #ifdef ENABLE_SCI32
 	SciArray<reg_t> *allocateArray(reg_t *addr);
 	SciArray<reg_t> *lookupArray(reg_t addr);
@@ -473,8 +470,10 @@
 	SegmentId getStringSegmentId() { return _stringSegId; }
 #endif
 
+	const Common::Array<SegmentObj *> &getSegments() const { return _heap; }
+
 private:
-	// Only accessible from saveLoadWithSerializer()
+	Common::Array<SegmentObj *> _heap;
 	Common::Array<Class> _classTable; /**< Table of all classes */
 	/** Map script ids to segment ids. */
 	Common::HashMap<int, SegmentId> _scriptSegMap;


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