diff options
author | Filippos Karapetis | 2009-11-04 14:22:17 +0000 |
---|---|---|
committer | Filippos Karapetis | 2009-11-04 14:22:17 +0000 |
commit | c8fbac1517cd2cd60791d598fb1922846ff0b867 (patch) | |
tree | affd460231664aa124193e0611af1c05a89589b7 /engines/sci/engine/seg_manager.cpp | |
parent | f83d7c6339258cef9d1c53d91a4e2d7b2637d1ec (diff) | |
download | scummvm-rg350-c8fbac1517cd2cd60791d598fb1922846ff0b867.tar.gz scummvm-rg350-c8fbac1517cd2cd60791d598fb1922846ff0b867.tar.bz2 scummvm-rg350-c8fbac1517cd2cd60791d598fb1922846ff0b867.zip |
- Changed the segment manager to be a static part of the engine, and stopped deleting and recreating it when restoring games
- Merged game_exit(), script_free_vm_memory() and script_free_engine()
- Cleanup
svn-id: r45666
Diffstat (limited to 'engines/sci/engine/seg_manager.cpp')
-rw-r--r-- | engines/sci/engine/seg_manager.cpp | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/engines/sci/engine/seg_manager.cpp b/engines/sci/engine/seg_manager.cpp index 2af038185b..79f2e88f9e 100644 --- a/engines/sci/engine/seg_manager.cpp +++ b/engines/sci/engine/seg_manager.cpp @@ -57,21 +57,34 @@ SegManager::SegManager(ResourceManager *resMan) { _exportsAreWide = false; _resMan = resMan; - int result = 0; - - result = createClassTable(); - - if (result) - error("SegManager: Failed to initialize class table"); + createClassTable(); } // Destroy the object, free the memorys if allocated before SegManager::~SegManager() { + resetSegMan(); +} + +void SegManager::resetSegMan() { // Free memory for (uint i = 0; i < _heap.size(); i++) { if (_heap[i]) deallocate(i, false); } + + _heap.clear(); + + // And reinitialize + _heap.push_back(0); + + Clones_seg_id = 0; + Lists_seg_id = 0; + Nodes_seg_id = 0; + Hunks_seg_id = 0; + + // Reinitialize class table + _classtable.clear(); + createClassTable(); } SegmentId SegManager::findFreeSegment() const { @@ -1218,7 +1231,7 @@ int SegManager::freeDynmem(reg_t addr) { return 0; // OK } -int SegManager::createClassTable() { +void SegManager::createClassTable() { Resource *vocab996 = _resMan->findResource(ResourceId(kResourceTypeVocab, 996), 1); if (!vocab996) @@ -1235,8 +1248,6 @@ int SegManager::createClassTable() { } _resMan->unlockResource(vocab996); - - return 0; } } // End of namespace Sci |