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

fingolfin at users.sourceforge.net fingolfin at users.sourceforge.net
Fri May 8 11:54:24 CEST 2009


Revision: 40377
          http://scummvm.svn.sourceforge.net/scummvm/?rev=40377&view=rev
Author:   fingolfin
Date:     2009-05-08 09:54:24 +0000 (Fri, 08 May 2009)

Log Message:
-----------
SCI: Got rid of last traces of class SegInterface

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	2009-05-08 09:54:06 UTC (rev 40376)
+++ scummvm/trunk/engines/sci/engine/gc.cpp	2009-05-08 09:54:24 UTC (rev 40377)
@@ -75,18 +75,10 @@
 
 reg_t_hash_map *find_all_used_references(EngineState *s) {
 	SegManager *sm = s->seg_manager;
-	Common::Array<SegInterface *> interfaces;
 	reg_t_hash_map *normal_map = NULL;
 	WorklistManager wm;
 	uint i;
 
-	interfaces.resize(sm->_heap.size());
-	for (i = 1; i < sm->_heap.size(); i++)
-		if (sm->_heap[i] == NULL)
-			interfaces[i] = NULL;
-		else
-			interfaces[i] = sm->getSegInterface(i);
-
 	// Initialise
 	// Init: Registers
 	wm.push(s->r_acc);
@@ -121,9 +113,9 @@
 
 	// Init: Explicitly loaded scripts
 	for (i = 1; i < sm->_heap.size(); i++)
-		if (interfaces[i]
-		        && interfaces[i]->getType() == MEM_OBJ_SCRIPT) {
-			Script *script = (Script *)(interfaces[i]->getMobj());
+		if (sm->_heap[i]
+		        && sm->_heap[i]->getType() == MEM_OBJ_SCRIPT) {
+			Script *script = (Script *)sm->_heap[i];
 
 			if (script->lockers) { // Explicitly loaded?
 				int obj_nr;
@@ -158,11 +150,6 @@
 	// Normalise
 	normal_map = normalise_hashmap_ptrs(sm, wm._map);
 
-	// Cleanup
-	for (i = 1; i < sm->_heap.size(); i++)
-		if (interfaces[i])
-			delete interfaces[i];
-
 	return normal_map;
 }
 

Modified: scummvm/trunk/engines/sci/engine/seg_manager.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/seg_manager.cpp	2009-05-08 09:54:06 UTC (rev 40376)
+++ scummvm/trunk/engines/sci/engine/seg_manager.cpp	2009-05-08 09:54:24 UTC (rev 40377)
@@ -1182,46 +1182,12 @@
 }
 
 
-// ------------------- Segment interface ------------------
-SegInterface::SegInterface(SegManager *segmgr, MemObject *mobj, SegmentId segId, MemObjectType typeId) :
-	_segmgr(segmgr), _mobj(mobj), _segId(segId), _typeId(typeId) {
-	VERIFY(_mobj->getType() == _typeId, "Invalid MemObject type");
-}
-
-//-------------------- base --------------------
-class SegInterfaceBase : public SegInterface {
-protected:
-	SegInterfaceBase(SegManager *segmgr, MemObject *mobj, SegmentId segId, MemObjectType typeId) :
-		SegInterface(segmgr, mobj, segId, typeId) {}
-public:
-};
-
+//-------------------- script --------------------
 reg_t Script::findCanonicAddress(SegManager *segmgr, reg_t addr) {
 	addr.offset = 0;
 	return addr;
 }
 
-void Script::listAllDeallocatable(SegmentId segId, void *param, NoteCallback note) {
-	(*note)(param, make_reg(segId, 0));
-}
-
-reg_t DynMem::findCanonicAddress(SegManager *segmgr, reg_t addr) {
-	addr.offset = 0;
-	return addr;
-}
-
-void DynMem::listAllDeallocatable(SegmentId segId, void *param, NoteCallback note) {
-	(*note)(param, make_reg(segId, 0));
-}
-
-
-//-------------------- script --------------------
-class SegInterfaceScript : public SegInterfaceBase {
-public:
-	SegInterfaceScript(SegManager *segmgr, MemObject *mobj, SegmentId segId) :
-		SegInterfaceBase(segmgr, mobj, segId, MEM_OBJ_SCRIPT) {}
-};
-
 void Script::freeAtAddress(SegManager *segmgr, reg_t addr) {
 	/*
 		sciprintf("[GC] Freeing script "PREG"\n", PRINT_REG(addr));
@@ -1233,6 +1199,10 @@
 		segmgr->deallocateScript(nr);
 }
 
+void Script::listAllDeallocatable(SegmentId segId, void *param, NoteCallback note) {
+	(*note)(param, make_reg(segId, 0));
+}
+
 void Script::listAllOutgoingReferences(EngineState *s, reg_t addr, void *param, NoteCallback note) {
 	Script *script = this;
 
@@ -1259,11 +1229,6 @@
 
 
 //-------------------- clones --------------------
-class SegInterfaceClones : public SegInterface {
-public:
-	SegInterfaceClones(SegManager *segmgr, MemObject *mobj, SegmentId segId) :
-		SegInterface(segmgr, mobj, segId, MEM_OBJ_CLONES) {}
-};
 
 template<typename T, int INITIAL, int INCREMENT>
 void Table<T, INITIAL, INCREMENT>::listAllDeallocatable(SegmentId segId, void *param, NoteCallback note) {
@@ -1323,12 +1288,6 @@
 
 
 //-------------------- locals --------------------
-class SegInterfaceLocals : public SegInterface {
-public:
-	SegInterfaceLocals(SegManager *segmgr, MemObject *mobj, SegmentId segId) :
-		SegInterface(segmgr, mobj, segId, MEM_OBJ_LOCALS) {}
-};
-
 reg_t LocalVariables::findCanonicAddress(SegManager *segmgr, reg_t addr) {
 	// Reference the owning script
 	SegmentId owner_seg = segmgr->segGet(script_id);
@@ -1347,12 +1306,6 @@
 
 
 //-------------------- stack --------------------
-class SegInterfaceStack : public SegInterface {
-public:
-	SegInterfaceStack(SegManager *segmgr, MemObject *mobj, SegmentId segId) :
-		SegInterface(segmgr, mobj, segId, MEM_OBJ_STACK) {}
-};
-
 reg_t DataStack::findCanonicAddress(SegManager *segmgr, reg_t addr) {
 	addr.offset = 0;
 	return addr;
@@ -1366,28 +1319,7 @@
 }
 
 
-//-------------------- system strings --------------------
-class SegInterfaceSysStrings : public SegInterface {
-public:
-	SegInterfaceSysStrings(SegManager *segmgr, MemObject *mobj, SegmentId segId) :
-		SegInterface(segmgr, mobj, segId, MEM_OBJ_SYS_STRINGS) {}
-};
-
-//-------------------- string frags --------------------
-class SegInterfaceStringFrag : public SegInterface {
-public:
-	SegInterfaceStringFrag(SegManager *segmgr, MemObject *mobj, SegmentId segId) :
-		SegInterface(segmgr, mobj, segId, MEM_OBJ_STRING_FRAG) {}
-};
-
-
 //-------------------- lists --------------------
-class SegInterfaceLists : public SegInterface {
-public:
-	SegInterfaceLists(SegManager *segmgr, MemObject *mobj, SegmentId segId) :
-		SegInterface(segmgr, mobj, segId, MEM_OBJ_LISTS) {}
-};
-
 void ListTable::freeAtAddress(SegManager *segmgr, reg_t sub_addr) {
 	freeEntry(sub_addr.offset);
 }
@@ -1408,12 +1340,6 @@
 
 
 //-------------------- nodes --------------------
-class SegInterfaceNodes : public SegInterface {
-public:
-	SegInterfaceNodes(SegManager *segmgr, MemObject *mobj, SegmentId segId) :
-		SegInterface(segmgr, mobj, segId, MEM_OBJ_NODES) {}
-};
-
 void NodeTable::freeAtAddress(SegManager *segmgr, reg_t sub_addr) {
 	freeEntry(sub_addr.offset);
 }
@@ -1435,61 +1361,17 @@
 
 
 //-------------------- hunk --------------------
-class SegInterfaceHunk : public SegInterface {
-public:
-	SegInterfaceHunk(SegManager *segmgr, MemObject *mobj, SegmentId segId) :
-		SegInterface(segmgr, mobj, segId, MEM_OBJ_HUNK) {}
-};
 
 //-------------------- dynamic memory --------------------
-class SegInterfaceDynMem : public SegInterfaceBase {
-public:
-	SegInterfaceDynMem(SegManager *segmgr, MemObject *mobj, SegmentId segId) :
-		SegInterfaceBase(segmgr, mobj, segId, MEM_OBJ_DYNMEM) {}
-};
 
-SegInterface *SegManager::getSegInterface(SegmentId segid) {
-	if (!check(segid))
-		return NULL; // Invalid segment
+reg_t DynMem::findCanonicAddress(SegManager *segmgr, reg_t addr) {
+	addr.offset = 0;
+	return addr;
+}
 
-	SegInterface *retval = NULL;
-	MemObject *mobj = _heap[segid];
-	switch (mobj->getType()) {
-	case MEM_OBJ_SCRIPT:
-		retval = new SegInterfaceScript(this, mobj, segid);
-		break;
-	case MEM_OBJ_CLONES:
-		retval = new SegInterfaceClones(this, mobj, segid);
-		break;
-	case MEM_OBJ_LOCALS:
-		retval = new SegInterfaceLocals(this, mobj, segid);
-		break;
-	case MEM_OBJ_STACK:
-		retval = new SegInterfaceStack(this, mobj, segid);
-		break;
-	case MEM_OBJ_SYS_STRINGS:
-		retval = new SegInterfaceSysStrings(this, mobj, segid);
-		break;
-	case MEM_OBJ_LISTS:
-		retval = new SegInterfaceLists(this, mobj, segid);
-		break;
-	case MEM_OBJ_NODES:
-		retval = new SegInterfaceNodes(this, mobj, segid);
-		break;
-	case MEM_OBJ_HUNK:
-		retval = new SegInterfaceHunk(this, mobj, segid);
-		break;
-	case MEM_OBJ_DYNMEM:
-		retval = new SegInterfaceDynMem(this, mobj, segid);
-		break;
-	case MEM_OBJ_STRING_FRAG:
-		retval = new SegInterfaceStringFrag(this, mobj, segid);
-		break;
-	default:
-		error("Improper segment interface for %d", mobj->getType());
-	}
-
-	return retval;
+void DynMem::listAllDeallocatable(SegmentId segId, void *param, NoteCallback note) {
+	(*note)(param, make_reg(segId, 0));
 }
 
+
 } // End of namespace Sci

Modified: scummvm/trunk/engines/sci/engine/seg_manager.h
===================================================================
--- scummvm/trunk/engines/sci/engine/seg_manager.h	2009-05-08 09:54:06 UTC (rev 40376)
+++ scummvm/trunk/engines/sci/engine/seg_manager.h	2009-05-08 09:54:24 UTC (rev 40377)
@@ -48,8 +48,6 @@
 		(((mgr)._heap[index]	&& ((mgr)._heap[index]->getType() == MEM_OBJ_SCRIPT || (mgr)._heap[index]->getType() == MEM_OBJ_CLONES))? (mgr)._heap[index]	\
 		: NULL): NULL)
 
-class SegInterface;
-
 class SegManager : public Common::Serializable {
 public:
 	// Initialize the segment manager
@@ -368,15 +366,8 @@
 	byte *dereference(reg_t reg, int *size);
 
 
-	// Segment Interface
 
-	// Retrieves the segment interface to the specified segment
-	// Parameters: (SegmentId) segid: ID of the segment to look up
-	// Returns   : (SegInterface *): An interface to the specified segment ID, or NULL on error
-	// The returned interface must be deleted after use
-	SegInterface *getSegInterface(SegmentId segid);
 
-
 	void heapRelocate(EngineState *s, reg_t block);
 	void scriptRelocateExportsSci11(int seg);
 	void scriptInitialiseObjectsSci11(EngineState *s, int seg);
@@ -434,39 +425,6 @@
 	//void sm_gc(EngineState *s);
 };
 
-
-// 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 {
-protected:
-	SegInterface(SegManager *segmgr, MemObject *mobj, SegmentId segId, MemObjectType typeId);
-
-public:
-	typedef void (*NoteCallback)(void *param, reg_t addr);
-
-	// Deallocates the segment interface
-	virtual ~SegInterface() {}
-
-	// Get the memory object
-	MemObject *getMobj() { return _mobj; }
-
-	// Get the segment type
-	MemObjectType getType() { return _typeId; }
-
-protected:
-	SegManager *_segmgr;
-	MemObject *_mobj;
-	SegmentId _segId;
-
-private:
-	MemObjectType _typeId; // Segment type
-};
-
 } // End of namespace Sci
 
 #endif // SCI_ENGINE_SEG_MANAGER


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