Ticket #2644: itemsheap.diff

File itemsheap.diff, 2.0 KB (added by eriktorbjorn, 18 years ago)

Patch against current SVN

  • engines/simon/simon.cpp

     
    9797        _itemArraySize = 0;
    9898        _itemArrayInited = 0;
    9999
    100         _itemHeapPtr = 0;
    101         _itemHeapCurPos = 0;
    102         _itemHeapSize = 0;
    103 
    104100        _iconFilePtr = 0;
    105101
    106102        _tblList = 0;
     
    588584
    589585        midi.close();
    590586
    591         free(_itemHeapPtr - _itemHeapCurPos);
     587        for (uint i = 0; i < _itemHeap.size(); i++) {
     588                delete [] _itemHeap[i];
     589        }
     590
     591        _itemHeap.clear();
     592
    592593        free(_tablesHeapPtr - _tablesHeapCurPos);
    593594
    594595        free(_gameOffsetsPtr);
     
    654655}
    655656
    656657byte *SimonEngine::allocateItem(uint size) {
    657         byte *org = _itemHeapPtr;
    658         size = (size + 3) & ~3;
     658        byte *item = new byte[size];
    659659
    660         _itemHeapPtr += size;
    661         _itemHeapCurPos += size;
    662 
    663         if (_itemHeapCurPos > _itemHeapSize)
    664                 error("Itemheap overflow");
    665 
    666         return org;
     660        memset(item, 0, size);
     661        _itemHeap.push_back(item);
     662        return item;
    667663}
    668664
    669665void SimonEngine::setUserFlag(Item *item, int a, int b) {
     
    728724}
    729725
    730726void SimonEngine::allocItemHeap() {
    731         _itemHeapSize = 10000;
    732         _itemHeapCurPos = 0;
    733         _itemHeapPtr = (byte *)calloc(10000, 1);
     727        _itemHeap.clear();
    734728}
    735729
    736730void SimonEngine::allocTablesHeap() {
     
    19611955
    19621956        free(_stringTabPtr);
    19631957        free(_itemArrayPtr);
    1964         free(_itemHeapPtr - _itemHeapCurPos);
    1965         free(_tablesHeapPtr - _tablesHeapCurPos);
     1958
     1959        for (uint i = 0; i < _itemHeap.size(); i++) {
     1960                delete [] _itemHeap[i];
     1961        }
     1962
     1963        _itemHeap.clear();
     1964
    19661965        free(_tblList);
    19671966        free(_zoneBuffers);
    19681967        free(_iconFilePtr);
  • engines/simon/simon.h

     
    2626
    2727#include "base/engine.h"
    2828
     29#include "common/array.h"
    2930#include "common/rect.h"
    3031#include "common/util.h"
    3132
     
    210211        uint _itemArraySize;
    211212        uint _itemArrayInited;
    212213
    213         byte *_itemHeapPtr;
    214         uint _itemHeapCurPos;
    215         uint _itemHeapSize;
     214        Common::Array<byte *> _itemHeap;
    216215
    217216        byte *_iconFilePtr;
    218217