Ticket #2644: itemsheap.diff
File itemsheap.diff, 2.0 KB (added by , 18 years ago) |
---|
-
engines/simon/simon.cpp
97 97 _itemArraySize = 0; 98 98 _itemArrayInited = 0; 99 99 100 _itemHeapPtr = 0;101 _itemHeapCurPos = 0;102 _itemHeapSize = 0;103 104 100 _iconFilePtr = 0; 105 101 106 102 _tblList = 0; … … 588 584 589 585 midi.close(); 590 586 591 free(_itemHeapPtr - _itemHeapCurPos); 587 for (uint i = 0; i < _itemHeap.size(); i++) { 588 delete [] _itemHeap[i]; 589 } 590 591 _itemHeap.clear(); 592 592 593 free(_tablesHeapPtr - _tablesHeapCurPos); 593 594 594 595 free(_gameOffsetsPtr); … … 654 655 } 655 656 656 657 byte *SimonEngine::allocateItem(uint size) { 657 byte *org = _itemHeapPtr; 658 size = (size + 3) & ~3; 658 byte *item = new byte[size]; 659 659 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; 667 663 } 668 664 669 665 void SimonEngine::setUserFlag(Item *item, int a, int b) { … … 728 724 } 729 725 730 726 void SimonEngine::allocItemHeap() { 731 _itemHeapSize = 10000; 732 _itemHeapCurPos = 0; 733 _itemHeapPtr = (byte *)calloc(10000, 1); 727 _itemHeap.clear(); 734 728 } 735 729 736 730 void SimonEngine::allocTablesHeap() { … … 1961 1955 1962 1956 free(_stringTabPtr); 1963 1957 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 1966 1965 free(_tblList); 1967 1966 free(_zoneBuffers); 1968 1967 free(_iconFilePtr); -
engines/simon/simon.h
26 26 27 27 #include "base/engine.h" 28 28 29 #include "common/array.h" 29 30 #include "common/rect.h" 30 31 #include "common/util.h" 31 32 … … 210 211 uint _itemArraySize; 211 212 uint _itemArrayInited; 212 213 213 byte *_itemHeapPtr; 214 uint _itemHeapCurPos; 215 uint _itemHeapSize; 214 Common::Array<byte *> _itemHeap; 216 215 217 216 byte *_iconFilePtr; 218 217